ちょっと自宅のファイルサーバを刷新したので、そのときの注意事項を記載しておきます。対象読者は何もかも忘れてしまった未来の自分です。
新規サーバは Gentoo Linux で作ります。既存のは FreeBSD 8.2-RELEASE です。いずれもファイルシステムに ZFS を使い RAIDZ で fail safe な状態にします。基本は Gentoo 本家のハンドブックと、Web で見つけたこのメモを見れば OK です。 / も ZFS にすることができます。
https://github.com/ryao/zfs-overlay/blob/master/zfs-install
サーバとなる PC には Western Digital の WD30EZRX という 3 TByte のディスクが 6 本 SATA3 で接続されており、 2 本壊れてもデータが失われないようにします(うわぁ、ディスクだけで 6 万円超えてるとか)。このディスクは AFT という技術が使われていてセクタが 4096 Byte あるそうです。いつまでも 512 Byte では効率が悪いということでしょうね。このボリュームは /home に当てて、他で使うボリュームは部屋に転がっていた Hitachi の HDS72202 という 2 TByte のディスクを使います。
構築作業の手順ですが、zpool を作成するところをちょいちょい調べたので、やっていることについて補足していきます。
まずはこれ。 zpool コマンドで zpool という名前のボリュームを作ります。
# zpool create -f -o ashift=12 -o cachefile=/tmp/zpool.cache -O normalization=formD -m none -R /mnt/gentoo zpool /dev/sda
オプションはそれぞれこんな意図があります。 man zpool で得られる情報です。
No. | Option | Explanation |
1 | create | 任意のデバイスを使ってボリュームを作ります |
2 | -f | 強制的に vdev を使います。 vdev はディスクだったりファイルだったりデバイスです |
3 | -o ashift=12 | セクタ長を 2 の乗数で指定します。 4096 なら 12、 512 なら 9 ですね。ディスクの構造に依存しません。大きければパフォーマンスが上がりますが、ディスクの使用量も場合によっては上がります |
4 | -o cachefile=/tmp/zpool.cache | ZFS の構造を管理するファイルを指定します。起動時にこれを読みます |
5 | -O normalization=formD | UNICODE で書かれたファイル名を比較するアルゴリズムの指定です。 UNICODE ってそんなもんなのですが、 formD は Mac と相性が良いとか。 |
6 | -m none | どこにも mount しません |
7 | -R /mnt/gentoo | -o cachefile=none,altroot=path と同等のようです。 4 と矛盾しますね。 root として振る舞う path を記載します。 Gentoo のインストールで使う chroot の path を指定すると良いです |
8 | zpool | ボリュームの名前です。お好みで |
9 | /dev/sda | vdev の名前です |
で、起動用のボリューム zroot にこんなコマンドを実行しました。
# zpool create -f -o ashift=12 -O normalization=formD -m / -R /mnt/gentoo zroot sda
/dev/sda は HDS72202 なので ashift=9 で良かったと思いますが、ぱ、パフォーマンス重視なのです。実はあまり考えてません。名前は zroot にしました。これは好みです。
ストレージ用のボリューム home はこんな感じです。
# zpool create -f -o ashift=12 -o cachefile= -O normalization=formD -m /home -R /mnt/gentoo home raidz2 sdb sdc sdd sde sdf sdg
zroot と異なるのは vdev に raidz2 とディスクをしているところです。raidz2 は RAID-5 の亜種で、"write hole" と呼ばれる電源が落ちたときの問題を解決してます。 raidz2 の 2 はパリティに 2 本ディスクを使うという意味なので、 2 本までのディスク障害に耐えられます。
ここまで来たら、他は固有の手順はそんなにないと思いました。あとは zfs コマンドでボリュームを作って mount したら例のメモに従えば OK です。きっと 3 年後くらいにまたハマるので今の自分に感謝するはず。