gpt + zfsboot

土日ほぼ全部つぶして、GPTのfreebsd-zfsをmirrorしたpure ZFS環境が完成。結局、何が悪くてブートしなかったのか、何をしたら解決したのか謎だけど。

nanobsdがあちこちはまるので、結局pxebootにひよってしまった。

あらかじめ、make.confにLOADER_ZFS_SUPPORT=YESとしてlivefsを作っとく。
pxebootで起動したら、あとはほとんど、http://blog.ninth-nine.com/diary/20090301.txt の内容でOK。

GPTでパーティションを切る

gpart create -s GPT ad4
gpart create -s GPT ad6
gpart add -b 34 -s 128 -t freebsd-boot ad4
gpart add -b 34 -s 128 -t freebsd-boot ad6
gpart add -b 162 -s 1953524973  -t freebsd-zfs ad4
gpart add -b 162 -s 1953524973  -t freebsd-zfs ad4
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad4
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad6

ZFSでFSを切る

zpool create pool1 mirror /dev/ad4p2 /dev/ad6p2
zfs create pool1/usr
zfs create pool1/home
zfs create pool1/share
zfs create pool1/space
zfs create pool1/var
zfs create -V 2g pool1/swap

zpool set bootfs=pool1 pool1
zfs set org.freebsd:swap=on pool1/swap

ファイルをコピー

zfs set mountpoint=/mnt pool1
zfs mount -a

cd /
find -x . | cpio -pmd /mnt

設定ファイル

echo 'pool1 / zfs rw 0 0' > /mnt/etc/fstab

echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf

vi /mnt/boot/loader.conf
      • -
zfs_load="YES" vm.kmem_size="512M" vm.kmem_size_max="512M" vfs.root.mountfrom="zfs:pool1"
      • -

import/exportして、zpool.cacheを作成(もとがpxerootなので、mfsに作らせる)

mdconfig -a -t malloc -s 1m
newfs /dev/md2
mount /dev/md2 /boot/zfs
zpool export pool1
zpool import pool1
cp /boot/zfs/zpool.cache /mnt/boot/zfs

リブートして、シングルユーザモードで起動し、どこからともなくinstallworld

zfs set mountpoint=legacy pool1
reboot
boot -s

zfs set mountpoint=/usr pool1/usr
zfs set mountpoint=/home pool1/home
zfs set mountpoint=/share pool1/share
zfs set mountpoint=/space pool1/space
zfs set mountpoint=/var pool1/var

/etc/netstart
mount SERVER:/usr/src /usr/src
mount SERVER:/usr/obj /usr/obj
cd /usr/src
make installworld installkernel
mergemaster