BTRFSは停電時のデータの一貫性を保証しますか?


11

ZFSは、排他的に述べてZFSは無傷であると主張されています ZFSは、電源障害に対して脆弱である可能性があることを受け入れます。

BTRFSについてのそのようなステートメントは見つかりませんでした。停電の間に耐久性がありますか(または設計されている/計画されています)?


もう一度お読みください。「ハードウェアの故障または停電が原因でプールが損傷した場合は、ZFSストレージプール全体の損傷の修復を参照してください。」(..)コマンドを使用してプールを回復しようとするzpool clear -F
Michael D.

それで、「ZFSはデータの一貫性を保証せず、回復のみを試みる」と言いますか?
ceremcem 2017

はい。対処するキャッシュはいくつかあります。ハードドライブの組み込みキャッシュ、OSキャッシュ/バッファです。ある時点で存在しているsyncか、flushディスクにキャッシュを書き込む、またはいないデータが失われること、停電時。ハードディスクが正常で、停電がない場合(またはUPSが接続されており、停電時にコンピューターを適切にシャットダウンした場合)、ZFSは完全に機能する可能性があります。FAT32については言えません。
マイケルD.

2
データ損失は、電力損失が発生した場合の自然な結果なので問題ではありませんが、私の場合、データの一貫性が問題です。ファイルシステムは、このような極端な状況ではデータを失う可能性がありますが、ディスク内に一貫性のないデータを引き起こすべきではありません。継続的なスナップショット機能が必要なので、BTRFSを使い続けます。私の場合でもNILFS2が最も近いオプションです。
ceremcem 2017

1
#btrfs IRCで質問しましたshould be ok if your hw isn't "buggy"が、「バギーでない」とはどこを意味するのでしょうかyour hw has correct flush/barrier semantics。私はこの質問へのリンクをIRCに投稿しました。うまくいけば誰かが詳しく説明するのに時間がかかるでしょう。しかし、今のところこれです。
Hi-Angel

回答:


5

#btrfs IRCで質問しましたshould be ok if your hw isn't "buggy"が、「バギーでない」とはどこを意味するのでしょうかyour hw has correct flush/barrier semantics

TL; DR:これは、btrfsがZFSと同様の方法で停電によるデータ破損から保護されることを意味します。

理由は次のとおりです。ZFSとbtrfsの背後にある一般的な考え方は似ています。どちらもデータ構造としてマークルツリーを使用します。書き込みでは、ディスク上の複数のブロックを更新する必要がある場合があります。ファイルシステムはこれを処理し、新しいデータを空のブロックに書き込み(既存のファイルが変更されている場合でも、古い状態を反映するブロックを変更する必要はありません)、新しく更新されたツリーを構築します。すべての重い作業が完了し、データ+更新されたツリーがディスクに書き込まれると、ヘッドポインタが新しいツリーに更新され、変更が表示されます。

以下は、ファイルへの書き込み時に想定される動作です。

  1. ディスク上の空きブロックにデータを書き込みます。
  2. マークルツリー*のコピーを作成し、(1)で書かれた変更に従って更新します。
  3. ハードウェアにデータをディスクにフラッシュするように依頼します-ハードウェアは保留中のすべてのデータを書き込みます。
  4. ヘッドポインタを新しいマークルツリーに更新します。
  5. 不要になった古いブロックを解放します。

(4)の後で電源が失われた場合、トランザクションは完了します。手順(1)から(3)の間に電源が失われた場合、ファイルシステムは古い状態になります(手順(1)で書き込まれたデータは失われますが、ファイルシステムは一貫しています)。ファイルシステムエラーをチェックする必要がないことに注意してください。これは、ファイルシステムがすぐに使用できることを意味します。これは大きな利点です(大きなファイルシステムのチェックには非常に時間がかかることがあります)。

「バギー」ハードウェアで問題が発生する例を次に示します。

  1. ディスク上の空きブロックにデータを書き込みます。
  2. マークルツリー*のコピーを作成し、(1)で書かれた変更に従って更新します。
  3. ハードウェアにデータをディスクにフラッシュするように依頼します-ハードウェアは完了を確認しますが、完全にはフラッシュしません(たとえば、データがディスクのライトバックキャッシュに残っている可能性があります)。
  4. ヘッドポインタを新しいマークルツリーに更新します。このデータは、他の保留中のデータの前にディスクに書き込まれます(たとえば、ディスクのヘッドがたまたま正しい場所にあるため)。
  5. 手順(1)および(2)で書き込まれたデータは、ディスクに書き込まれます。
  6. 不要になった古いブロックを解放します。

(4)と(5)の間、または手順(5)の実行中に電源が失われた場合、ファイルシステムは不整合になります。その結果、マークルツリーやデータが部分的にしか書き込まれず、ファイルシステムの不整合が発生する可能性があります。

実際には、RAIDコントローラーを使用する場合は特に注意が必要です。通常は、ディスク上のライトバックキャッシュを無効にし、代わりに独自のライトバックキャッシュを使用します。ここで問題が発生する一般的な方法は2つあります。

*ここでは簡略化しています。ツリー全体をコピーする必要は実際にはありません。追加する必要があるのは、変更された部分だけです残りの部分は、古いツリーと新しいツリーの間で共有できます


この素敵な説明をありがとうございます。ただし、IRC会話を含むすべての申し立てには引用が必要です。その後、あなたの答えが受け入れられます。
ceremcem

IRCログに関しては、ここで@ Hi-Angelのコメントを参照していました。多分彼は参照を提供できますか?ただし、他のパーツへの参照をいくつか追加しました。
マーティン

BTRFSはマークルツリーを使用せず、Bツリー(したがって「B-TRee FileSystem」)を使用します。障害の例では、ハードウェアによって書き込みバリアが適切に実装されていないことが必要です(これは最近では珍しいケースです)。 。そうでなければ、良い答えです。
オースティンHemmelgarn

btrfsで使用されるツリーは、実際には両方のBツリー(このプロパティはツリーの「形状」とそれらが自己バランスしているという事実に関するもの)とハッシュ/マークルツリー(一部のデータのハッシュを含み、ノードには子のハッシュ。したがって、各変更はルートまで伝播します)。これらのハッシュを検証できるため、btrfsとZFSは破損したデータを検出できます(「ミラーリング」モードで使用されている場合は、別のディスクからデータを読み取ることができます)。
マーティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.