Cannot get zfsboot prompt

Andrey V. Elsukov bu7cher at yandex.ru
Tue Aug 28 02:46:48 UTC 2012


On 27.08.2012 19:06, Jeremie Le Hen wrote:
>> I guess your ada0s1a partition has non zero offset, and second
>> part of zfsboot bootcode has been written into wrong place.
>>
>> AFAIK, the first part of the zfsboot does read the second part
>> from the 1024 sector of the active FreeBSD slice in the MBR.
> 
> Yes I agree this is probably where the catch is.  But note that contrary
> to your procedure, I laid zfsboot2 from ada0s1a.
> 
> The first partition of my BSD label indeed starts at sector 1.
> 
> rescue-bsd# gpart show ada0s1
> =>         0  1953525105  ada0s1  BSD  (931G)
>            0           1          - free -  (512B)
>            1  1951799000       1  freebsd-zfs  (930G)
>   1951799001     1726096       4  freebsd-swap  (842M)
>   1953525097           8          - free -  (4.0k)
> 
>>From what I undestand from sys/boot/i386/zfsboot/zfsldr.S, zfsboot1
> expects zfsboot2 to be at offset 1024 for the start of the first FreeBSD
> (0xA5) MBR active slice (fall-back to non-active).  1024 sectors is not
> chosen randomly, this is because in zpools, the boot block is located
> after the two heading vdev label replicas which are 256KB each.
> 
> Given my partition in shifted by one sector, zfsboot2 is shifted by one
> sector as well so zfsboot1 doesn't find it.
> 
> Do you know if this topic is documented somewhere?  I couldn't find
> anything when I needed it.
> 
> Also, why does gpart(8) enforce a one sector offset for partition inside
> a BSD scheme?  I tried to set an offset to 0 without any effect.

Probably your disk has 4k sectors and gpart did an automatic alignment.
You can disable automatic alignment by specifying "-a 1" when you create partition.
But it will be better if you create BSD slice already aligned. The problem is that
automatic alignment doesn't work with MBR :)
You need to calculate start offset based on disk geometry and sectorsize.

# gpart list ada0 | grep fwsectors

I think you will get 63, so your alignment value will be 63*8 = 504. To create
aligned BSD slice you can use this command:

# gpart add -t freebsd -a 504 ada0

-- 
WBR, Andrey V. Elsukov




More information about the freebsd-fs mailing list