Broken ZFS boot on upgrade

Andriy Gapon avg at FreeBSD.org
Mon Nov 11 13:18:30 UTC 2019


On 11/11/2019 15:10, Jonathan Anderson wrote:
> On 11/11, Andriy Gapon wrote:
>> Could it be that you have 2TB+ disk(s) and a relatively old BIOS ?
> 
> The first two vdevs use 1 TiB disks, but the third vdev has 3 TiB disks, so that
> sounds like a possible explanation... perhaps the contents of /boot previously
> resided on one of the 1 TiB vdevs but the new /boot lives on the new vdev
> post-upgrade. Is there a zfs admin command to ask which vdev(s) a file or
> directory's blocks reside on?

You need to find out the inode number first (ls -i or stat -s).
Then you can use zdb -ddddd <zfs dataset> <inum>
For example:
$ zdb -ddddd rpool/ROOT/20171102 4557
...
               0 L1  0:16e1304000:2000 20000L/2000P F=102 B=26531456/26531456
               0  L0 0:2d155d000:20000 20000L/20000P F=1 B=26531456/26531456
           20000  L0 0:2d1c91000:20000 20000L/20000P F=1 B=26531456/26531456
           40000  L0 0:2d1cb1000:20000 20000L/20000P F=1 B=26531456/26531456
           60000  L0 0:129eeef000:20000 20000L/20000P F=1 B=26531456/26531456
           80000  L0 0:129f138000:20000 20000L/20000P F=1 B=26531456/26531456
           a0000  L0 0:129ef0f000:20000 20000L/20000P F=1 B=26531456/26531456
           c0000  L0 0:129f1c3000:20000 20000L/20000P F=1 B=26531456/26531456
           e0000  L0 0:129f2c6000:20000 20000L/20000P F=1 B=26531456/26531456
[... lots of ouput ...]
0:129f2c6000:20000 is a block pointer.
0 is a vdev number, typically it's n-th device zpool status output.
129f2c6000 is a hexadecimal offset within a vdev, in bytes.
20000 is a hexadecimal block size.

> My BIOS is from 2016, so not "old", but possibly old enough?

-- 
Andriy Gapon


More information about the freebsd-fs mailing list