2007.04.04 ZFSメンテナンスの日々 #4 そうそう。 前回作成した 04/01 版アーカイブですが, ついにマニュア ルがインストールされるようになりました。 微妙に Solaris ちっくな テイストが残っていますが, まぁ見なかったことにしておくということ で:-)。 さて今日は ZFS のセルフヒーリングについて。 ZFS のセルフヒーリングを支えている機能, それはチェックサム。とい うわけで, ZFS のチェックサムについて調べてみました。 ■チェックサムの選択肢としては on/off/fletcher2/fletcher4/sha256 の 5 種類があり, ディフォルトは on (=fletcher2 / 将来的には変わ るかもしれないとのこと) になっています。またチェックサム長は常に 256bit となっています。 fletcher2 fletcher4 うわーい。256 ビット文字通りチェックサム。ていうかただの 足し算かよ。 orz とりあえずエンディアンについて気がつかなかったことにして, どちらも 64bit 単位で 4 つ足し算を行う。 その 4 つを並べ て 256bit 長にすると。fletcher2 は 64bit 単位で 128bit ずつ計算。fletcher4 は 32bit 単位で 32bit づつ計算と。 まぁとにかくただの足し算と。 なんか fletcher4 の方がしっ かりしてるのかと思ったけど, まぁ粒度が細かいからしっかり してるかもしれないけど, 期待外れ〜というかなんというか:-)。 軽量でバランス取れてるじゃないですか(爆)。 sha256 言わずと知れた SHA256。特に言うこと無し。 あと, どのアルゴリズムにしても, ブロック長分計算と。まぁ当然です が。各処理の進み方, アライメント(というか何もしてない)を見ると 256bit (8バイト)の倍数であることは確かです:-)。 ちょっと読んだ限りでは, ブロック長は, 4096 バイト 〜 131072 バイ ト(128KB) のようです。このあたりのサイズ選択が, どのようになって るかまでは見ていません:-)。 ■さて, ZFS は常にチェックサムとの比較を行い, 問題があれば自己修 復する(mirror や raidz の時)わけですが, 該当箇所が読み込まれるか, 書き込まれるかしないといけないで, 消極的であると言わざるを得ませ ん(積極的に修復しないというか)。 というわけで積極的にチェックしましょう。ということで ZPOOL をなめなめ # zpool scrub zdevel ZPOOL をなめなめ止める # zpool scrub -s zdevel zpool コマンドには scrub というコマンドが用意されています。UFS で言うところの fsck に相当するものですが, もっとイヤらしいものと 言えるかもしれません:-)。メタデータだけではなく, データ領域全部 読みます。時間かかります。負荷もそれなり(?), たぶん。というわけ で停止方法が提供されてたりします。 また, scrub 状況を確認することができます。 # zpool status zdevel pool: zdevel state: ONLINE scrub: scrub in progress, 8.63% done, 0h14m to go : みなさんも zpool status -x と合わせて, ZPOOL の監視をしましょう。 Written by 重村法克