みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

FreeNASでファイルサーバの構築(6) ZFS設定・運用

みーがZFSに関してFreeNASでの設定を備忘録を兼ねてまとめておく.多くの情報はFreeNAS User Guide 9.3 8. Strorageにまとめてあるのでこれを読めば良いのだが,一般的な情報も多いので要点を絞ってまとめておく.

設定する前にまずどのようなNASを作るかを明確にする必要があり,将来の拡張性を視野に入れながらカスタマイズするべきなので,要件を列挙する.

  • 5台のHDDでRAID-Z2を作る.
  • DeduplicationやEncryptionは必要ないのでしない.
  • DataSetを作成し,CIFSを使ってイーサネットからアクセスできるように共有を設定する.
  • Smart情報を監視してアラートをメールする.
  • autoexpandを有効にし,HDDを入れ替えれば自動でボリュームサイズをスケールアップする.
  • Snapshotをとって,以前のバージョンに簡単に戻せるようにする.

これらの設定方法を述べる.

RAID-Z2 Volumeの作成

Storage > View Disksでディスクを確認する.

f:id:atsuhiro-me:20151104005619j:plain:w300

ada0から5まで接続してあって,ada4が250 GBytesと最小容量である.ada0から4でRAID-Z2を作成する.

Storage > Volumes > Volume manager > Manual Setup で,Volumeは"Tank"とし,Member disksに5台のHDDを指定し,Deduplicationはoffで Add Volumeする.

f:id:atsuhiro-me:20151104005624j:plain:w300

f:id:atsuhiro-me:20151104005626j:plain:w300

Group typeをRAID-Z2と指定する.

f:id:atsuhiro-me:20151104005628j:plain:w300

すると以下のようにTankが作成される.容量は理論上 250 Gbyte * (5-2) = 750 Gbyte だが,Gの単位換算の影響もあり660.4GByteとなっている.lz4の圧縮は推奨なのでonになる.

f:id:atsuhiro-me:20151104005630j:plain:w300

Tank Volumeに TankDSというDataSetを作成する.DataSetはルート直下のディレクトリみたいなもので,DataSetに所有者を設定したり共有を指定したりするらしい.

f:id:atsuhiro-me:20151104005632p:plain:w300

最後に CIFSで共有 の設定を有効にしたら,ネットワークドライブとして使えるようになる.  

転送速度

転送速度が遅いとストレスなので,作成したFreeNASのスペックを調べた.Macで,Blackmagic Disk Speed Test を使ってベンチマークした.

NASNE (Gigabit Ethernet)

我が家にある市販のしょぼいNASとして比較用にNASNEをベンチマークした.Read, Write 共に20MB/s出ない.このスペックだとファイルコピーでもっさり感じる.

f:id:atsuhiro-me:20151104005635p:plain:w300

FreeNAS (Gigabit Ethernet)

Read, Writeともに 100MB/sである.Gigabit Ethernetの規格上限値 1000Mbit/sec = 125MB/sなので,転送速度としては十分本領を発揮していると思われる.LANケーブルを介した転送とは思えない程ファイルコピーがスムーズなので,大満足である.

f:id:atsuhiro-me:20151104005642p:plain:w300

Macの内蔵HDD

Read, Writeともに 100MB/sで,FreeNASと大して変わらないことに気づいた.

f:id:atsuhiro-me:20151104005649p:plain:w300

転送によるリソースの消費

FreeNASのReportingで,ファイルコピーの様子をモニターした.

40GByteのファイルの書き込み.ネットワークインターフェイスは800MBit/secとほぼ規格上限値で,CPUは60%も使っている.ZFSはCPUをたくさん使うみたいだ.1つのHDDの書き込みは 30MB/sであった.

f:id:atsuhiro-me:20151104005656p:plain:w300

f:id:atsuhiro-me:20151104005657p:plain:w300

f:id:atsuhiro-me:20151104005658p:plain:w300

PlexMediaServerで動画をiPad Air 2で視聴した.CPUは80%程度,ネットワークインターフェイスの使用率はごく微量で,メモリの使用率は3Gを目一杯使っていた.しかしSwapの使用率は0%なので,システムが足りないのではなく,ただメモリーにキャッシュしているだけみたい.

f:id:atsuhiro-me:20151104005659p:plain:w300

f:id:atsuhiro-me:20151104005701p:plain:w300

f:id:atsuhiro-me:20151104005702p:plain:w300

ディスクの入れ替え

autoexpandを有効に

Shellから以下のようにTankのautoexpandをonにすることで,最小容量のHDDの容量が大きくなった時に自動でTankの容量が大きくなる.

[root@freenas ~]# zpool set autoexpand=on Tank                                  
[root@freenas ~]# zpool get autoexpand                                          
NAME          PROPERTY    VALUE   SOURCE                                        
Tank          autoexpand  on      local                                         
freenas-boot  autoexpand  off     default   

注意 : autoexpand=onのイコールの前後にスペースは不要.

ディスクの入れ替えを行う

Storage > Volume Statusにて,HDDの構成を確認する.ここではada4p2 (0.25Tbytes) を ada5 (1Tbytes)に変更してHDDの入れ替えができるかどうかと,autoexpandによって容量が増加するかをやってみる.

f:id:atsuhiro-me:20151104005703p:plain:w300

なお,このやり方は,HDDの冗長性を低下させることなく入れ替えができるので安心だが,新しいHDDを接続するための余分なSATAポートが1つ必要である.結局のところ,

新しいHDD接続→古いのに対してReplace→Resilver→Complete→古いの外す

とするのが正常なHDDの交換で,

HDDが壊れている(degraded)→新しいHDD接続→壊れているのに対してReplace→Resilver→Complete→古いの外す

とすると,この間に問題が発生すると最悪ZFSが崩壊するので,できたら回避したい作業というわけだ.

f:id:atsuhiro-me:20151104005705p:plain:w300

ada4p2を選択して,Replaceする.

f:id:atsuhiro-me:20151104005707p:plain:w300

新しいHDD (ada5)にReplaceする.

f:id:atsuhiro-me:20151104005710p:plain:w300

するとResilverが始まる.進捗状況が表示される.この間もファイルにアクセスできるが,HDDに余計な負担はかけないほうが良さそう.

f:id:atsuhiro-me:20151104005712p:plain:w300

f:id:atsuhiro-me:20151104005713p:plain:w300

f:id:atsuhiro-me:20151104005716p:plain:w300

253GBytesのデータがあったが,ResilverがCompleteするまでに10分程かかった.思ったより早い.ちなみにReportingによると新しいHDDはWriteが60MB/sで,他のHDDはReadが60MB/sだった.フルでアクセスしているようだったので,RAIDでよく聞くリビルド中に他のHDDが力尽きるという問題は十分に考えられるのだなと思った.

autoexpandの効果を確かめた.以前の総容量が 250Gbyte * 5 \~ 900Gbyteであったのが,1Tbyte * 5 = 4.3Tbyteに増えていた. (実際の容量は510Gbyteから2.4Tbyteになった)

f:id:atsuhiro-me:20151104005718p:plain:w300

f:id:atsuhiro-me:20151104005720p:plain:w300

HDDを大きい物に変えるだけで容量が増えるのはとても運用が楽である.素晴らしい.