GPTZFSBoot/RAIDZ2 on VirtualBox

環境:

VirtualBox上で http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/RAIDZ2 に書いてある方法で構築してブートすると

ZFS: i/o error - all block copies unavailable
ZFS: can't read MOS
ZFS: unexpected object set type lld
ZFS: unexpected object set type lld

FreeBSD/i386 boot
Default: z:/boot/kernel/kernel
boot:

というエラーが出てブートできない。調べたところVirtualBoxBIOSがディスクを1つしかレポートしないためRAIDZ/RAIDZ2ではブートしないらしい。
で、解決方法。http://lists.freebsd.org/pipermail/freebsd-emulation/2010-September/007991.html で示されてるパッチを当てたブートコードを使う。

手順としては、http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/RAIDZ2 の手順のうち "chroot /zroot" したあとで

Fixit# cd /usr/src
Fixit# fetch http://people.freebsd.org/~pjd/patches/bios_numdrives.patch
Fixit# patch -p0 < bios_numdrives.patch
Fixit# cd sys/boot
Fixit# make obj && make depend && make && make install

ここまでできたら新しいブートコードを書き込む。

Fixit# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0

上記ブートコードの書き込みをRAIDZ/RAIDZ2で使うディスク全てに行い、あとはwikiに書いてある残りの手順を行えばVirtualBox上でRAIDZ/RAIDZ2のZFSBootができます。