2つの同じデバイスを使用してbtrfsファイルシステムを復元する方法

2つの同じデバイスを使用してbtrfsファイルシステムを復元する方法

要約:長いストーリーのおかげで、デバイスと/dev/sde1(ID 1と2)/dev/sde1で構成されたBtrfs RAID1ファイルシステムが得られました。 Btrfs は rw をマウントせず、これはデバイスがないことを示します。他のデバイスを取り外すためにこれらのデバイスのどれが動作しているかを確認し、正しい2番目のドライブを追加するにはどうすればよいですか/dev/sdb1?現在は読み取り専用でのみマウントできるため、ドライブの追加に失敗します。


Btrfsを使用するRAID1(ミラー)には2つの外付けハードドライブがあります。 Aドライブは問題ありませんでしたが、定期清掃中にBドライブで何百万ものエラーが発生しました。テスト中にデバイスBは大丈夫に見えたので、同期が合っていないようです(ホストはラップトップなので、バッテリーが停電しても生き残ることができますが、ドライブはそれができないので1台が来るようです)。他のものより先にオンラインで))。デバイスBからデバイスAの画像を書き換えたいです。

replace検索を少し試してみると、サブコマンドを使用する必要があるようです。デバイスBをデバイスBに交換したいです。もちろん、btrfsを使ってこのコマンドを理解していることを確認しました。

btrfs replace start /dev/deviceB /dev/deviceB /mountpoint

残念ながら、これは機能しません。マニュアルページでは、「ライブファイルシステムから現在のソースデバイスに保存されているターゲットデバイスにデータのコピーを開始します。」そのため、そこからコピーできるので、利用可能な他のデバイスを渡しました。

btrfs replace start /dev/deviceA /dev/deviceB /mountpoint

後で「作業が完了すると、ソースデバイスがファイルシステムから削除されます」という内容があるため、マニュアルページをよく読んでください。これで、/dev/deviceBそのデバイスのみを持つファイルシステムが作成されました。

ただし、元の(破損した)デバイスBは削除されませんでした。

今、このような状況が発生しました。

$ btrfs device usage /mountpoint
/dev/sde1, ID: 1
   Device size:             3.64TiB
   Device slack:              0.00B
   Data,single:             1.00GiB
   Data,RAID1:              2.00TiB
   Data,DUP:               40.91GiB
   Metadata,single:         1.00GiB
   Metadata,RAID1:          5.00GiB
   Metadata,DUP:            3.00GiB
   System,single:          32.00MiB
   System,RAID1:           32.00MiB
   System,DUP:            128.00MiB
   Unallocated:             1.59TiB

/dev/sde1, ID: 2
   Device size:             3.64TiB
   Device slack:              0.00B
   Data,RAID1:              2.00TiB
   Metadata,RAID1:          5.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             1.63TiB

/dev/sde1デバイスBはどこにありますか?でマウントできます-o degraded,ro。)

この状況をどのように解決できますか?

デバイスA()を追加しようとしましたが、sdb1「エラー: '/dev/sdb1'デバイスの追加中にエラーが発生しました:読み取り専用ファイルシステム」というメッセージで失敗しました。どのデバイスIDがどれかわからないので、どのように進むべきかわかりません。したがって、それらの1つを削除すると(rwをマウントするために)災害になる可能性があります。それにもかかわらず、現在では端末を削除するのが最善の措置であるかどうかはわかりません。おそらく(どのデバイスIDであるかを調べた後)、replaceデバイスIDをパラメータとして使用する必要がありますか?

デバイスAのファイルシステムはBtrfsとして認識されなくなり、hexdumperでチェックするときに無効になっているようです。最初の部分の近く(0x10 000の直後のiirc)には、リテラル文字列BTRFSが含まれていましたが、もはや含まれていません。データはまだあるようです。ヘッダーは間違っているだけです(ゼロ以外の最初のデータは0x400 000にあります)。

ベストアンサー1

しばしば無視される警告から始めます(私もこれについて有罪です)...今データをバックアップしてください。もちろん、データをバックアップするのに十分な空き容量がある場合は、ファイルシステムを再作成できますか?これは芸術であり、正しく理解するのが難しいことに注意してください。これがirc.freenode.netのbtrfs IRCチャンネルにいる人と話すことをお勧めします。

最初に試したことは、デバイスAを復元することでした。これはbtrfs rescue super-recover /dev/deviceAまたはで行うことができますbtrfsck --repair /dev/deviceA。これらのいずれかが成功した場合は、そのデバイスを消去してdeviceB新しいデバイスとして追加できます(またはそれがdeviceA破損していると思われる場合は交換してください)。

dm-snapshotそうでなければ、この場合は、デバイスのスナップショットを最初に作成し、スナップショットを操作して状況が悪化しないようにするのが好きです。時々、btrfsコマンドの順序を正しく取得するには、数回の試みが必要です。スナップショットファイルを保存するには多くの空き容量が必要です(上記の基準で10〜100G程度になると思います)。

上記の出力を見るとdevid 1。隣のパス)。 btrfsが読み取り専用でマウントされていないことを確認してください。それ以外の場合は、問題を解決するために書き込みを実行できません。それでも機能しない場合は、まずデバイスを使用して取り外してみてください。失敗した場合は、ブロックをwithに変換してからデバイスをもう一度削除してみてください。すべて成功したら、デバイスとして追加してすべてを再変換できます。さらに、これらの変換命令には時間がかかる可能性があるため、忍耐が必要です。devid 2btrfs filesystem showbtrfs device delete missing /mountpointbtrfs device remove 2 /mountpointRAID1singlebtrfs balance -mconvert=single -sconvert=single -dconvert=single /mountpointdeviceARAID1

おすすめ記事