Can FreeBSD boot from a pool comprised of multiple vdevs?

Artem Belevich fbsdlist at src.cx
Thu Sep 17 19:43:36 UTC 2009


Hi,

I've just spent a bit of time investigating the same issue.

There was a thread on -current in June that discussed ZFS booting
issue and this email suggested that zfsboot does not support gang
blocks.
http://lists.freebsd.org/pipermail/freebsd-current/2009-June/008589.html

If I understand it correctly, gang blocks are used when ZFS can't (or
does not want to) allocate contiguous block of required size, so the
block is split in sub-blocks that in turn may be gang blocks. I.e.
we're looking at a tree of blocks. If that's indeed the case, it
implies that even on a single-disk system we may eventually run into a
situation when newly installed kernel will be written using gang block
and thus would not be handled correctly by zfsboot.

That said, I've tried many possible combinations on a VirtualBox
running 8.0BETA4 and most of them didn't work. Here's the summary:

Zpool configurations I was able to boot from:
* 1 disk
* 1 mirror of 2 disks
* 2 mirrors of 2 disks each
* 2-disk raidz (kind of pointless, but..)

Configurations that didn't work:
* RAIDZ2 with 8 disks
* RAIDZ2 with 4 disks
* RAIDZ2 with 3 disks
* RAIDZ with 8 disks
* RAIDZ with 3 disks
* 4 mirrors of 2 disks each
* 3 mirrors of 3 disks each.

Usually gptzfsboot complains that it can't read MOS. Striped
multi-disk setups resulted in "can't find dsl_dir".

I did some digging in case of RAIDZ2 booting failure and it does look
that the failure happens because calculated checksum does not match
expected one. Due to lack of my ZFS knowlegde I didn't get deeper than
that.

--Artem



On Thu, Sep 17, 2009 at 10:41 AM, Matt Reimer <mattjreimer at gmail.com> wrote:
> Is FreeBSD able to boot from a pool comprised of multiple vdevs? If
> not, what would it take to get it working?
>
> I got 8.0-BETA4 booting from a pool comprised of a single raidz vdev,
> but when I added another raidz vdev it fails to boot with this error:
>
> ZFS: i/o error - all block copies unavailable
> ZFS: can't read object set for dataset lld
> Can't find root filesystem - giving up
> ZFS: unexpected object set type lld
> ZFS: unexpected object set type lld
>
> FreeBSD/i386 boot
> Default: glamdring:/boot/kernel/kernel
> boot:
> ZFS: unexpected object set type lld
>
> (Apparently loader's printf() doesn't understand %lld.)
>
> Boots successfully with gptzfsboot:
>
> # zpool status
>  pool: glamdring
>  state: ONLINE
>  scrub: none requested
> config:
>
>        NAME                     STATE     READ WRITE CKSUM
>        glamdring                ONLINE       0     0     0
>          raidz1                 ONLINE       0     0     0
>            label/glamdring-0.0  ONLINE       0     0     0
>            label/glamdring-0.1  ONLINE       0     0     0
>            label/glamdring-0.2  ONLINE       0     0     0
>
> errors: No known data errors
>
> Does not boot:
>
> # zpool status
>  pool: glamdring
>  state: ONLINE
>  scrub: none requested
> config:
>
>        NAME                     STATE     READ WRITE CKSUM
>        glamdring                ONLINE       0     0     0
>          raidz1                 ONLINE       0     0     0
>            label/glamdring-0.0  ONLINE       0     0     0
>            label/glamdring-0.1  ONLINE       0     0     0
>            label/glamdring-0.2  ONLINE       0     0     0
>          raidz1                 ONLINE       0     0     0
>            label/glamdring-1.0  ONLINE       0     0     0
>            label/glamdring-1.1  ONLINE       0     0     0
>            label/glamdring-1.2  ONLINE       0     0     0
>
> errors: No known data errors
>
> Thanks in advance.
>
> Matt
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"
>


More information about the freebsd-fs mailing list