もうちょっといじる。
LANのジャンボフレームを使ってみる
XigmaNASの ネットワーク→LAN マネジメントに、MTUの設定欄がある。
MTUはあくまで最大のパケットサイズだから、ここ空欄にしておけばNICが対応する最大値までは受け付けるそう。
で、主たるクライアントたるWindows PCの方を、デバイスマネージャでNICのジャンボパケットを有効にしてやる。
特に根拠はないけれど、1500を6倍して9000にしてみた。
昔録画したアニメ(天保異聞妖奇士の25話、合計3GBほど)をNASのSSDに転送してみると、80.7MB/s出た。
前は70MB/sを下回る程度だったから、けっこう転送速度が上がってる。
ZFSの使い方を間違ってた
ZFSがそもそもよくわかってなかったけれど、検索して見つかったこちらの記事がわかりやすかった。
前回は、物理ディスクをひとつの仮想ディスクにし、各仮想ディスクをひとつのプールにする、としてみたけど、どうもそれだと多分ZFSで使ってるメリットが薄そう。
(どうも本家Solarisと、Linuxに移植されたZFSと、多分FreeBSDに移植されたものであろうXigmaNASのZFSとでちょっとずつ違うみたいだけど、当然ながら以下はXigmaNASで設定するときのZFS)
まず各物理ディスクをそれぞれ仮想ディスクにする、のはいいとして、その次には仮想ディスクを複数まとめてひとつのプールにする。
シングルドライブの仮想ディスクで容量がばらばらでも、ミラーリングやストライピングのセットになってる仮想ディスクでも、RAIDになってるのでも、いっしょくたにひとつのプールにできる。だからプールって名前なわけね。
で、プールにデータセットという、パーティションみたいなものをつける
データセットは、ひとつのプールに複数設定できる。
容量も事前に定めるのではなく、プールから必要な分だけ容量をとってくる。必要とあれば最低確保容量や上限容量を決めることもできる。
データセットには圧縮設定をしたり、重複削除機能を使ったりできる。
重複削除は、重複するデータが記録されたセクタを共有化して記録容量を削減する、みたいな機能らしくて面白そうではあるんだけれど、ほんとに凄まじいほどメモリーを食うらしい。今回のサーバーは8GBなので、オンにすべきではなさそう。
データセットまでつくったら、/mnt/[プール]/[データセット]というディレクトリにマウントされているから、それをSMBで共有すると。
実際に、同じプールにデータセットをふたつ作って共有してみた。
LHR-4BNHEU3は圧縮あり、PhotoBackupは圧縮なし。
PhotoBackupの方に写真データをコピーしていっているが、こっちで使った分だけLHR-4GBHEU3の総容量が減っているのがわかる。
JBOD
当然ながら、物理ディスクひとつで仮想ディスクとしたのをプールにまとめてしまうと、これは単なるJBODになってしまう。
余り物寄せ集めのジャンクNASだからまあ、元々信頼性など期待してないからいいんだけど、実用としてこんなことするもんじゃないな。シングルドライブのプールをそれぞれに作るべき。
データは勝手にプール内のドライブに割り振って保存されていて、どれかのドライブから先に使うとかではないらしかった。
割り振り処理があるせいか、転送速度はけっこう落ちてしまうようだった。XigmaNASのSSDに80MB/sくらいで転送するところ、ZFSのJBODプールへは65MB/sくらい。ちょうどジャンボフレーム有効で高速化した分が相殺された感じ。
別にCPU負荷がそんなに高くはなく、Core i3-380Mが20%前後使われるにとどまる。
メモリーは使用量が増えたみたい。UFSで使ってたら2GBくらいしか食ってなかったが、ZFSを使ってたら圧縮や重複削除なしでも5GB近く食ってる。(ディスクキャッシュを確保してるだけかもしれないが)
ちゃんとやるなら
JBODプールのような遊びにしかならんものではなく、ちゃんと作るとすれば。
まず仮想ディスクの段階で、物理ディスクを2つ使ってミラーリング(RAID1相当)とか、3つ使ってRAID-Z1(RAID5相当)の仮想ディスクを作っておく。
で、プールの容量が足りなくなってきたら、さらにあとから足した物理ディスクで冗長性の有る仮想ディスクを作って、プールに追加する。
クライアント側からは特に変更なく、前から使ってるストレージの容量が増える。
というようなことはできそうで、長期的にストレージサーバーを運用するならたしかにZFSは便利そうだ。
ただ、プールからディスクを減らすということができなさそうに見えるので、古い小容量なディスクを引退させることができなくなるかな。
外したいディスクのデータをプール内の他のディスクに移動してから安全にプールから除外する、みたいな機能があるんだろうか?
それから、ZFSは、データベースみたいに処理のログ(インテントログという)があって、それに基づいて確実に処理していくような仕組みになってるらしいんだけど、そのログを別ドライブに置くようにすると処理が軽くなるそう。そりゃまあデータ自体とログとを同じドライブで扱ってればパフォーマンスは落ちよう。
XigmaNASでは、ディスク→ZFS→プール→ツールに「プールへのログデバイス追加」というのがあるので、それで何かSSDでも追加してやるといいみたい。
これは載せてるメモリーの半分のサイズでいい、とのこと。
同様にキャッシュデバイスも追加できるそうで、SSDとか登録するとそれがキャッシュになる。余った256GBとかのSSDを使えば大容量キャッシュになるな。まっさきに壊れそうな気がするけれど。
キャッシュとログを同じデバイスにすることもできるのかどうか。ログは小さくていいから、そのためにひとつ使うの厳しい。
うーむ、結構ちゃんとしたのを作れそうな気がしてきちゃったけど、どうだろな。
前使ってたCore i7-6700のデスクトップPC(メモリ24GBある)にXigmaNASを入れちゃって、値ごろかつSMRでない6TBのHDDを3台使ってRAID-Z1の12TB、余ってるSSDをキャッシュにしたプールを作ってオンラインで使う。
ありかもしれないな。廃品利用してるThinkpad L412と古いHDDがまた廃品に戻るけど。
LANも2.5Gbpsにしちゃう?
家庭内LANがボトルネックになるのが見えてるから、2.5Gbpsの有線LAN環境に刷新しちゃうか。
まあ別に外にいく回線は1Gbpsより速いのがいつ奈良の我が家までやってくるか知れたもんじゃないので、さしあたりPCとサーバーと間に入るハブだけ2.5Gbpsになりゃいい。
PCI-eのNICは4000円、ハブが1万円弱くらい。案外こなれてこないが、別に買えんと文句いうほどでもないか。
ただ、現環境の改善がちょっと厄介だ。
自宅の端に光回線がきてるから端にルーターが置かれてて、逆端にWiFiが届かない。
なのでルーターから10mのケーブルで有線を引っ張っていって、WiFiルーターをAPモードで置いている。ファイルサーバはAPの有線LANポートに繋がっている、となってるのが現状。
2.5Gbpsのハブを光回線に繋がってるルーターの下に繋いで、メインPCはそこから有線でつなぐ。ここまではよい。
逆端の部屋に有線を引っ張っていった先にも、もうひとつ2.5Gbpsのハブがいる。
あるいはまあ、逆端の部屋まで引っ張っていくLANケーブルを2本にする、という間抜けなことをするか。