うちではMLシリーズをいくつも買って160GB HDDがたくさん余っているので、代々サーバの起動ディスクはHDD 二台のミラーリング構成だったんだけど、電気代や発熱の点で無駄なのでUSBメモリ(x2)に変えることにした。
ちょうど、ML110 G6にはオンボードのUSBソケットがありBIOSのサポートで起動ドライブとして選択できるのでこれを利用する。USBメモリは何でもいいが、FreeBSDなので赤いやつにした。FreeBSD/amd64なのでたぶん8GBの壁はないが、どうせ/だけ(/tmp, /usr/local, /varなどは外出し)なので大きくても意味がない。緊急時のために/usr/srcのコピーを持っておき、ビルド用のスペースも残し、それらをひっくるめてメジャーアップグレードする際にZFS snapshotを取る余裕を考えても、8GBもあれば十分だ。
届いたUSBメモリを差すと、(ほかにSCSIやumassのデバイスがなければ)da0として認識される。初期状態ではFATでフォーマットされているのでこれをクリアしてセットアップ開始。
- まずは確認
12camcontrol devlistgpart show da0 - 上の出力を見てMBRパーティションテーブルを消去
12gpart delete -i 1 da0gpart destroy da0 - GPTパーティションを作ってZFS-only FreeBSDの起動ディスクにする
1234gpart create -s gpt da0gpart add -b 34 -s 128 -t freebsd-boot da0gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0gpart add -b 162 -t freebsd-zfs -l usbdisk0 da0 - USBメモリなので
noatimeが重要
1zpool create -o atime=off zusbroot /dev/gpt/usbdisk0 - 事前に
/tmp,/var,/usr/localなどはパーティションを分けておく(/tmpはメモリが潤沢にあるならtmpmfs推奨) - 現在の
/がzrootだとして、zusbrootにコピーする手順
123zfs snaptshot zroot@nowzfs send zroot@now | zfs receive -F zusbrootzfs destroy zroot@now - 新しい
/boot/loader.confにvfs.root.mountfrom="zfs:zusbroot"を設定
1vi /zusbroot/boot/loader.conf - 新しい
/etc/fstabにzusbroot / zfs rw 0 0を設定
1vi /zusbroot/etc/fstab /usrを分けている場合は/usrも作ってコピーした後、zfs unmountしてからマウントポイントを/usrに設定
12zfs unmount zusbroot/usrzfs set mountpoint=/usr zusbroot/usr/は自動マウントの対象外
1zfs set mountpoint=legacy zusbroot- あとは
/rootや/usr/share/man/**/cat*などを何とかして、平時はread onlyにしたい
12zfs set -o readonly=on zusbrootzfs set -o readonly=on zusbroot/usr
何か抜けてるかもしれないし間違ってるかもしれないので自分で意味を考えながらリスクを承知でやってください。
リセットしてF10でBIOSセットアップに入って二箇所(USB Device Boot PriorityをHighにして、起動デバイス順序でUSBメモリを他のHDDより上に移動)直したら、ちゃんとブートするか確認。
うまく起動できたら、もう一つUSBメモリを背面にでも差して、da1について同様に設定する。zpool createのプール名をzusbroot2のように変え、今度は上記操作をzusbroot→zusbroot2と読み替えればいい。以後、大きめのアップグレード、特にZFSのバージョンが上がった際にrsync -xaHAXでファイルを同期し、gpart bootcodeでbootcodeの更新を行えばいいだろう。寿命を気にしてのUSBメモリ化なのでミラーリングはしない。なお、最初はattachでミラー後にdetachして置いておけばいいかと思ったら、detachした時点でどこのプールにも属さなくなってしまうため、/をマウントできずブートできないディスクになってしまうのでダメだ。
最後に、時々はsudo find -x / -mtime -1hで最近いじられたファイルやディレクトリがないかを調べ、da0に頻繁に書き込みアクセスが発生したりしていないか見るといいだろう。また、gstat(8)も見た方がいい。俺はそれでatime=offし忘れに気付いたりした。
そんな感じで、うちのサーバは赤いやつで動いています。
gluco6 reviews : https://gluco6reviews.usaloves.com/
gluco6 reviews : https://gluco6reviews.usaloves.com/
gluco6 reviews : https://gluco6reviews.usaloves.com/