sparc64/165025: [PATCH] zfsboot support for sparc64
gavin.mu at gmail.com
Sun Feb 12 15:30:09 UTC 2012
The following reply was made to PR sparc64/165025; it has been noted by GNATS.
From: Gavin Mu <gavin.mu at gmail.com>
To: Marius Strobl <marius at alchemy.franken.de>
Cc: bug-followup at freebsd.org
Subject: Re: sparc64/165025: [PATCH] zfsboot support for sparc64
Date: Sun, 12 Feb 2012 22:59:12 +0800
>> Known Limitations:
>> 1. only zpool on a whole disk is supported, zfs boot from zpool in VTOC8 partitions may not work.
> Uhm, are you sure you didn't have (the remnants) of a VTOC label on
> the disk? I'd expect the firmware to refuse to boot from a disk not
> having one.
Sorry, it is my fault not writing this here. A fake VTOC8 label is
still required, and it is not conflict with zpool on the whole disk,
since ZFS reserved the first 8KB block unused. the VTOC8 table and
boot1 (or zfsboot) code can be in this 8KB block. command `zpool
create` will not destroy the VTOC8 table and the boot1 code.
>> 2. boot from mirror/raidz is not supported due to limited dev environment.
> Could you also tackle these remaining bits or at least describe what
> it would take to support booting from a zpool in a VTOC label, mirror
> and raidz?
I do not have enough hardware to test booting from mirror/raidz disks,
so I focus only on booting from one single disk in this PR.
The default zfs_dev.dv_init() traverse all possible disks and
slices/partitions to find all zpool vdev, I simply changed the
behavior to read from one single disk only then it is easy to know
which zpool should be used to boot (there will be only one). To
support booting from mirror/raidz, all disks/slices must be traversed
and it is needed to decide which zpool to boot.
booting from a zpool in VTOC8 label should be possible for me to do
dev/test, I need a little more VTOC8 knowledge and will try it later.
>> generic steps:
>> 1. build zfsboot and zfsloader
>> 2. create zpool on your disk
>> # zpool create tank /dev/<your disk, ie. ada0>
>> 3. export the zpool
>> # zpool export tank
>> 4. install zfsboot
>> # dd if=boot1 of=/dev/<your disk, ie. ada0> bs=512 skip=1 oseek=1 conv=notrunc
> Assuming there is a VTOC8 label, this could also be done using `gpart -b`,
Yes, but I think we should keep the zpool exported, otherwise this
command may fail.
>> 5. install zfsloader to ZFS Book Block location
>> # dd if=zfsloader of=/dev/<your disk, ie. ada0> bs=512 oseek=1024 conv=notrunc
> I think to vaguely remember there being a zfs command/way of writing
> a loader to that 3.5MB boot block area following the uberblock. Do
> you know what it is?
I am also finding this.:) without such command, it will not be able to
update the zfsboot and zfsloader on the disk (dd will report error
since zpool is being used). Maybe we need some other code changes.
> In any case, nice work so far!
More information about the freebsd-sparc64