単一デバイスでの btrfs raid1 と btrfs -m dup -d dup の違いは何ですか

単一デバイスでの btrfs raid1 と btrfs -m dup -d dup の違いは何ですか

私は約 2 年間、複数のデバイスで btrfs を使用しています。

信頼性の低いセクターを持つ HDD (シングル プラッター) でいくつかの btrfs 構成をテストする予定です。HDD 上の 12 個のセクターが読み取り不能になることがあります。

これらの設定では、データの整合性と全体的な読み取りおよび書き込み速度に関して何か違いがありますか。

1 TB HDD
-1 TB btrfs partition created with `mkfs.btrfs -d dup -m dup /dev/sda1`

1 TB HDD
-500 GB partition
-500 GB partition
--500 GB btrfs Raid 1 `mkfs.btrfs -m raid1 -d raid1 /dev/sda1 /dev/sda2`

答え1

同じデバイスに複数のパーティションを配置してそれらを RAID するのではなく、バリアントを使用することをお勧めしますdup。 RAID バリアントは、データへのアクセス中に RAID が両方のコピーの読み取りを要求するため、不適切です (これは、いずれかのデバイスが高速であればデータがより早く利用可能になるため、通常のマルチデバイス RAID には適しています)。 単一デバイスの回転式デバイスでは、読み取りヘッドが異なるパーティション間をスキップするため、キューに複数の要求がある場合 (通常の場合)、パフォーマンスが非常に悪くなります。 キューの深さと CFQ スケジューラを増やすと、全体的なレイテンシが少し短縮されますが、その混乱を避ける方がよいでしょう。

このdupバリアントは、通常は 1 つのコピーのみを読み取り、セクターが読み取り不可能な場合にのみ別のコピーにフォールバックするのに十分なほど健全である必要があります。

実装についてはよくわかりませんが、コピーが最初のコピーから 1/2 デバイス離れるわけではないので、書き込みパフォーマンスも向上するdupと思われます。単一デバイス RAID では、1 つの論理書き込み操作を物理的な回転デバイス上の 2 つの場所に書き込む必要があり、その差は常に 1/2 デバイスであるため、書き込みパフォーマンスも悪くなります。そのため、回転デバイスの全体的な最悪のケースの動作を実際に実装するアルゴリズムになります。dupdup

答え2

私が思いつく DUP と RAID1 の違いは 1 つあります。

  • 私のように、使用していないときにランダムセクターが読み取り不可と表示されるSSDをお持ちの場合
  • 次に、BTRFS パーティション ヘッダーに読み取り不可能なセクターが 1 つあるため、DUP がパニックになる可能性があり、BTRFS はそこに保存されているものをマウントしたり、読み取ったりすることができません。一方、RAID1 では、もう 1 つをマウントし (もう 1 つの BTRFS パーティション ヘッダーに読み取り不可能なセクターがない場合)、読み取り不可能なセクターを再度書き込むためにスクラブを実行します。
  • RAID1 は、それぞれヘッダーを持つ 2 つのパーティションを意味します。そのため、1 つのヘッダーが破損し (パーティションを再フォーマット)、もう 1 つのパーティション ヘッダーが正しい場合は、もう 1 つのパーティションをマウントして、劣化モードでアクセスし、修正できます (別の新しいパーティションを追加し、不足しているパーティションを削除し、RAID1 レベルでバランスを取ります)。

ここで、長期間 (8 日以上) 電源が入らないとランダムに読み取り不可能なセクターが発生する KingDian SSD に関する私の個人的な体験談と、BTRFS RAID1 がどのようにしてこのような SSD を救い、使用できるか (読み取り不可能なセクターで衝突が発生するまで) について説明します。

まず、BTRFS とその DUP (近いうちにテストします) および RAID1 (すでにテスト済みで完璧な結果) に感謝したいと思います。これにより、KingDian ブランドの SSD を使用できるようになりました。Yucun および Samsung ブランドの SSD では、KingDian ブランドの 3 つの SSD すべてで発生する「読み取り不可セクター」の問題はまだ発生していません。合計 11 個の SSD を使用していますが、KingDian が 1 個故障したため、現在は 10 個しか使用していません。また、KingDian 1TiB SSD が 1 個ありますが、使用を開始するのが怖いです (合法的に購入した DVD を H.264/2xAAC に変換してテレビで再生するために、FAT32 または NTFS で使用することを計画していました)。

