web-dev-qa-db-ja.com

LinuxソフトウェアRAID1にディスクの破損を検出させる方法は?

これは悪夢の1日です。LinuxSW-RAID1で実行されている仮想化サーバーは、一見ランダムなコードチャンクでランダムなセグメンテーション違反を示すVM)を実行します。

デバッグ中に、ファイルが実行ごとに異なるmd5sumを与えることがわかりました。さらに深く掘り下げると、これがわかります。RAID1ミラーを構成するrawディスクパーティションには、2ビットの違いと約2ビットの違いが含まれています。 1つのディスクでは9つのセクターが完全に空で、もう1つのディスクではデータが入力されています。

明らかに、Linuxは、ミラーセットの不確定に選択されたディスクからセクターを返します。そのため、同じセクターが正常に返されることもあれば、破損したものが返されることもあります。

docs 言う:

RAIDは、メディア上のデータ破損を防ぐことはできず、またそうすることも想定されていません。したがって、ディスク上のデータを意図的に破損させて(たとえば、ddを使用して)、RAIDシステムがそれをどのように処理するかを確認することも意味がありません。 (RAIDスーパーブロックを破損しない限り)RAIDレイヤーが破損を検出することはほとんどありませんが、RAIDデバイス上のファイルシステムは破損します。

ありがとう。それは私が眠るのに役立ちます。 :-/

セクターチェックサムなどを使用して、Linuxに少なくともこの破損を検出させる方法はありますか?これはRAID5セットアップで検出されますか?これは、ZFSまたはbtrfsを使用したい瞬間ですか(uber-admin機能なしで使用できるようになったら)?

編集: 私は一人ではありません

6
Paul

(例)md0のチェックを強制することができます

echo "check" > /sys/block/md0/md/sync_action

あなたはでテストの状態をチェックすることができます

cat /sys/block/md0/md/sync_action

checkを返す間、チェックは実行されていますが、idleを返すと、次のことができます。

cat /sys/block/$dev/md/mismatch_cnt

不一致カウントがゼロかどうかを確認します。多くのディストリビューションは、このチェックを自動化して、たとえば毎週実行します。これは、ほとんどの産業用ハードウェアRAIDが、アレイがアイドル状態のときにバックグラウンドで継続的に実行するのと同じです(「RAIDスクラビング」と呼ばれることがよくあります)。 Fedoraの自動チェックファイルのコメントによると、カーネルへのRAID1書き込みはバッファリングされていないため、アレイがマウントされている場合は、正常なアレイであっても不一致カウントがゼロ以外になる可能性があることに注意してください。

したがって、VMがダウンしているときにこのチェックを実行してアレイを静止することは、可能であれば、おそらく良い考えです。

彼らがそれを言うとき、私はドキュメントに同意することを付け加えます

RAIDは、メディア上のデータ破損を防ぐことはできず、またそうすることも想定されていません。

RAIDは、デバイスの完全な障害を防ぐことになっています。ストレージデバイスの要素のランダムな増分障害から保護することは、エラーチェックとブロック再マッピングの仕事です。これはおそらくコントローラー自体で行うのが最適です。特に不安定なデバイスの上に実装されている場合は、ドキュメントがRAIDの制限について人々に警告していることを嬉しく思います。ドライブのsmartctlヘルスチェックを頻繁に行うと、ミラーの同期が外れる原因となる種類のエラーが表示され始めているドライブを常に把握するのに役立ちます。

5
MadHatter

これをチェックしましたか? http://tldp.org/HOWTO/Software-RAID-HOWTO-6.html

0