[FreeBSD 10.0-RELEASE] bsdinstall でも自由なパーティションレイアウトで Root on ZFS

あらすじ

FreeBSD 10.0 からインストーラで ZFS が選択できるようになりました。

僕の自宅のストレージサーバは、8.2 の頃から Root on ZFS になっていたり、freebsd-update で数回メジャーバージョンを渡ってきていたりするため、そろそろ一度クリーンインストールしてスッキリしたいと思っていました。

早速 Partitioning の項目で ZFS を選択してインストールしたはいいものの、パーティションと ZFS の切り方は下記のようになっていました。

# gpart show -l
=>       34  209715133  vtbd0  GPT  (100G)
         34       1024      1  gptboot0  (512K)
       1058    4194304      2  swap0  (2.0G)
    4195362  205519805      3  zfs0  (98G)

# zfs list -r zroot
NAME                 USED  AVAIL  REFER  MOUNTPOINT  
zroot               2.17G  93.8G   144K  none  
zroot/ROOT           857M  93.8G   144K  none  
zroot/ROOT/default   857M  93.8G   857M  /  
zroot/tmp            176K  93.8G   176K  /tmp  
zroot/usr           1.33G  93.8G   144K  /usr  
zroot/usr/home       184K  93.8G   184K  /usr/home  
zroot/usr/ports      813M  93.8G   813M  /usr/ports  
zroot/usr/src        545M  93.8G   545M  /usr/src  
zroot/var           1.23M  93.8G   608K  /var  
zroot/var/crash      148K  93.8G   148K  /var/crash  
zroot/var/log        212K  93.8G   212K  /var/log  
zroot/var/mail       144K  93.8G   144K  /var/mail  
zroot/var/tmp        152K  93.8G   152K  /var/tmp  

私的にこの切り方は気に入りません。
/usr/local は別ファイルシステムにしておきたいし、swap 用にわざわざパーティション切るなんてナンセンス。swap は zvol でやりたいです。
更に、ディスク全体を zroot にせず、半分くらいを L2ARC や ZIL に充てたいという思いもあります。

インストール手順

というわけで、大方の部分は bsdinstall を使いつつ、自由なパーティションレイアウト・ZFS レイアウトを実現すべく頑張ってみました。

※ 下記手順は VM での検証のためディスク名が vtbd0 になっています。

Partitioning の項目で SHELL を選択すると、シェルが起動します。

パーティションと zroot を手動で設定していきます。
メッセージにも出ていますが、このシェルを抜けるときにシステムの / が /mnt にマウントされていれば OK です。

# gpart create -s gpt vtbd0
# gpart add -a 4k -s 512k -t freebsd-boot -l boot0 vtbd0
# gpart add -a 4k -s 40g -t freebsd-zfs -l sys0 vtbd0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 vtbd0
# gpart set -a active vtbd0

# gnop create -S 4096 vtbd0p2
# zpool create -o altroot=/mnt -m none -f zroot vtbd0p2.nop
# zfs set atime=off zroot
# zfs set checksum=fletcher4 zroot
# zfs create -V 8g -o checksum=off zroot/swap0

# zfs create -o mountpoint=none zroot/ROOT
# zfs create -o mountpoint=/ zroot/ROOT/default
# zfs create -o mountpoint=/tmp -o setuid=off zroot/tmp
# zfs create -o mountpoint=/usr zroot/usr
# zfs create zroot/usr/home
# zfs create zroot/usr/local
# zfs create -o compression=lz4 -o setuid=off zroot/usr/ports
# zfs create -o compression=lz4 -o exec=off -o setuid=off zroot/usr/src
# zfs create -o mountpoint=/var zroot/var
# zfs create -o compression=lz4 -o exec=off -o setuid=off zroot/var/crash
# zfs create -o compression=lz4 -o exec=off -o setuid=off zroot/var/log
# zfs create -o compression=lz4 -o atime=on zroot/var/mail
# zfs create -o compression=lz4 -o setuid=off zroot/var/tmp

# zpool export zroot
# gnop destroy vtbd0p2.nop
# zpool import -o altroot=/mnt zroot
# mkdir -p /mnt/boot/zfs
# zpool set cachefile=/mnt/boot/zfs/zpool.cache zroot
# zpool set bootfs=zroot/ROOT/default zroot

# exit

exit で抜けた後は、通常と同じようにファイルの展開が行われます。

ネットワークやタイムゾーンの設定など通常通りにすすめていくと、下記のダイアログが出てくるので、YES を選択します。

ここで、起動時の設定・swap 設定を入れてあげます。
こちらもメッセージにも出ていますが、このシェルは /mnt に chroot した状態で起動しているので、注意です。

# echo 'zfs_load="YES"' >> /boot/loader.conf
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# echo '/dev/zvol/zroot/swap0 none swap sw 0 0' >> /etc/fstab

# exit

これで、自由な Root on ZFS で、システムが起動してきます。
めでたしめでたし。

(余談)

portmaster でのコンパイル生活から pkgng でのバイナリ生活にチェンジしましたが、もう快適すぎて涙がでそうです。


  • 更新 (Thu, 27 Mar 2014 03:53:03 JST) pmbr に active フラグを立てる
  • 初稿 (Tue, 25 Mar 2014 22:53:30 JST)