btrfsスクラブはどのように機能し、何をしますか?


19

btrfsスクラブは正確に何をしますか?完全に不明なマニュアルページによると、それはいくつかのエラーチェックを行います。どのようなエラーチェックですか?信頼性はどのくらいですか?いくつかのエラーを回復できますか?どのように機能しますか?すべてのbtrfsディスクで動作しますか?


3
コンテキスト:BTRFSはチェックサムを保存するため、ファイル(またはメタデータ)が正常であるか、破損しているかを常に確認できます。ext4のような他のほとんどすべてのファイルシステムにはチェックサム機能がないため、不良ドライブ(これから死にかけ、既にデータを破損し始めている)によって破損したファイルの読み取りを止めることはありません。これはBTRFSの重要なデータ保護機能であり、これによりスクラブが可能になります。
基本

回答:


23

それが他に何かをするかどうかはわかりませんが、少なくともbtrfs scrubフルディスクのデータスクラブを行うことは知っています。基本的に、ディスク上のすべてのデータ*を読み取り、チェックサムを再計算し、再計算されたチェックサムと保存されているチェックサムを比較します。保存され、再計算されたチェックサムが一致しない場合、システムは破損があることを認識します。

破損が検出されると、動作はディスクのセットアップに依存します。たとえば、RAID 1(ミラーリング)がある場合、btrfs scrub破損していないバージョンを別のディスクからコピーすることで破損したデータを修正できます。一部のデータのすべてのコピーが破損している場合(たとえば、マルチディスクの損傷または最初に冗長なコピーがない場合)、btrfs scrub警告以外にできることはあまりありません。

これが重要な理由は、ハードドライブのビットの読み取りと書き込みの信頼性は約99.999999999999%に過ぎないことです。そのため、数テラバイトのデータI / Oごとにエラーが発生する可能性があります。通常のディスクアクセス中にエラーが検出される可能性がありますが(冗長コピーがまだ有効であると仮定して修正されます)、ルーチンのフルディスクスクラビングは、同じデータのすべてのコピーが破損するほど蓄積する前にエラーを見つけて修正できます。

*「ファイル」ではなく「データ」を使用してメタデータも含めています。Btrfsは、ファイルと対応するメタデータ(チェックサムを含む)をデータブロックに保存します。これらはすべて、チェックサムされ、チェックされbtrfs scrubます。

こちらもご覧ください:

  • Btrfs-> Wikipediaのチェックサムツリーとスクラブ:btrfsのデータスクラブに関する技術情報。
  • 誕生日の問題-> Wikipediaの確率表:「ハッシュスペース」を「データブロックの数」、「ハッシュ要素の数」を「破損したデータブロックの数」として扱うと、両方のコピーでデータブロックが存在する可能性が得られますRAID 1セットアップで破損。

数えていませんが、信頼性の数値が数桁ずれていると思います。通常、民生用HDDは10 ^ -14ビットのUBEレートに指定されています。つまり、10 ^ 14ビットの読み取りごとに1つの回復不能な読み取りエラーが発生します。問題は、これが完全なセクター向けであることです。セクター全体を取得するか、まったく何も取得しません(または、それがアイデアです。サイレントエラーは完全に別のお茶です)。そのため、エラーはセクターサイズによって増幅されます。これは、Advanced Formatドライブでは32,768ビットです。したがって、実際のエラー率は10 ^ -10〜10 ^ -11 readbit-errorsに近いです。
CVn

@MichaelKjörlingここではセクターが重要だとは思いません。...私のコンピューターの2つの内部1TBハードドライブの過去29回のbtrfsスクラブの記録があります。データの量は270〜300 GiBの間で変化しました(すべてのスクラブの合計で読み取られる合計1.35 * 10 ^ 14〜1.49 * 10 ^ 14ビット)。これらのスクラブ中に3つのエラーが見つかりました。非スクラブI / Oがビットの腐敗を引き起こさず、固定もしないと仮定すると、それは「99.999999999999%信頼性の高い」ドライブの予想エラーレートのわずか2〜2¼倍です。4096ビットセクターしかない場合でも、私のドライブには今までに数千のエラーがあったと思われると思います。
マークハファーカンプ

@MichaelKjörling製造元のスペックシート(SeagateとWD)を理解している限りでは、死ぬのはセクター全体ではなく、ビットエラーです。そして、答えのナインの数は楽観的です:100-1/10^14ナインは16個あり、ポストのナインは14個しかありません(10 ^ 12に対応)。
リュック

