FreeBSD 8.0でZFS

ZFSを使ってみたいのでFreeBSD 8.0をインストールしてみる。
現在のインストーラだとZFSに対応していないので
RootOnZFS/GPTZFSBoot - FreeBSD Wiki
を、参考にして FreeBSD Root on ZFS using GPT を構築する。

準備

8.0-RELEASE-amd64-memstick.imgだと Live FS とインストールデータ両方入っているので、これを使う。
http://ftp.jaist.ac.jp/pub/FreeBSD/ISO-IMAGES-amd64/8.0/
DDでUSBメモリに書き込む(Ubuntuを使った)

$ sudo dd if=8.0-RELEASE-amd64-memstick.img of=/dev/sdb bs=10240 conv=sync

sysinstall

USBから起動してsysinstallからfixitを。(/dev/da0 になるように 1番ポートにつけること)

Country Selection -> 110 Japan
System Console Keymap -> USA CapsLock->Ctrl
Fixit -> 3 USB

Fixit

SSDがつながってる ad4 にインストール
GPT作成

Fixit# gpart create -s gpt ad4

パーティション作成(SSDなのでSwapは無しにした)

Fixit# gpart add -s 64K -t freebsd-boot ad4
Fixit# gpart add -t freebsd-zfs -l disk0 ad4

ブートコードをインストール

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

ZFSモジュールロード

Fixit# kldload /mnt2/boot/kernel/opensolaris.ko
Fixit# kldload /mnt2/boot/kernel/zfs.ko

ZFSプール作成

Fixit# mkdir /boot/zfs
Fixit# zpool create zroot /dev/gpt/disk0
Fixit# zpool set bootfs=zroot zroot 

ZFSファイルシステム構造作成
(追記) HDDに余裕があれば、こんなに細かくやらなくてもいいと思う。あとはどの単位でスナップショットを取りたいかとか

Fixit# zfs set checksum=fletcher4 zroot
Fixit# zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
Fixit# chmod 1777 /zroot/tmp
Fixit# zfs create zroot/usr
Fixit# zfs create zroot/usr/home
Fixit# cd zroot ; ln -s /usr/home home
Fixit# zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
Fixit# zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
Fixit# zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
Fixit# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
Fixit# zfs create zroot/var
Fixit# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
Fixit# zfs create -o exec=off -o setuid=off zroot/var/db
Fixit# zfs create -o compression=lzjb  -o exec=on -o setuid=off zroot/var/db/pkg
Fixit# zfs create -o exec=off -o setuid=off zroot/var/empty
Fixit# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
Fixit# zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
Fixit# zfs create -o exec=off -o setuid=off zroot/var/run
Fixit# zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
Fixit# chmod 1777 /zroot/var/tmp
(追記 2010.3.5 細かく分割しない場合)
Fixit# zfs set checksum=fletcher4 zroot
Fixit# mkdir zroot/tmp
Fixit# mkdir zroot/usr
Fixit# mkdir zroot/usr/home
Fixit# mkdir zroot/var
Fixit# mkdir zroot/var/tmp
Fixit# chmod 1777 /zroot/tmp
Fixit# chmod 1777 /zroot/var/tmp
Fixit# cd zroot ; ln -s /usr/home home

FreeBSDインストール

Fixit# cd /dist/8.0-RELEASE
Fixit# export DESTDIR=/zroot
Fixit# for dir in base catpages dict doc games info lib32 manpages ports; do (cd $dir ; ./install.sh) ; done
Fixit# cd src ; ./install.sh all
Fixit# cd ../kernels ; ./install.sh generic
Fixit# cd /zroot/boot ; cp -Rlp GENERIC/* /zroot/boot/kernel/

/var/empty readonly

Fixit# zfs set readonly=on zroot/var/empty
(追記 2010.3.5 細かく分割しなかった場合は無し)

chroot

Fixit# chroot /zroot

/etc/rc.conf作成

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

/boot/loader.conf作成

Fixit# echo 'zfs_load="YES"' > /boot/loader.conf
Fixit# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf

ZFSインストール

Fixit# echo 'LOADER_ZFS_SUPPORT=YES' > /etc/src.conf
Fixit# mount -t devfs devfs /dev
Fixit# export DESTDIR=""
Fixit# cd /usr/src/sys/boot/
Fixit# make obj
Fixit# make depend
Fixit# make
Fixit# cd i386/loader
Fixit# make install

rootパスワード設定

Fixit# passwd

タイムゾーン設定

Fixit# tzsetup

/etc/mail/aliases.db作成

Fixit# cd /etc/mail
Fixit# make aliases

chroot抜ける

Fixit# umount /dev
Fixit# exit

zpool.cacheインストール

Fixit# cp /boot/zfs/zpool.cache /zroot/boot/zfs/zpool.cache

/etc/fstab作成

Fixit# touch /zroot/etc/fstab

ライブラリパス

Fixit# export LD_LIBRARY_PATH=/mnt2/lib

アンマウントZFS

Fixit# cd /
Fixit# zfs unmount -a

マウントポイント設定

Fixit# zfs set mountpoint=legacy zroot
Fixit# zfs set mountpoint=/tmp zroot/tmp
Fixit# zfs set mountpoint=/usr zroot/usr
Fixit# zfs set mountpoint=/var zroot/var
(追記 2010.3.5 細かく分割しなかった場合)
Fixit# zfs set mountpoint=legacy zroot

Fixit終了

Fixit# exit

sysinstall終了

Please choose a fixit option -> X Exit
sysinstall Main Menu -> X Exit Install

これでインストール終了。あとはUSBメモリを抜いてSSDから起動させ普通に環境構築すればOK