mdadmを使用したビット破損の検出と修正

mdadmを使用したビット破損の検出と修正

自宅のLinux NASのすべてのHDDを再構成しようとしており、データ保護とアレイの再構成のための柔軟性のためにmdadm raidを使用したいと思います。しかし、mdadmを使用する前にどのように処理するかを知りたいです。ビット腐敗。特に、HDDから送信される回復不可能な読取りエラーメッセージを引き起こさないビット崩壊のタイプである。

NASとさまざまな見積もりで8台のディスクに少なくとも21TBのHDDを使用することを考えると開放性~の失敗するHDDでは、単一ディスクの故障による再構築中に、残りのディスクにある種のビット損傷が発生する可能性が最も高い。ドライブの1つで回復不能な読み取りエラーが発生し、そのドライブが実際にエラーとして報告している場合は、raid6は問題ありません(正しいですか?)。しかし、ディスクから読み取られたデータが不十分でディスクがそれをそのまま報告しない場合、raid6を使用してもそれを自動的に修正する方法がわかりません。これは私たちが関心を持つべき部分ですか?記事を見ると2010年で、RAID5はまだ機能しています。自宅と職場での成功に対する私自身の経験だけでなく、流行語やマーケティングで私たちが信じるように、状況が破滅的で暗い必要はありませんが、ハードドライブが故障したという理由でバックアップから復元することは嫌いです。

使用パターンが最大数回の書き込みと時々読み取りであることを考慮すると、次のことを行う必要があります。データの整理。私は見た アーチLinuxウィキ mdadm コマンドデータの整理次の配列

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

次に進行状況を監視します。

cat /proc/mdstat

これは、すべてのディスクのすべてのセクタを読み取り、データがパリティと一致するかどうかを確認するようです。いくつかの重要なケースでは、「確認」操作は自動修正が不可能であり、巻き戻しが可能であり、それを直接修正することは、ユーザーの役割であることがドキュメントで非常に強調されていることがわかりました。

ビット損傷から保護を最大化するには、どのmdadm RAIDレベルを選択する必要がありますか、どのメンテナンスやその他の保護手順を実行する必要がありますか?これが私をどんなものからも守ってくれませんか?

編集:ZFSまたは他の技術QAでRAIDを起動したくありません。 mdadm raidについて具体的に知りたいです。これが私が代わりにUnix&Linuxについて質問した理由です。

編集:答えは次のとおりですmdadmは、データスクラビング中にディスクシステムによって報告されたUREのみを変更でき、スクラビング中に自動ビット破損を検出できますが、変更できないか、または修正できませんか?

答え1

コメントを提示する担当者は十分ではありませんが、Linuxのmdadmシステムはエラーを修正しないことを指摘したかったのです。スクラビング中にエラーを「修正」するように指示した場合(RAID6など)、不一致がある場合はデータが部分的に正しいと仮定し、パリティを再計算してエラーを「修正」します。

答え2

正直言って、あなたはRAIDZ2 ZFSを拒否したという事実にかなり驚きました。ほぼ正確に必要なようです。とは別にLinux MDではないからです。私はZFSを公衆に知らせることに専念していませんが、簡単な事実はあなたの問題がZFSの設計問題の1つであるということです。最初から始めましょう解決する。冗長性を減らすため、または冗長性なしにエラー検出と修正機能を提供するためにRAID(「一般」RAID)に頼ることは危険です。 ZFSが実行されていない場合でも正しいデータエラーを修正してください。少なくとも発覚エラーを確認し、問題があることを知らせ、ユーザーが修正措置を講じることができるようにします。

あなたはしません持つ推奨事項ですが、ZFSを使用して定期的にフルスクラブを実行してください。 ZFSは、ディスクから読み取られたデータがデータを読み取ったときに書き込まれたデータと一致することを確認し、一致しない場合(a)冗長性を使用して元のデータを再構成するか(b)I / Oエラーをアプリに報告します。 。また、クリーンアップは優先順位の低いオンライン操作であり、ほとんどのファイルシステムで優先順位が高くオフラインである可能性があるファイルシステムチェックとはかなり異なります。スクラブプログラムを実行していて、スクラブプログラム以外のプログラムがI / Oを実行しようとすると、スクラブプログラムはこの間に後退を占めます。 ZFSスクラビングはRAIDスクラビングに代わるものです。そしてファイルシステムメタデータそしてデータ整合性チェックは、ビット破損を検出するためにRAIDアレイをクリーニングするよりもはるかに徹底しています(これは、データが意味があるかどうかを知らせるのではなく、RAIDコントローラによってデータが正しく書き込まれたことだけを認識します)。

ZFS冗長性(RAIDZ、ミラーリングなど)の利点は、スクラビング中に未使用のディスク位置の一貫性を確認する必要がないことです。ツールが割り当てブロックチェーンを通過すると、スクラブ中に実際のデータのみが確認されます。これは非冗長プールと同じです。 「一般」RAIDでは、RAIDコントローラ(ハードウェアまたはソフトウェア)が実際にどのデータが関連しているかを知ることができないため、すべてのデータ(ディスクで使用されていない場所を含む)を確認する必要があります。

