BTRFSリファレンス/バックポインタの不一致と逆参照損失の処理

BTRFSリファレンス/バックポインタの不一致と逆参照損失の処理

btrfs receivebtrfsファイルシステムは、拡張不足のために操作中にいくつかのエラーを報告しました。ログから:

BTRFS error (device dm-1): unable to find ref byte nr 190303420416 \
      parent 0 root 594  owner 1 offset 0
BTRFS: error (device dm-1) in __btrfs_free_extent:6944: errno=-2 No such entry
BTRFS info (device dm-1): forced readonly
BTRFS: error (device dm-1) in btrfs_run_delayed_refs:2956: errno=-2 No such entry

A btrfs scrub(umount + mount以降)も同様のエラーが原因で失敗します。

3つの拡張機能について報告された問題btrfs check- 各拡張機能の問題は、次のように報告されます。

checking extents
ref mismatch on [190303420416 16384] extent item 0, found 1
Backref 190303420416 parent 594 root 594 not found in extent tree
backpointer mismatch on [190303420416 16384]
owner ref check failed [190303420416 16384]

私の質問は:この数字をどのように便利なものに変えることができますか?たとえば、特定のファイル/ディレクトリが影響を受けるかどうかを確認しますか?

そして、そのようなエラーを処理する方法は何ですか?

Aはbtrfs check --repair深刻な苦情なしにうまく機能するようです。

  ref mismatch on [190303420416 16384] extent item 0, found 1
* repair deleting extent record: key 190303420416 169 1
* adding new tree backref on start 190303420416 len 16384 parent 0 root 594
  Backref 190303420416 parent 594 root 594 not found in extent tree
  backpointer mismatch on [190303420416 16384]
  owner ref check failed [190303420416 16384]

*マークは私のものです)

これは修理が成功し、データが失われなかったことを意味しますか?

ベストアンサー1

成功したbtrfs check --repairコマンドが必ずしも一貫したbtrfsファイルシステムをインポートするわけではありません。

btrfs scrubあるケースでは、Afterが btrfs checkトリガーされ、スナップショットを受信すると、IOが失敗(読み取り専用の再マウントを強制)することが観察されました。WARN_ON()fs/btrfs/extent-tree.c

btrfs checkしたがって、a、a、およびabtrfs check --repairの実行時間はbtrfs scrub非常に重要であり、これらの操作は不確実な結果をもたらします。実用的な選択肢は、btrfsファイルシステムを再作成し、バックアップを復元することです。

2021-12-14フォローアップ:FWIW、これらのエラーは、不良または品質の低いUSBハブ(ベンダー文字列:「Genesys Logic、Inc.」)が原因で発生します。 USBディスクドライブを直接接続した後、これらのエラーはもう発生しません。以前は、毎日のスナップショットを外部USBドライブに送信すると、このようなエラーが数ヶ月に1回表示されます。別のGenesys USBハブ(ラベルは異なりますが)を試してみましたが、同様のエラーパターンが発生しました。

おすすめ記事