フルにZFSにしてみた
RAIDカードがアレだったでござるのでZFSにしたった - ここのことはなかったことにするかもしれない の続きです。
これまでのあらすじ
H310は以下略
前提
参考情報(再掲)
http://kanjuku-tomato.blogspot.jp/2013/01/freebsd-91-release-zfs-root-filesystem.html でほぼOKです。
RAID 5にする場合には http://d.hatena.ne.jp/SeishiONO/20120813/1344865725 あたりも見ながら行きます。
パーティションを切る
いつものインストールでパーティションを切る直前まで行き、ここで"Shell"を選択。
まずパーティションが残ってるようなら強制削除してやる。
gpart destroy -F /dev/mfisyspd0
gptを作成
gpart create -s gpt /dev/mfisyspd0
gpart create -s gpt /dev/mfisyspd1
gpart create -s gpt /dev/mfisyspd2
gpart create -s gpt /dev/mfisyspd3
ブートパーティションを作成
gpart add -s 64K -t freebsd-boot /dev/mfisyspd0
gpart add -s 64K -t freebsd-boot /dev/mfisyspd1
gpart add -s 64K -t freebsd-boot /dev/mfisyspd2
gpart add -s 64K -t freebsd-boot /dev/mfisyspd3
swapを作成
(64G必要かといえば必要ないような気がしますがまあ古い人だということで)
gpart add -s 64G -t freebsd-swap /dev/mfisyspd0
gpart add -s 64G -t freebsd-swap /dev/mfisyspd1
gpart add -s 64G -t freebsd-swap /dev/mfisyspd2
gpart add -s 64G -t freebsd-swap /dev/mfisyspd3
zfsパーティションを作成
gpart add -t freebsd-zfs -l disk0 /dev/mfisyspd0
gpart add -t freebsd-zfs -l disk1 /dev/mfisyspd1
gpart add -t freebsd-zfs -l disk2 /dev/mfisyspd2
gpart add -t freebsd-zfs -l disk3 /dev/mfisyspd3
bootcode書き込み
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 /dev/mfisyspd0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 /dev/mfisyspd1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 /dev/mfisyspd2
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 /dev/mfisyspd3
全てのHDDにブートコードを書いていますが、これはHDD0が壊れた際でもブートするようにするためです。
zfsのプールとかを作る
プールを作り /tmp/zfs にマウント
/tmp/zfsを仮ルートとして、"rpool"という名前のプールを作ります。
この際、gtp/disk0-3 を組み入れた raidz1 (RAID5相当)とします。
zpool create -f -o altroot=/tmp/zfs rpool raidz1 \ /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk3
rootとhomeのパーティションを作成
rpool/rootには128Gの制限をかけました。
zfs create rpool/root zfs create rpool/home zfs set quota=128G rpool/root
ブートパーティションをrpool/rootにする
zpool set bootfs=rpool/root rpool
インストール
tar xzpf /usr/freebsd-dist/base.txz -C /tmp/zfs/rpool/root tar xzpf /usr/freebsd-dist/kernel.txz -C /tmp/zfs/rpool/root
なお、後で出てくるzfsチェックツールは src.txz にあるので、それも展開して下さい。
設定ファイルを記述
loaderでzfsモジュールを読むことと、ルートをrpool/rootとすることを設定します。zfsモジュールが依存するopensolarisモジュールはzfsを読む場合に自動で読みます。
vi /tmp/zfs/rpool/root/boot/loader.conf zfs_load="YES" vfs.root.mountfrom="zfs:rpool/root"
/etc/rc.d/zfs を実行できるようにします。
vi /tmp/zfs/rpool/root/etc/rc.conf zfs_enable="YES"
レガシーなマウント登録を書きます。
最低でもfreebsd-swapのぶんは登録する必要があります。
また、zfsのマウントもレガシーにしたい(後述)ので、もうここで書いちゃいましょう。
vi /tmp/zfs/rpool/root/etc/fstab /dev/mfisyspd0p2 none swap sw 0 0 rpool/home /home zfs rw 0 0
zpool.cache を作る
zfs umount -a mkdir /tmp/tmp mount -t tmpfs tmpfs /tmp/tmp zpool export rpool zpool import -o cachefile=/tmp/tmp/zpool.cache -o altroot=/tmp/zfs rpool cp -p /tmp/tmp/zpool.cache /tmp/zfs/rpool/root/boot/zfs/
zfsのファイルシステムをレガシーな登録にする
rpool自体のマウントは切って、rpool/root, rpool/homeはlegacyにします。
zfs set mountpoint=none rpool zfs set mountpoint=legacy rpool/home zfs set mountpoint=legacy rpool/root
rpool/home は fstab でマウントさせます(前述)。rpool/rootはboot時にルートファイルシステムと認識されるように設定されています(前述)。
リブート
最終確認として zfsboottest を使うことができますが、ソースを入れたうえでコンパイルする必要があります。
最終確認を行い、または最終確認をすっとばしてリブートを実行します。
この際、 /home がマウントできないとか言われてブートが止まったら、あわてず mkdir /home を実行します。
zfsboottestの利用
src.txz を展開しているものとします。
cd (rpool/rootをマウントしているフォルダ)/usr/src/tools/tools/zfsboottest vi Makefile "-Werror" を消す vi zfsboottest.c "#include"を固めて書いてあるところで #include "libzfs.h" を入れる。 make && make DESTDIR=/tmp/zfs install env PATH=$PATH:/tmp/zfs/usr/bin sh ./zfsboottest.sh rpool ... The "mountpoint" property of dataset "rpool/root" should be set to "legacy".
前の方ではしれっと「レガシー」とか書かれていましたが、念のためレガシーなマウントにしておいた方がいいよ、と言われたからです。
リブート後
何も設定されていない状態です。
rootで入って sysinstall を実行します。
- Configure/Packages -> どこかのサイトを開こうとする -> ネットワーク設定できてる? と聞かれるので NO -> 設定画面が出てくる
- Configure/Root Password -> rootのパスワード設定
- Configure/Console/Keymap -> Japanese 106 (jp106)に
- Configure/Time Zone -> Asia/Japan (JST)に
- Configure/Network -> sshを入れる(任意ですね)
ここまでやってリブートします。