KingDian SSD の問題は本当に奇妙なので、問題を確認するために私が何をしたかを段階的に説明します。

  1. 90% のみのパーティションを作成してフォーマットします。数日前までは Ext4 (Linux) / NTFS (Windows システム パーティション) を使用していました。Windows は本当に嫌いですが、使用せざるを得ません。
  2. そのパーティションにシステムをインストールする
  3. システムを毎日使用 --> 問題は発生しません
  4. 電源をオフにして8日以上放置すると、KingDian SSに問題が発生する
  5. ライブLinuxディストリビューション(DVD / USB /など)で起動して問題を確認するために、私は主にSystemRescueCDを使用していますが、「ntfsclone」/「partclone.*」/「partimage」または単なる「dd」を備えた他のものでも機能します。
  6. パーティションのクローンを作成し、ファイルとして保存します(システムパーティションをバックアップメディアに保存するのと同様)。
  7. 問題は、いくつかのセクター(数個から25または30個近く)が読み取れないことです。
  8. どのセクターが読み取れないかを(紙に)書き留めます
  9. ここで奇妙なことが始まります。正しく電源を切り、さらに8日間以上電源を切ったままにします。
  10. 手順4から7を繰り返して、どのセクターが現在読み取り不可能になっているかを確認します。リストは大きく変化し、ほとんどの場合、両方のリストに共通するものがないため、読み取り不可能なセクターはすべて読み取り可能になり、読み取り可能だった他のセクターは現在読み取り不可能になっています。
  11. これを何度も繰り返すことができます(SSDにまったく書き込みをせずに)。読み取り不可能なセクターのリストには、共通のセクターがまったくない傾向があります(1つが2つのリストにある場合もあります)。

なぜこの SSD (KingDian ブランドのみ) はこのような醜くて奇妙な動作をするのでしょうか? 電源を長期間 (8 日以上) 供給しないと一部のセクターが読み取り不能になり、さらに一定期間 (8 日以上) 電源を供給しないと再び読み取り可能になる、とランダムに表示されます。

最も奇妙なのは、読み取り不能になった後、再び読み取り可能になると、常に正しいデータが含まれることです。

さらに、SMART データを確認すると、新しく再割り当てされたセクターはないことがわかります (読み取り不可能なセクターの再割り当てを強制するツールを Windows で使用したことがあるため、いくつかあります)。

SMART 情報には、読み取りエラーはないと表示されますが、一部のセクターは読み取り不可であり、書き込みエラーもないと表示されます。

明らかに、「読み取り」エラーはなく、「間違った」データで「読み取られた」ものは何もありません...これは技術的に読み取れなかったこととは異なります...また、SMART データには読み取り不可能なエラー数などを示すフィールドはありません。

ちなみに、読み取り不可能なセクターをデータで再書き込みすると、セクターが再マップされることなく再び読み取り可能になります。これは、使用されている内部セクターが障害のあるセクターではないためと考えられます (SSD は書き込み時に寿命を延ばすためにさまざまな場所を使用しますが、SSD はチップ内の実際の位置である内部マップ LBA を使用することに注意してください)。

ちなみに、30GiB のデータを含むパーティションのクローン作成には、その問題がなければ 1 分もかかりませんでした (SSD は、パーティションのクローン作成中、つまり、ほとんどが順次読み取りで 550MiB/秒の速度で読み取ることができます)。しかし、読み取り不可能なセクターが 25 個ある場合は、24 時間以上かかり (このようなエラーを無視すると終了しません)、一部のデータが「破損」します (読み取れなかったデータ)。

ここで、BTRFS が私を救ってくれました:

  • まず、私はデータとメタデータ用にBTRFSのRAID1レベルの同じSSDの2つのパーティションを使用していました。
  • RAID1 の代わりに DUP について理解できたので、DUP でテストしてみます。そうすれば、毎回 2 つのクローン パーティションのバックアップを実行する必要がなくなり、1 つだけで済みます。これは素晴らしいことです (うまくいけば)

どのようにそれが私を救ったのでしょうか? 簡単です: バックアップ メディアにクローンを作成する前に、クローンを作成する対象をスクラブして、読み取り不可能なセクターがあると、BTRFS がそれらを他のコピーで上書きするようにします (両方のコピーに同時に同じ位置に読み取り不可能なセクターがないことを期待します)。

2 つのパーティションでは正常に動作し (遅いですが動作しました)、クローン データの一部のセクターは失われません。今度は、2 つの同一サイズのパーティションで RAID1 を使用する代わりに、1 つのパーティションで DUP を使用してテストする必要があります。

バックアップにかかる時間は短縮されません (スクラブにも余分な時間がかかります) が、少なくともすべてのデータが正しいことは確認できます... ある日、同じ位置で同時に同じデータ (衝突) に対して 2 つの読み取り不可能なセクターが発生すると、回復できなくなります。

