解決策 1:
Linux ソフトウェア RAID は、ビット破損からユーザーを保護することはできず、サイレント データ破損はよく知られている問題です。実際、カーネルが 1 つのディスクからデータを読み取ることができたとしても、それが不良であることは決してわかりません。 RAID は、データの読み取り中に I/O エラーが発生した場合にのみ作動します。
データの整合性が心配な場合は、Btrfs や ZFS などのファイル システムを使用して、チェックサムを保存および検証することでデータの整合性を確保することを検討してください。これらのファイル システムは RAID 機能も処理するため、そのようにすればカーネル ソフトウェア RAID は必要ありません。
解決策 2:
ドライブ全体のパリティを検証すると、RAID5 および RAID6 はビット破損を検出し、通常は修正できます。これは「スクラビング」または「パリティ チェック」と呼ばれ、ほとんどの実稼働 RAID システムで通常 24 ~ 48 時間かかります。その間、パフォーマンスが大幅に低下する可能性があります。 (一部のシステムでは、オペレーターは、読み取り/書き込みアクセスまたはそれ以下のスクラブを優先することができます。) RAID6 は、2 つのドライブ障害が発生した場合に修正できるため、それを修正する可能性が高くなりますが、RAID5 は 1 つのドライブ障害しか処理できず、アクティビティが増加するため、スクラブ中はドライブ障害が発生する可能性が高くなります。
解決策 3:
これをコメントとして追加したかったのですが、十分な評判がありません。明確にしたかったのですが、RAID5 はビット破損を検出できますが、読み取りエラーがなければどのドライブが破損しているかはわかりません。その結果、スクラブは読み取りエラーなしではこれを修正できませんでした。ほとんどの場合、ログに記録して一致するようにパリティ ビットを更新するだけです。 RAID6 のアルゴリズムは位置に依存するため、どのドライブにエラーが含まれているかを検出し、ビット破損を修正できます。
解決策 4:
上記のすべての回答は、RAID 6 の機能に関して正しくありません。RAID 6 アルゴリズムは、RAID 5 と同じようにバイト単位で動作し、いずれかのドライブの 1 バイトが破損した場合、ドライブによってエラーが示されなくても、それは可能です。検出され、修正されます。そうするためのアルゴリズムは、
で完全に説明されています。https://mirrors.edge.kernel.org/pub/linux/kernel/people/hpa/raid6.pdf
このチェックを実行するには、パリティ P および Q ドライブもデータ ドライブと一緒に読み取る必要があります。計算されたパリティ P' と Q' がドライブ エラーなしで異なる場合、分析によりどのドライブが正しくないかを特定し、データを修正できます。
さらに、ドライブ ID が存在しないドライブ (ドライブが 15 台しかない場合のドライブ 137 など) に対するものである場合、複数のドライブがそのバイトに対して破損したデータを提供しており、修正不能なエラー エラーを示しています。セット内のドライブ数が 256 よりはるかに少ない場合、これはバイトごとに高い確率で検出されます。また、ブロック内に多くのバイトがあるため、ブロックごとに非常に高い確率で検出されます。ドライブ ID が RAID ブロック内のすべてのバイトで一貫していない場合も、複数のドライブが破損したデータを提供しており、通常は条件を拒否する可能性がありますが、すべてのドライブ ID が有効である限り、ブロックは必ずしも必要ではありません。
この修正を実行するには、通常の検証時間よりも時間がかかりますが、シンドローム (P と Q) の計算でエラーが表示された場合にのみ実行する必要があります。
とはいえ、mdadm コードを調べて、1 バイトの破損が処理されるかどうかを判断していません。 mdadm が毎月のスキャンで RAID6 シンドローム エラーを報告していることは承知していますが、エラー メッセージからはそれらが修正されているかどうかが明確ではありません。ドライブ アレイを停止したり、メッセージで特定のドライブを特定したりしません。