btrfs receive
btrfsファイルシステムは、拡張不足のために操作中にいくつかのエラーを報告しました。ログから:
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ハブ(ラベルは異なりますが)を試してみましたが、同様のエラーパターンが発生しました。