ZFSBoot try and bsdlabel bootstrap code

Joao Barros joao.barros at gmail.com
Sat Dec 6 07:38:23 PST 2008


On Sun, Nov 30, 2008 at 9:05 AM, Doug Rabson <dfr at rabson.org> wrote:
>
> On 30 Nov 2008, at 01:08, Joao Barros wrote:
>
>> On Tue, Nov 25, 2008 at 1:48 AM, Joao Barros <joao.barros at gmail.com>
>> wrote:
>>>
>>> On Fri, Nov 21, 2008 at 9:31 PM, Olivier SMEDTS <olivier at gid0.org> wrote:
>>>>
>>>> 2008/11/20 Doug Rabson <dfr at rabson.org>:
>>>>>
>>>>> On 19 Nov 2008, at 22:12, Olivier SMEDTS wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I want to boot off a ZFS pool (version 13) on an USB stick for testing
>>>>>> purposes. But I'm stuck with the bsdlabel bootstrap code size...
>>>>>> I'm using a 2 hours old CURRENT.
>>>>>>
>>>>>> # kldload usb2_storage_mass
>>>>>> # kldload zfs
>>>>>> # dd if=/dev/zero of=/dev/da0 bs=512 count=32
>>>>>> # fdisk -BI da0
>>>>>> # dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
>>>>>> # bsdlabel -wB -b /boot/zfsboot da0s1
>>>>>> bsdlabel: boot code /boot/zfsboot is wrong size
>>>>>>
>>>>>> Is what I'm trying to do with bsdlabel wrong ?
>>>>>> I previously tried with the default bootstrap code but I had an
>>>>>> (expected) "boot: Not ufs" error at boot.
>>>>>>
>>>>>> PS : I'm not subscribed to this list.
>>>>>
>>>>> The process for install zfsboot is a bit manual (and undocumented). Try
>>>>> something like this:
>>>>>
>>>>>      # dd if=/boot/zfsboot of=/dev/da0s1 count=1
>>>>>      # dd if=/boot/zfsboot of=/dev/ds0s1 skip=1 seek=1024
>>>>>
>>>>> Alternatively, you might try using the brand new support for GPT that I
>>>>> committed yesterday:
>>>>>
>>>>>     # gpt create -f da0
>>>>>     # gpt boot -b /boot/pmbr -g /boot/gptzfsboot da0
>>>>>     # gpt add -t freebsd-zfs da0
>>>>>     # zpool create mypool da0p2
>>>>
>>>> It works !
>>>>
>>>> Now I'm stuck at loader(8) prompt.
>>>
>>> That's a me too.
>>>
>>> I tried this under vmware with LOADER_ZFS_SUPPORT=yes on make.conf:
>>> # gpart create -s gpt ad0
>>> # gpart add -b 34 -s 128 -t freebsd-boot ad0
>>> ad0p1 added
>>> # gpart add -b 162 -s 15078327 -t freebsd-zfs ad0
>>> ad0p2 added
>>> # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0
>>> # zpool create tank ad0p2
>>> # zpool set bootfs = tank tank
>>>
>>> lsdev on loader shows:
>>> cd devices:
>>> disk devices:
>>>  disk0:    BIOS drive c:
>>>    disk0p1: FreeBSD boot
>>>    disk0p2: FreeBSD ZFS
>>> pxe devices:
>>> zfs devices:
>>>
>>> Any hints?
>>>
>>
>>
>> I'm trying to figure out why loader doesn't see my zfs pool and here's
>> what I got:
>>
>> FreeBSD/i386 boot
>> Default: tank:/boot/loader
>> boot: status    pool: tank
>> config:
>>                        NAME    STATE
>>                        tank            ONLINE
>>                        ad0p2   ONLINE
>>
>> I added some printfs on loader\main.c:
>>
>>        guid = kargs->zfspool;
>>        unit = zfs_guid_to_unit(guid);
>>        if (unit >= 0) {
>>            sprintf(devname, "zfs%d", unit);
>>            setenv("currdev", devname, 1);
>>        }
>>
>> and guid returns the correct guid for my pool but unit returns -1
>> which by looking at zfs_guid_to_unit means something is not right.
>>
>> Any pointers Doug?
>
> It looks like loader didn't manage to find the pool for some reason. This
> probing process happens in sys/boot/zfs/zfs.c in the function
> zfs_dev_init(). Its supposed to taste all the available disks and partitions
> for the presence of a ZFS pool. The actual tasting process happens in
> vdev_probe().
>
>

Paul Saab just commited this: http://svn.freebsd.org/changeset/base/185711
It's working now! Thank you very much to both! :-D


-- 
Joao Barros


More information about the freebsd-fs mailing list