@Lucセクターの死亡がそれほど一般的でないのは良いことです。死にかけているセクターは、ドライブが(おそらく)実際に故障しており、交換が必要になる可能性があることを意味します。ビットエラーは、サイレントデータの破損を引き起こすだけで、バックアップから復元するのに十分なノイズを発生させることができます。数学ノート:実際の計算は1-10^nであり、人間は先行小数を好まないため、パーセントに変換されます。また、以前のコメントで、ドライブがRAID 1にあること(各270-300 GiBデータが同じである)について言及することを怠ったため、別の明らかな計算エラーが修正されました。
マークハファーカンプ

5

Mark Haferkampの優れた答えを拡張して、すべてのファイルの代わりにすべてのデータbtrfs scrub読み取ることは重要な特性であり、実際にそれが非常に役立つことです。btrfsにはRAIDサポートが組み込まれていることを忘れないでください。RAID1を使用するように設定した2つのドライブにまたがるbtrfsファイルシステムがあるとします。この場合、ファイルに書き込むと、その書き込みは両方のディスクに複製されます。(より複雑な例ではより複雑になりますが、この単純なケースでは、常にこれが起こります。)ただし、そのファイルから読み取る場合、読み取りは1つのディスクのみにヒットします(ファイルを2回読み取るのは無駄なので)最初のコピーが何らかの理由で使用できない場合を除きます)。

ここで、2番目のbtrfsドライブが劣化し、ファイルシステムのデータが破損し始めているとします。このディスクからブロックを読み取ると、btrfsはチェックサムが一致しないことに気付き、既知の正常なコピー(最初のドライブのコピー)からインバンドでブロックを復元します。read()何も起こらなかったかのように(または何でも)呼び出しているアプリケーションにデータを返します。

しかし、btrfsが2番目のディスクからの読み取りを決定しない場合はどうなりますか?2つのコピーがあるため、最初のディスクまたは 2番目のディスクのいずれかから読み取ることができます。最初のディスクから読み取る場合、何も問題はありません。何か問題があることに気付くのは、最初のディスクも劣化したときだけです。データを回復するのが遅すぎるため、実際にホースが詰まっています-2番目のディスクのコピーがしばらく破損しており、最初のコピー(2番目のディスクを復元するために使用したもの)も破損しています!

これがbtrfs scrub出番です。すべてのファイルではなく、すべてのデータを読み取ります。これにはメタデータが含まれますが、通常は読み取りパスにはないファイルのセカンダリコピーも含まれます。これらのセカンダリコピーを読み取ると、btrfsの帯域内エラー修正が開始され、冗長コピーからデータが復元されます。


2
RAID1では、読み取りは1つのディスクからのみ行われますか?少なくともmdadm RAIDではこれは当てはまらないはずです。読み取りは両方のディスクから並行して行われる必要がありますが、データは異なります。つまり、1つのディスクからの読み取りの2倍の速度である必要があります。読み取りパフォーマンスの向上は、RAID 1の主要な機能の1つです。
Petr

@Petrはい、あなたは正しいです。個々のブロックは1つのディスクからのみ読み取られます。
-strugee

@Petr:詳述すると、通常の使用では、MDADMもBTRFSも両方のディスクから同じデータの両方のコピーを読み取りません。彼らは1つのコピーのみを読みます。-MDADMは、読み込み速度を2倍にするために、複数のコピーに読み込みの負荷を分散して分散することができます。(コピーAはすべてディスク1に、コピーBはすべてディスク2に移動するためです。mdadmは正確に2つのディスクを使用するため)。-BTRFSにはさらに困難があります。(コピーAとBは、2 つ(複数のディスクのうち)いずれかの2つのディスクに現時点で最も多くの空きスペースがあったためです。つまり、2つのコピーは現在のすべてのディスクにランダムに分散します)
DrYak

およびセキュリティに関して:-問題がある場合、MDADMとBTRFSの両方がもう一方のコピーを試行します。-MDADMの場合、検出できる唯一の問題は「ディスクが応答しない」(上記に保存されたファイルの実際の考えがないため)-BTRFSの場合、サイレントデータの破損をさらに検出できます(データがチェックサムされるため、 BTRFSのRAIDレイヤーは、1つのコピーが信頼できるかどうか、または別のコピーを取得する必要があるかどうかを
認識してい

最後になりましたが、RAID5 / 6に関しては重要です。-MDADMで機能します。(ただし、サイレント破損は検出されません)-BTRFSでは、現在、サイレント破損は処理されていません(Erasure Coding計算を実行してストライプのどのメンバーが破損しているかを推測するよりも、(RAID1で)別のコピーを取得する方が簡単であるため)残りのデータ/パリティから再構築する必要があります)。つまり、今日(2017年8月)では、btrfsのRAID5 / 6を使用しないでください。
DrYak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.