ZFS優しすぎ涙がでた。

Pocket

前口上

試しにZFSを使ってみて(VMware Playerで気軽に試せるようになったとは、なんと便利な世の中か)本当に驚いた。

ディスク繋いでzpoolコマンド一発ですぐ使える。パーティションに頭を悩ませる必要もない。RAIDだって楽勝。ディレクトリごとに圧縮することもできるし、気が変わったら、いつでも止めることもできる。スナップショットも早い。

実は、何年か前にZFSについて調べたときはまだまだバギーな印象だったのと、ZFSを使えるようなパワフルマシンがなく保留にしてたんだけど、すごく損した気分。

いままで幾たび、fdiskやnewfs失敗してひどい目にあったことか。電子の海に消えたデータを思う。

 

そしてRAID。ソフトRAIDで言えばlvmも有名だが、俺にはもうコマンドが複雑すぎて覚えられない(lv…が論理ボリュームを、pv…が物理ボリュームを扱うんだって?)。

これはすごく危険。

だってソフトRAID含め、こういったディスクを扱うコマンドを使うのは、初期設定と、問題の発生したとき。

俺みたいなオッチョコチョイが、問題が発生して焦っているときに、コマンドが複雑だと二次災害を引き起こすんだって。

…正直に言うと実際に引き起こした。

 

ZFSならとにかくzpool、zfsさえ覚えておけばいいのだ。

 

ZFS

宅鯖ではZFSを使いたいからFreeBSDを選んだ。

そして、いろいろwebを渉猟するにi386でZFSは辛そうなのでamd64とし、下記の通りzpoolのバージョンもどーんと上がっているので, 9.0-RELEASEを入れた。メジャーバージョンの最初はちょっと不安ではあるけれど。

ZFSのバージョン

8.2+ – zpool v15

9.0+ – zpool v28

あとは、特に難しいこともなく、2.5Tのディスク1本買ってきて、つないで、領域作って、こんな感じ。

作業ログは後述。

 

ディスク1本なので、RAIDも組まず、圧縮もせず(データがjpg写真とか自炊本、自炊DVD、CDとか圧縮の効かないものばかりだから)。

あんなに煽っておいてアレだが、だってまだディスク高いし・・。

 

チューニング

ただまあ、ここを見てチューニングだけはしておいた。

http://wiki.freebsd.org/ZFSTuningGuide

 

/boot/loader.confにおけるチューニング

1行目

ZFSのprefetchを無効にすると全体的にスピードが向上する。

ただし読み書きが頻繁に発生する状態だとシステムが遅くなる傾向あり。

なお、4GB以上のメモリが実装されているとデフォルトで0になるとのこと。

2行目

txgが何の意味か分からないけど(task queue?)、こうしておくとスループットが上がる上に、システムが極端に遅くなる問題が改善される。

(In my case 50-100% CPU is used by ZFS with *no* disk activity during the pauses then a burst of rapid disk activity and then another pause. なんて言ってる)

なお、これはZFS v28からはデフォルト。

 

/etc/sysctl.confにおける設定

1行目でvnodes数の上限をデフォルトの約200000(a little over 200,000)から増やす。

2行目でTXG write limitの値を減らす。デフォルト値は知らん。

4GBメモリなら256MB、と書いてあるので、2GBを積んでる俺は128MBにした。

なお、ZFS v28より前ではvfs.zfs.txg.write_limit_overrideとのこと。

そのほかの設定:periodic script

/etc/periodic/daily/404.status-zfsにスクリプトがある。

有効にすると、毎日zpoolの状態をしらべて、daily output, security outputでメールしてくれる。

そうそう、root宛のメールは転送設定しておくと便利。

 

/etc/periodic.confに以下を追記しておけばOK

 

以下は作業ログ

作業ログ

ディスクをつないで起動、dmesgで確認

ada1が新しく繋いだディスク。

ここにZFS用のpoolを作成する。

 

無事完成。

なんと勝手にマウントまでしてくれる。これですぐ使える。

2.5Tなのに数秒程度で完了。

ビクビクしながらfdiskしたりnewfsしたりする必要がない。電卓も要らない(そういう時代もあったのです)。

衝撃的です。

コマンドが簡単なうえに、早いというのは、重ねて言うけど障害復旧に極めて有利な点。

大きなディスクをnewfsするときの、遅々として進まないカウンタを見てジリジリしたことのある人なら共感してくれるはず。

 

なお、この状態では/etc/fstabに何も書き込まれていないので、再起動すればマウントは外れる。

 

ではこのpoolからディレクトリを切り出す。

itunes用と、通常の共有ディレクトリ用の二つを作る。

 

 

これらを/export配下に移動させる。

これが既存の考えにはない動作。頭の中でファイルシステムに対する考え方がグニョっとなるのを俺は感じたよ。

 

そしたら/etc/fstabに書き込んでおしまい。

昔はデバイス名を書き込んでいた場所にZFSのディスクプールを書くわけですな。

afpでファイルをコピーしているのだが、あまり負荷はかかっていない模様。

ZFSはリソース食いと聞いてたのでコワゴワコピーしたんだけど、まあ100Mbpsのネットワーク越しですしな。

そのほか

重大な作業をするときは必ず-nオプションを付けること。

ドライランと呼ばれるもので、実際の作業はせずに結果をシミュレートできる。

 

ストレージプールを作業するときには明示的にexportすること。

exportすれば、未書き込みのデータがすべて処理され、システムから削除される。

そこで引数なしでimportを実行すると、import可能な、言い換えるとexport済みのプールが表示される。

No tags for this post.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください