web-dev-qa-db-ja.com

停電後の回復不可能なBtrfsファイルシステム?

私はBtrfsファイルシステムで3TB USB外付けハードドライブ(WD MyBook)に書き込んでいますが、誤って電源をドライブの電源ブリックに切り替えました。

奇妙なこと-書き込み操作は継続しているように見えました(私は即時のI/Oエラーを予期していました) rsyncプロセスを手動で強制終了し、ファイルシステムを再マウントしようとしました。

/dev/sdfノードはまだそこにありましたが、マウントできませんでした。

partprobebtrfs device scanを試しましたが、うまくいきませんでした。

再起動後、ファイルシステムを再度マウントできませんでした。ドライブでbtrfs rescue chunk-recover -vを実行しましたが、約14時間後にこれが見つかりました:

(A long list of good chunks)
Chunk: start = 1992919351296, len = 1073741824, type = 1, num_stripes = 1
      Stripes list:
      [ 0] Stripe: devid = 1, offset = 1975739482112
      No block group.
      Device extent list:
          [ 0]Device extent: devid = 1, start = 1975739482112, len = 1073741824, chunk offset = 1992919351296
  Chunk: start = 1993993093120, len = 1073741824, type = 1, num_stripes = 1
      Stripes list:
      [ 0] Stripe: devid = 1, offset = 1976813223936
      No block group.
      Device extent list:
          [ 0]Device extent: devid = 1, start = 1976813223936, len = 1073741824, chunk offset = 1993993093120
Unrecoverable Chunks:
  Chunk: start = 1995066834944, len = 1073741824, type = 1, num_stripes = 1
      Stripes list:
      [ 0] Stripe: devid = 1, offset = 1977886965760
      No block group.
      No device extent.
  Chunk: start = 1996140576768, len = 1073741824, type = 1, num_stripes = 1
      Stripes list:
      [ 0] Stripe: devid = 1, offset = 1978960707584
      No block group.
      No device extent.
  Chunk: start = 1997214318592, len = 1073741824, type = 1, num_stripes = 1
      Stripes list:
      [ 0] Stripe: devid = 1, offset = 1980034449408
      No block group.
      No device extent.
  Chunk: start = 1998288060416, len = 1073741824, type = 1, num_stripes = 1
      Stripes list:
      [ 0] Stripe: devid = 1, offset = 1981108191232
      No block group.
      No device extent.
  Chunk: start = 1361559158784, len = 1073741824, type = 1, num_stripes = 0
      Stripes list:
      Block Group: start = 1361559158784, len = 1073741824, flag = 1
      No device extent.

Total Chunks:           1850
  Recoverable:          1845
  Unrecoverable:        5

Orphan Block Groups:

Orphan Device Extents:

parent transid verify failed on 1634923266048 wanted 1530 found 1532
parent transid verify failed on 1634923266048 wanted 1530 found 1532
Ignoring transid failure
Couldn't setup extent tree
open with broken chunk error
Chunk tree recovery failed

チャンクの長いリストの後、回復不能なものがいくつかあります。どういう意味ですか?

私はscrub、check、-init-extent-tree、zero-logを含むすべての可能なbtrfsコマンドを試しましたが、yはすべて同様の出力で何もしなくなりました。

# btrfs check -p /dev/sdc
Opening filesystem to check...
parent transid verify failed on 1634923266048 wanted 1530 found 1532
parent transid verify failed on 1634923266048 wanted 1530 found 1532
Ignoring transid failure
Couldn't setup extent tree
ERROR: cannot open file system

予期しない電源障害が発生しただけでBtrfsファイルシステムを完全に破棄した可能性はありますか?

このケースの詳細については、こちらをご覧ください: https://forum.manjaro.org/t/unfixable-btrfs-filesystem-after-a-power-failure/80994

3
unfa

使ってはいけません btrfs checkあなたが本当に何をしているのか本当にわかっていない限り!それはあなたのファイルシステムを破壊するかもしれません!

私はBtrfsメーリングリストに連絡しましたが、btrfs check --repairはファイルシステムの損傷を増加させる可能性があります。

小さな問題の後で、私が愚かにこのコマンドを使用し、ファイルシステムをブリックしたように見えます。

ヘルプを読むために実行すると警告が表示されます。

# btrfs check
btrfs check: too few arguments
usage: btrfs check [options] <device>

    Check structural integrity of a filesystem (unmounted).

    Check structural integrity of an unmounted filesystem. Verify internal
    trees' consistency and item connectivity. In the repair mode try to
    fix the problems found. 
    WARNING: the repair mode is considered dangerous and should not be used
             without prior analysis of problems found on the filesystem.

詳細: https://btrfs.wiki.kernel.org/index.php/Btrfsck

1
unfa