環境
FreeBSDを普通にufsでインストールされているとします。
/dev/ad0s1a: ufs root
/dev/ad0s1d: zfs root
ad0s1aはbootに必要なので残しておきます。(/boot以外は必要ないですがzfsがこけたときのために残しておきます)
zfsのプールを生成します。
# zpool create tank /dev/ad0s1d
ファイルシステムzfsを生成します
# zfs create tank/usr
# zfs create tank/var
# zfs create tank/tmp
# zfs create tank/usr/local
# zfs create tank/usr/obj
# zfs create tank/usr/ports
# zfs create tank/usr/src
swap用ファイルシステムを生成します
# zfs create -V 1gb tank/swap
# swapon /dev/zvol/tank/swap
システム起動時にmountするためのおまじない
# zfs set org.freebsd:swap=on tank/swap
/dev/ad0s1aにあるファイルを/tankへコピーします
# tar (省略)
zfs root上のbootの整合性をあわせます
# rm -fr /tank/boot
# cd /tank
# mkdir bootdir
# ln -s bootdir/boot /boot
zfs root上の/etc/fstabを設定します
/tank/etc/fstab:
# Device Mountpoint FStype Options Dump Pass#
tank / zfs rw 0 0
/dev/ad0s1a /bootdir ufs rw 0 0
/dev/zvol/tank/swap none swap sw 0 0
ufs root上の/etc/fstabを設定します(不要?)
tank / zfs rw 0 0
zfsのマウントポイントを変更します。
# zfs set mountpoint=/tmp tank/tmp
# zfs set mountpoint=/usr tank/usr
# zfs set mountpoint=/var tank/var
# zfs set mountpoint=/home tank/home
boot loaderでzfsをrootにします。
/boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:tank"
vm.kmem_size="256M"
リブートします。
これで一応完了です。
コマンドメモ
zpool status
zpool list
zfs list
zfsインストール後に/dev/ad0s1aのサイズを変更したくなったので以下をしました
もともと/dev/ad0s1a (10GB)を2GBに変更します。
pxebootでFreeBSDを再インストール。/dev/ad0s1dはそのままで/dev/ad0s1aを2GBにします。
起動するとtank が認識できなくなっているので、
# zfs import tank
で使えるようになりました。
さらにもともとswap用に確保していたad0s1bもtankにくっつけました。
# zpool add tank /dev/ad0s1b
現状は以下の通り
# zpool status
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
ad0s1d ONLINE 0 0 0
ad0s1b ONLINE 0 0 0
errors: No known data errors
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 31.7G 1.59G 30.1G 5% ONLINE -
% df
Filesystem 1K-blocks Used Avail Capacity Mounted on
tank 30009216 16640 29992576 0% /
devfs 1 1 0 100% /dev
/dev/ad0s1a 2026030 510604 1353344 27% /bootdir
tank/home 29992576 0 29992576 0% /home
tank/tmp 29992576 0 29992576 0% /tmp
tank/usr 30534528 541952 29992576 2% /usr
tank/usr/local 30252928 260352 29992576 1% /usr/local
tank/usr/obj 29992576 0 29992576 0% /usr/obj
tank/usr/ports 30342656 350080 29992576 1% /usr/ports
tank/usr/src 30480000 487424 29992576 2% /usr/src
tank/var 30001408 8832 29992576 0% /var
参考
http://fragile-graciousness.net/svr_fbsd_zfs.html
http://freebsd.g.hatena.ne.jp/nce/20080206
http://wiki.freebsd.org/ZFSOnRoot
http://blog.ninth-nine.com/diary/20071103.txt
http://lists.freebsd.org/pipermail/freebsd-current/2007-April/070616.html
zfs(8)