これまで使っていたIODATAのLANTANK GIGAだが、最近sata3(3本目のディスク)がさわってもいないのに取り外されてしまう問題が頻発していた。おそらく接点が痛んできたというような問題なのだろうが、RAID5で1本抜けてしまうのは致命的すぎる。
そんな状態で数ヶ月我慢していたのだが、もう我慢の限界、自前でNASを作ることにした。このポストではその設計~結果について書こうと思う。気にした点は容量、消費電力、騒音、だ。
■容量
容量は最近は1TBクラスのHDDが異常に安いのでそれを大量に使うことにして解決する。ファイルシステムは色々検討したのだが、Linux/RAID6よりはopensolarisにzfs(raidz2)のほうが安定しそうに思えたのでそれを使うことにした。使い慣れているFreeBSDにもzfsはポーティングされているのだが、過大な負荷を掛けるとpanicするという情報もあったため、泣く泣くopensolarisを選定している。
ハードウェアRAIDをあえて選定していないのは、コストの面もあるがそれに加えて運用方法がハードウェアによって独特で、学習コストが無駄に高いことをきらってのこと。運用ツールがOSのバージョンにかなり依存しているケースもあって、そうなるとかなり面倒なことになってしまう。それに比べると最近の速いハードウェアにソフトウェアRAIDであれば、運用方法もわかるし、大きなトラブルでアレイごと他のコンピュータに移す必要が出たりというレアケースにも対応しうるということは、実はかなり大きい。
さて、HDDを大量につなぐとなると困るのはインタフェイスだ。色々調査したのだが、1枚の拡張ボードでSATAを8ポートとなると敷居が高く、製品がかなり絞り込まれてまい、殆どがエンタプライズ用途向けばかりになってしまう。その手の製品は専用ドライバを要求したりで前述の運用が面倒という 話題をぶり返してしまいかねない。そういうことになっては馬鹿馬鹿しいことこの上ないので、玄人志向のSATA2I4-LPPCIというSiliconimge Sil3124を用いたSATA4ポートの素直なボードを2枚使うことにした(*)。SATA300は300MB/sec、PCI(32bit/33MHz)は133MB/secとHDDのインタフェイスの方が速いのだが、どうせファイルサーバであってGbE(=1000Mbps=125MB/sec)以上の速度は必要ないため、割り切ってしまうことにする。
(*)この手のディスクインタフェイス系デバイスはBootROMが喧嘩することがある。そのため、同じモノであっても2枚を同時に使うことが出来るか不安だったのだが、これも「出来る」というレポートを見つけることが出来たので後は自己責任ということで買ってしまった。結果、少なくとも私の構成では2枚同時に問題なく認識させることが出来ている。
HDDそのものは、容量を優先してSeagateのST31500341AS(1.5TB/7200rpm)を使おうかとも考えたが、後述する騒音問題が大きくなってしまう不安と、システム全体の費用が増えることを嫌って、Western Digital WD10EADSを10本(うち8本で6TBのraidz2を構築、1本はつないでおいてホットスペア、1本は完全に予備)を選定した。
■消費電力
消費電力は、当初atomプロセッサを使うことで解決しようと考えていたが、実はデスクトップボードに仕立ててあるatom搭載マザーボードは割と電気を食う(システム全体で40W以上という例もある様子)上、実は最近の45nmプロセスで製造されたプロセッサと、システム全体では激しく違うということもないということが友人M氏の指摘でわかった。それに加えて、atom搭載マザーボードの部品選定は、競合が少ないこともあっていまいち単体マザーボードより贅沢さが足りない(固体電解コンデンサが少なめだとか)ので、最終的にはGIGABYTEのG31M-ES2LとDualCore PentiumE5200を使うこととした。
■騒音
騒音は、HDD自体がある程度うるさいものである以上どうしようもないのだが、それでも静かにしたい。ということで前述の通り5400rpmのWD10EADSを選定したわけだがこれが大正解。ケースを開いたまま8本すべてがスピンアップしても殆どわからないくらいの音しかしない。さすがにアクセスがあったときのヘッド動作音は聞こえるので、そこだけは今後対処しなければと考えている。
構築と結果
あちこちのzfs情報を掲載しているサイトを巡りつつ、下記の通りpoolを初期化した。
root@melongena:~# zpool create tank0 raidz2 c5t0d0 c5t1d0 c5t2d0 c5t3d0 c6t0d0 c6t1d0 c6t2d0 c6t3d0
構築後の容量は下記の通り。
root@melongena:~# zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c3d0s0 ONLINE 0 0 0
errors: No known data errors
pool: tank0
state: ONLINE
scrub: scrub completed after 0h0m with 0 errors on Sat May 2 05:52:28 2009
config:
NAME STATE READ WRITE CKSUM
tank0 ONLINE 0 0 0
raidz2 ONLINE 0 0 0
c5t0d0 ONLINE 0 0 0
c5t1d0 ONLINE 0 0 0
c5t2d0 ONLINE 0 0 0
c5t3d0 ONLINE 0 0 0
c6t0d0 ONLINE 0 0 0
c6t1d0 ONLINE 0 0 0
c6t2d0 ONLINE 0 0 0
c6t3d0 ONLINE 0 0 0
unos@melongena:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rpool/ROOT/opensolaris
152562045 2383869 150178176 2% /
swap 2176776 324 2176452 1% /etc/svc/volatile
/usr/lib/libc/libc_hwcap1.so.1
152562045 2383869 150178176 2% /lib/libc.so.1
swap 2176484 32 2176452 1% /tmp
swap 2176544 92 2176452 1% /var/run
rpool/export 150178195 19 150178176 1% /export
rpool/export/home 150178195 19 150178176 1% /export/home
rpool/export/home/unos
150191281 13105 150178176 1% /export/home/unos
rpool 150178248 72 150178176 1% /rpool
tank0 5732278181 41 5732278141 1% /tank0
この後、zvol と iSCSI と NTFS と zfs snapshotを参考にしたりしつつ、iSCSI Targetとして1000GBの領域を公開、Windows端末(ThinkPad T60/Core2Duo2.0GHz)からHDBENCH3.30でベンチマークを取ってみた。結果、Read 82,914kb/sec、Write 71,160kb/sec、FileCopy 18,423kb/secと、家庭用NASとしては十二分に早いと言える数字が出た。
(*)しかしながら、このいい数字は常にでるわけではなく、試しに2000MBのサイズで試したところ、Writeが20MB/sec程度にまで落ち込んだ。転送速度グラフをみるとピークは高いものの安定せず、時々転送速度がかなり落ち込むのが原因らしい。原因がどこにあるのかは追って調査中である。
今後、無理矢理ディスクを抜いてみたりというトーチャーテストを行った上、問題がなさそうであればsamba等必要なパッケージ類を突っ込んで、新NASの出来上がりとなる。今のところ目下の課題は使っているケースへのHDD固定方法、ではあるのだが…。(^^; この上3台くらい入るかと思うと気が重い。。。。
余談。途中で気づかれた方もいるかと思うが、新NASの名前はmelongenaにした。茄子の学名である。
追記:
read/writeの数字、そのときの実測ではあるのだが、iostatでHDDの速度を見ていると、ピークでも1発あたり10MB/sec程度しか出ていない。これを上限とする限り、ピークでも読み出しは(パリティは飛ばして読んでいるとしても)80MB/sec、書き込みはパリティ分実速度から落ちるので60MB/secが限界のはず。zfsはメモリに随分キャッシュするのでその関係でこういう速度が出ているのだろうと思う。
しかしWD10EADSのような最近の単体で速度がでる玉を使っておいて10MB/sec。さすが33MHz32bitPCIに4つもSATAをぶら下げるだけのことはある、本当に、遅い。