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 之后)因类似错误而失败。
Abtrfs check
报告 3 个扩展的问题 - 每个扩展问题的报告如下:
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]
我的问题是:如何将这些数字转化为有用的东西?例如检查某些文件/目录是否受到影响?
以及如何处理此类错误?
Abtrfs 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
afterbtrfs check
触发WARN_ON()
了fs/btrfs/extent-tree.c
.并且接收快照导致 IO 失败(强制只读重新安装)。
btrfs check
因此,由于 a 、后面跟着 abtrfs check --repair
和 a的运行时间btrfs scrub
可能非常重要 - 并且这些操作具有不确定的结果:实用的替代方案是重新创建 btrfs 文件系统并恢复备份。
2021-12-14 跟进:FWIW,这些错误是由故障/低质量 USB 集线器引起的(供应商字符串:“Genesys Logic, Inc.”)。直接连接 USB 磁盘驱动器后,这些错误再也不会出现。在此之前,当每天将快照发送到外部 USB 驱动器时,每隔几个月左右就会出现此类错误。我什至尝试了另一个 Genesys USB 集线器(尽管标记不同),但它产生了类似的错误模式。