ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

フルZFSのインストール

http://blog.kteru.net/freebsd-100-bsdinstall-manual-zfs/ あたりを参照しながら実施。

前提

  • プール名はrpool
  • ルートは128G上限
  • swapはzvolを利用
  • その他はホーム
  • レガシーなファイルシステムにする
  • とりあえずユーザアカウント作成は後にする

パーティションを切る

いつものインストールでパーティションを切る直前"Partitioning"ダイアログまで行き、ここで"Shell"を選択。

パーティションをクリア

まずパーティションが残ってるようなら強制削除してやる。

gpart destroy -F /dev/mfisyspd0
gpart destroy -F /dev/mfisyspd1
gpart destroy -F /dev/mfisyspd2
gpart destroy -F /dev/mfisyspd3
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
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パーティションを作成

disk[n] と mfisyspd[n] の2箇所が0,1,2,3となっているので注意しましょう。
4コマンドすべてdisk0にしてしまって、/dev/gpt/disk0だけしかない!なんてことにならないようorz

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

zfsの構築

プール作成
zpool create -f -o altroot=/mnt -m none rpool raidz1 \
  /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk3
swapのためにzvolを切り出す

rpool/swap0という名前で64Gのzvolを切り出す("-V"でzvol切りだしになります)

zfs create -V 64G -o checksum=off rpool/swap0
rpool/root, rpool/home 作成

rpool/rootを/にマウントするようにしました。当然ルートにマウントできないので、altrootが効いて/mntにマウントされます。
rpool/homeはとりあえずマウントしません。
rpool/rootには128Gの制限をかけました。

zfs create -o mountpoint=/ rpool/root
zfs create rpool/home
zfs set quota=128G rpool/root
ブートパーティションをrpool/rootにする
zpool set bootfs=rpool/root rpool
いったん終了

exitで抜けて、bsdinstallを続行します。
でもリブートまでしたらダメです。

インストール完了直前

最後に"Manual Configuration"ダイアログが出て、最後の手動設定をしますか?と聞かれるので"Yes"とします。

設定ファイルを記述

loaderでzfsモジュールを読むことと、ルートをrpool/rootとすることを設定します。zfsモジュールが依存するopensolarisモジュールはzfsを読む場合に自動で読みます。

vi /boot/loader.conf

zfs_load="YES"
vfs.root.mountfrom="zfs:rpool/root"

/etc/rc.d/zfs を実行できるようにします。

vi /etc/rc.conf

zfs_enable="YES"

レガシーなマウント登録を書きます。
最低でもfreebsd-swapのぶんは登録する必要があります。

また、zfsのマウントもレガシーにしたい(後述)ので、もうここで書いちゃいましょう。

vi /etc/fstab

/dev/zvol/rpool/swap0 none swap sw 0 0
rpool/home /home zfs rw 0 0

rpool自体のマウントは切って、rpool/root, rpool/homeはlegacyにします。

zfs set mountpoint=none rpool
zfs set mountpoint=legacy rpool/home
# zfs set mountpoint=legacy rpool/root

rpool/rootはboot時にルートファイルシステムと認識されるように設定されているので、無視します。

設定完了

リブートしましょう。リブート時に/homeがマウントできないとか言われてブートが止まったら、マウントポイントが無いだけですので、あわてず mkdir /home を実行します。