他の選択肢は明らかです。KingDian SSD を一切使用しないことです。これまで使用していた SSD の中で、この問題 (長時間電源が入らないとセクターが読み取り不能になる) が発生したのは KingDian SSD だけだからです。

休暇に出かけ、家の電源を切って、帰ってきたら SSD に読み取り不可能な部分があったと想像してください。これはホームユーザーにとっては大きな問題ですが、SSD が常に電源供給されているデータセンターにとっては問題ではありません。

素晴らしい BTRFS!!! さて、もう 1 つの厄介な部分 (私にとって) について考えてみましょう。NTFS パーティション (Windows システム パーティション) で同様のことを行うにはどうしたらよいでしょうか? まったくできません。NTFS にはそのオプションがありません (Windows HOME バージョンであって、SERVERS ではないことに注意してください)。

BTRFS に感謝します。Linux は数日前に私が考えていたよりもはるかに優れています... 私は何十年も Linux ユーザーですが、完全な破損などに関する間違った情報ばかりだったので、BTRFS を試すことを拒否していました。しかし、SSD の問題が発生し、冗長性のあるものが必要になるまで、そうでした。

私が考えていた他の選択肢は ZFS でしたが、これははるかに複雑で、GRUB2 ブートローダに統合されておらず、カーネルにも統合されていません (ライセンス システムのため、おそらく今後も統合されることはありません)。そこで、ついに (昨日) BTRFS を試してみました...そして驚いたことに、これは非常に安定しており、比較的使いやすく (新しいディスクを追加すると、RAID1 ではなく RAID0 に追加されるという警告が表示されます。私は RAID5/6 などを使用しておらず、また使用したいとも思っていません)、壊滅的な損傷から簡単に回復でき (2 つのパーティションの 1 つを再フォーマットする)、データが失われることはありません (KingDian 以外の SSD の場合)。

もちろん、サブボリュームやスナップショットなどは使用せず、RAID1 の Linux ルート "/" 用の単純なファイルシステムとしてのみ使用します。前述したように、RAID1 ではなく DUP でテストする必要がありますが、パーティション ヘッダーの読み取り不可能なセクターはすべての BTRFS が回復/読み取り不可能であることを意味するため、RAID1 の同じ SSD 上の 2 つのパーティションのままにしておくことを恐れています (私はかなり偏執的です)。

ランダムに読み取り不可能なセクター障害が発生する中で KingDian SSD をまだ使用できれば、コストの節約になります。SSD は安くありません。私が使いたいのはシングル ビット セル SSD だけであり、これは非常に高価で、サイズが大きくなるにつれてさらに高くなります (私はかなり心配性だと言います)。また、100 を超える最後の状態の履歴を含むすべてのデータの 10 を超えるオフライン バックアップ コピーがあります (心配性すぎるのはわかっています)。

答え3

少なくとも 1 つの違いが見つかりました。

劣化した RAID1 RW をマウントできるのは 1 回だけです。デバイスの他のパーティションが正常であるにもかかわらず、パーティションが故障する可能性は低いかもしれませんが、それでも違いはあります。

ソース: https://btrfs.wiki.kernel.org/index.php/Gotchas#raid1_volumes_only_mountable_once_RW_if_degraded

RAID1ボリュームは劣化した場合RWでのみマウント可能

単一のプロファイル チャンクがない場合でも、RAID1 ボリュームが劣化した場合は、オプション -o degraded,rw を使用して読み取り/書き込みモードで 1 回だけマウントできます。

ノート:

  • デバイスが 2 台以上ある場合は、このようなことは発生しない (と報告されています)。

  • これは、raid10 プロファイル ボリュームでは発生しません。

  • これは多くの場合、「不完全なチャンク変換」の問題が原因で、単一のチャンクが残っていることが原因です。

回復可能なもの:

  • まだ読み取り/書き込み可能であれば、十分なスペースがあれば、チャンクをプロファイル raid1 からプロファイル single (またはプロファイル dup) に変換できます。

  • まだ読み取り/書き込み可能である場合は、btrfs デバイスを使用して、不足しているデバイスを置き換えることができます。

  • いずれかの理由で RAID1 ボリュームが読み取り専用のままになっている場合、その内容をダンプし、再作成して内容を復元することによってのみ回復できます。

答え4

遅くなりましたが、とにかく。私も同じ疑問を抱いていました。私が読んだ記事では(dup について)次のように書かれていました。

「たとえば、SSD ドライブはブロックを内部的に単一のコピーに再マップして重複を排除することができます。これにより冗長性の向上の目的が無効になり、スペースが無駄になります。」

おそらく、raid1 はその懸念を回避する方法となるでしょう (あるいはそうではないかもしれません)。

関連情報