RAIDZ2 vdev を使用すると、2 台のドライブが冗長であるため、異なるドライブ障害によって実際のデータ損失が発生する前に、2 台の構成ドライブに障害が発生する可能性があります。これは基本的にRAID6と同じです。

ZFSでは、すべてのデータ(ユーザーデータとメタデータ)がチェックサム処理され(推奨されていない限り)、これらのチェックサムはデータが何らかの理由で変更されていないことを確認するために使用されます。同様に、チェックサムが予想値と一致しない場合、データは透過的に再構成されるか、I / Oエラーが報告されます。 I / Oエラーが報告された場合、またはクリーンアップ操作で破損したファイルが識別されると、ファイル内のデータが破損している可能性があり、その特定のファイルをバックアップから復元できることがわかります。アレイ全体の回復は必要ありません。

通常のRAIDとデュアルパリティも、あるドライブが故障し、他のドライブがディスクからデータを誤って読み取るなどの状況からユーザーを保護しません。あるドライブでエラーが発生し、別のドライブでシングルビット反転が発生したとします。突然検出されなかった損傷が発生し、満足できない場合は、少なくともそれを検出する方法が必要です。このリスクを軽減する方法は、ディスク上のすべてのブロックのチェックサムをチェックし、チェックサムがデータとともに破損していないことを確認することです(誤書き込み、孤立書き込み、ディスクの誤った場所への書き込みなどを防ぐ)。エラー)これは、チェックサムが有効な状態でZFSが実行する操作とまったく同じです。

唯一の欠点は、デバイスを追加してRAIDZ vdevを簡単に拡張できないことです。通常、vdevのデバイスとしてスパースファイルを含むいくつかの回避策があります。しばしば「これが私のデータなら、私はこれをしないでしょう」と言います。したがって、RAIDZパス(RAIDZ、RAIDZ2、またはRAIDZ3のいずれを選択しても)を選択する場合は、各vdevに必要なドライブ数を事前に決定する必要があります。 vdevのドライブ数は固定されていますが、できる徐々に(vdevの冗長しきい値内に留まる)、ドライブを大容量のドライブに交換し、完全な再同期を可能にしてvdevを増やします。

答え3

この答えは、私が見つけたさまざまな証拠に基づいて推論された結果です。私はカーネル開発者ではないので、Linuxカーネルの実装がどのように機能するのかわからず、意味のないエラーメッセージがたくさん出ているようです。私はLinuxカーネルが賢明な選択をしたと思います。私が間違えない限り、私の答えは適用されるべきです。

多くのドライブはエラー訂正コード(ECC)を使用して読み取りエラーを検出します。データが破損した場合、カーネルはECC対応ドライバからそのブロックのURE(回復不能な読み取りエラー)を受信する必要があります。このような場合(以下の例外を除く)、良好なデータの上に破損したまたは空のデータをコピーすることは、精神的な行為に対応します。この場合、カーネルはどのデータが良いデータであり、どのデータが悪いデータであるかを知る必要があります。 ~によると2010年ですが、RAID5はまだ機能しています...記事:

この代替案を検討してください。私はそれを使用しているアレイベンダーが少なくともいくつかあることを知っています。 RAIDボリュームのドライブがUREを報告すると、アレイコントローラは数を増やし、I / Oを満たすためにパリティを持つブロックを再構築します。その後、UREを報告するディスクに書き換え(検証を含む)を実行し、セクタが破損した場合、マイクロコードはそのセクタを再マッピングし、すべてが正常になります。

しかし、今例外があります。ドライブがECCをサポートしていない、ドライブでデータ破損が発生した場合、またはファームウェアが誤動作している場合、UREは報告されず、破損したデータがカーネルに供給されます。データの不一致の場合:2ディスクRAID1またはRAID5を使用している場合、パフォーマンスが低下していない場合でもパリティブロックが1つしかなくUREがないため、カーネルはどのデータが正しいかを知る方法がないようです。報告されました。 3ディスクRAID1またはRAID6で破損した単一の非URE表示ブロックは、冗長パリティ(他の関連ブロックとの組み合わせ)と一致しないため、適切な自動回復が可能である必要があります。

ストーリーのレッスン:ECCでドライブを使用してください。残念ながら、ECCをサポートするすべてのドライブがこの機能を宣伝するわけではありません。一方、注意してください。 2ディスクRAID1(または2コピーRAID10)で安いSSDを使用している人を知っています。ドライブの1つは、特定のセクタを読み取るたびにランダムに破損したデータを返します。破損したデータは自動的にコピーされ、正しいデータになります。 SSDがECCを使用して正しく機能している場合、カーネルは適切な修正措置を講じる必要があります。

答え4

必要な保護を得るために、2つの場所でRAID 6 +通常のオフサイトバックアップを使用します。

それにもかかわらず、私は個人的にデータの重要性と変化の速度に応じて、毎晩、毎週、毎月毎週のクリーンアップとバックアップを行います。

関連情報