dm-integrity
いわゆるLinuxのDM ( Device Mapper ) シリーズ。ブロックストレージの前段に仮想的なブロックストレージを作成し、ブロックデバイスに書き込むセクタごとに追加情報を付加できる。
もっとも一般的な使い方は、セクタごとに誤り訂正 ( もしくは検出のみ ) 符号を付加して、bit rotへの対策をするというもの。
他には、ジャーナルログを付加することもできる。
その場合、ジャーナルログ非対応なファイルシステムを使っている場合でも、ジャーナル書き込みが可能になる。
ちなみにジャーナルについて説明しておくと、ディスク書き込み時に実際のデータだけではなく先に操作内容だけ書き込むことで、データ書き込み中の電源喪失によるデータロスを減らす ( 書き込み中のデータはどのみちなくなるが、他のファイルへの悪影響を抑えたり、CoWの場合以前のデータを採用したり、ができる)。
dm-cryptと共に使うことが前提になっていて、cryptsetup luksFormat時に--integrityオプションをつければ整合性アルゴリズム ( 誤り訂正ならcrc32cかcrc32 、誤り検出だけならsha1かsha256、hmac-sha256)が使える。HMAC-sha256を使う場合、自分で鍵データを設定できる。そのため、ディスクの人為的な改ざんにを検出・防止できる。
dm-cryptを使わずにdm-integrityを使いたい場合は、integritysetupコマンドが存在して、ほぼ同じオプションと引数の順番で使える。
dm-integrityの誤りチェックは自動で行われず、dm-raid等と同じように手動で実行しなければならない。具体的には、/sys/block/**/sync_actionにcheckを書き込めば実行される。自動で誤りは訂正される ( もちろん誤り訂正アルゴリズムを使っている場合のみだろうけど ) 。
ディストリビューションによっては、dm-raid用にcronルールが用意されているらしい。