web-dev-qa-db-ja.com

電源障害/ランダム再起動後にmdadmRAID5の整合性を確認する方法

そのため、現在、ホームサーバーに接続されたmdadmRAID5アレイを構築しています。ハードウェアは、Mediasonic Probox4ベイエンクロージャーが取り付けられたOdroidN2SBCです。アレイは現在再構築中であり、何日も続いていますが、着実に動いています。従来の4.9.180カーネルでarmbianストレッチを使用しています。

昨夜、私はシステム(ドライブではなく)を使用していて、別のUSBドライブ上のファイルに対してチェックサムを実行していました。現在、N2のUSBドライバーには未解決のバグがあり、高いI/Oアクティビティによって悪化します。その後、N2は昨夜午後11時40分頃に死亡した。

N2はすぐに戻ってきて、朝まで気づきませんでした。ただし、mdadmアレイの再構築は75%で一時停止されました。再構築を再開し、順調に進んでいますが、新しいアレイに永続的な害を及ぼさなかったことを確認したいと思います。

パリティデータにエラーがないことを確認するために使用できるmdadmユーティリティはありますか?配列にファイルシステムがないので、この場合はfsckを使用できないと思います

1
Nick

(現在の再構築が完了したら)チェックを実行できます。

mdadm --wait /dev/mdX # wait for rebuild to finish
mdadm --action=check /dev/mdX
# or if mdadm is too old:
echo check > /sys/block/mdX/md/sync_action

次に、mismatch_cntを監視します。

watch cat /sys/block/mdX/md/mismatch_cnt

0のままである限り、パリティは問題ありません。

man mdSCRUBBING AND MISMATCHESも参照してください。

   A  count  of  mismatches is recorded in the sysfs file md/mismatch_cnt.
   This is set to zero when a scrub starts and is incremented  whenever  a
   sector  is  found  that is a mismatch.  md normally works in units much
   larger than a single sector and when it finds a mismatch, it  does  not
   determine exactly how many actual sectors were affected but simply adds
   the number of sectors in the IO unit that was used.  So a value of  128
   could  simply  mean  that  a  single  64KB  check found an error (128 x
   512bytes = 64KB).

このプロセスは、再構築自体と同じくらい時間がかかります...基本的に再構築と同じことをしているからです。進捗状況については、/proc/mdstatを参照してください。

特定の領域のみをテストすることも可能です(75%マーク付近のみを確認したい場合)が、mdadmにコマンドオプションがないため、より複雑です。 md/sync_minmd/sync_maxを設定して範囲を決定できます(デフォルトの範囲0-maxはデバイス全体をカバーします)。

パリティを修正する場合は、純粋に情報を提供するcheckの代わりに、パリティを修正するrepairを使用します。ただし、データが正しく、パリティが正しくないことを確認する必要があります。それ以外の場合、データが正しくない単一のディスクを特定できる場合(データかパリティかに関係なく)、ディスクを取り外して新しいディスクとして追加し、再構築する必要があります。

不一致を処理するための正しい行動方針を決定することは、残念ながら非常に複雑になる可能性があります...

1
frostschutz