web-dev-qa-db-ja.com

BTRFS:別のツリールートに切り替えることは可能ですか?

BTRFSパーティションが破損し、

mount -o usebackuproot ...

動作しません:

[ 9252.141767] BTRFS info (device dm-1): trying to use backup root at mount time
[ 9252.141779] BTRFS info (device dm-1): disabling disk space caching
[ 9252.141784] BTRFS info (device dm-1): has skinny extents
[ 9252.184586] BTRFS error (device dm-1): parent transid verify failed on 7777276116992 wanted 100336 found 89751
[ 9252.186302] BTRFS error (device dm-1): parent transid verify failed on 7777276116992 wanted 100336 found 89751
[ 9252.186306] BTRFS warning (device dm-1): failed to read tree root
[ 9252.186729] BTRFS error (device dm-1): parent transid verify failed on 7777276116992 wanted 100336 found 89751
[ 9252.187091] BTRFS error (device dm-1): parent transid verify failed on 7777276116992 wanted 100336 found 89751
[ 9252.187094] BTRFS warning (device dm-1): failed to read tree root
[ 9252.187372] BTRFS error (device dm-1): parent transid verify failed on 7777213923328 wanted 100335 found 89750
[ 9252.187589] BTRFS error (device dm-1): parent transid verify failed on 7777213923328 wanted 100335 found 89750
[ 9252.187592] BTRFS warning (device dm-1): failed to read tree root
[ 9252.187948] BTRFS error (device dm-1): parent transid verify failed on 7777188921344 wanted 100334 found 100336
[ 9252.188281] BTRFS error (device dm-1): parent transid verify failed on 7777188921344 wanted 100334 found 100336
[ 9252.188284] BTRFS warning (device dm-1): failed to read tree root
[ 9252.188661] BTRFS error (device dm-1): parent transid verify failed on 7260661022720 wanted 100333 found 96460
[ 9252.189025] BTRFS error (device dm-1): parent transid verify failed on 7260661022720 wanted 100333 found 96460
[ 9252.189029] BTRFS warning (device dm-1): failed to read tree root
[ 9252.236361] BTRFS: open_ctree failed

btrfs checkも機能しません:

btrfs check /dev/mapper/media
parent transid verify failed on 7777276116992 wanted 100336 found 89751
parent transid verify failed on 7777276116992 wanted 100336 found 89751
parent transid verify failed on 7777276116992 wanted 100336 found 89751
parent transid verify failed on 7777276116992 wanted 100336 found 89751
Ignoring transid failure
Couldn't setup extent tree
Couldn't open file system

"btrfs restore"で使用できるツリールートブロックがいくつか見つかりました:

btrfs restore -t 8889016483840 -D -i -v /dev/mapper/media /dev/null | wc -l
2264442

しかし、私はここで問題を抱えています。私のbtrfsストレージは非常に大きく、20 TBを超えており、バックアップと復元を行うためのそのようなサイズのスペアディスクはありません。再フォーマットせずに、そのようなファイルシステムを修復したり、特定のツリールートブロックに「インプレース」で切り替えたりすることは可能ですか?

3
Nikki Chumakov

まず、有効なスーパーブロックがあることを確認します。

_btrfs rescue super-recover -v <device>
_

使用する:

_btrfs find-root <device>
_

to 修復に使用するのに最適なツリールートを見つける

  1. ルートノードは最高レベルである必要があります
  2. 世代が高いほど、そのルートを使用してfsを回復できる可能性が高くなります。

注:エラーメッセージでは、wantedはログ内の世代であり、foundはツリールートに基づく世代です。

次のコマンドから最もクリーンな出力を見つけます。

_btrfs check --tree-root <block> --super <sup>
_

どこ:

  • _<sup>_は、_0_、_1_、または_2_のいずれかです。
  • _<block>_は_btrfs find-root_で与えられます(注:しないでくださいマニュアルには_<bytenr>_)

次に、次のようにファイルシステムを修復します。

_btrfs check --repair --tree-root <block> --super <sup>
_

実際にファイルシステムを変更するには、_--repair_が追加されていることに注意してください。

4
Tom Hale