ZFSBoot try and bsdlabel bootstrap code

Doug Rabson dfr at rabson.org
Sun Nov 30 01:05:18 PST 2008


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().



More information about the freebsd-fs mailing list