FreeBSD:FreeBSD9.0(amd64) on ZFS
FreeBSD on ZFS
FreeBSD 9.0が出たので、FreeBSD on ZFS(root/bootとも)にチャレンジしてみました。多少手順が面倒くさいですが、さっくりと動きます。
FreeBSD 8.2(amd64)で試した際には、負荷をかけるとマシンがフリーズしていたのですが、FreeBSD9.0だと安定して動きます。おすすめですね。
OS インストール & ZFS設定
(1) FreeBSD 9.0のインストールDVDで起動します。
(2) Installを選択します
(3) KeymapをJapanese 106にします
(4) ホスト名をつけます
(5) パーティショニングを行います。ここでは「Shell」を選択します。
(6) zpool.cacheを書き込む必要があるため、/tmpを書き込み可能にします。
# umount -f /dev/md1 # mdmfs -s 512M md1 /tmp
(7) デバイス名を調査します
# dmesg | fgrep MB
=> ada0/da0等出力されるので、それがデバイス名になります。今回の場合はda0になります。
(8) GPT形式で、パーティションを切ります。4GB swapで、それ以外は全領域を割り当てます。
# gpart create -s gpt da0 # gpart add -b 34 -s 64k -t freebsd-boot da0 # gpart add -s 4G -t freebsd-swap -l swap0 da0 # gpart add -t freebsd-zfs -l disk0 da0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
(9) zpoolを作成します。エラーが出ますが、気にせず進めましょう。後ほどの手順でexport -> importすることで問題解決するからです。
# zpool create zroot /dev/gpt/disk0 # zpool set bootfs=zroot zroot # zfs set checksum=fletcher4 zroot
(10) ZFSパーティションを作成します。ここでもエラーが出ますが、気にせず進めましょう。
# zfs set mountpoint=/mnt zroot # zfs create zroot/usr # zfs create zroot/usr/home # zfs create zroot/var # zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp # zfs create -o compression=lzjb -o setuid=off zroot/usr/ports # zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles # zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash # zfs create -o exec=off -o setuid=off zroot/var/db # zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg # zfs create -o exec=off -o setuid=off zroot/var/empty # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log # zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail # zfs create -o exec=off -o setuid=off zroot/var/run # zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
(11) poolをexportしたのちimportします。キャッシュファイルは、書き込み許可を与えた/tmp上に作成します。
# zpool export zroot # zpool import -o cachefile=/tmp/zpool.cache zroot
(12) symlink/sticky bitをたてます。
# chmod 1777 /mnt/tmp # cd /mnt ; ln -s usr/home home # chmod 1777 /mnt/var/tmp
(13) FreeBSDのKernel/バイナリ等を展開します
# sh
# cd /usr/freebsd-dist
# export DESTDIR=/mnt
# for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
# do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
(14) zpool.cacheをコピーします
# cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
(15) ZFSで起動する設定を加えます。
# echo 'zfs_load="YES"' >> /mnt/boot/loader.conf # echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf # cat << EOF > /mnt/etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/gpt/swap0 none swap sw 0 0 EOF # echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
(16) すべての領域をアンマウントします。
# zfs set readonly=on zroot/var/empty # zfs umount -a
アンマウントが失敗した場合は強制アンマウントします
# umount -f /mnt
(17) マウントポイントをセットします。
# zfs set mountpoint=legacy zroot # zfs set mountpoint=/tmp zroot/tmp # zfs set mountpoint=/usr zroot/usr # zfs set mountpoint=/var zroot/var
(18) 再起動します。
# sync;sync;sync # reboot
(19) OS再起動後、キーマップ・インタフェースを設定します
# vi /etc/rc.conf => 以下を追加する。適宜自分の環境に合わせて設定する。 hostname="host1.example.com" ifconfig_re0="DHCP" keymap="jp.106"
(20) rootアカウントのパスワード設定・タイムゾーン設定を行う
# passwd # tzsetup
(21) 再起動します。
# sync;sync;sync # reboot
以上で完成です。お疲れ様でした。ZFS生活をおもう存分楽しめます。
参考
http://www.aisecure.net/2011/05/01/root-on-zfs-freebsd-current/ http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot








