我有一个 120 GB 三星 SSD,我在 Xubuntu 18.04 中将其设置为带有 btrfs 的 LUKS 卷,该卷一直运行良好,直到我今天下午尝试启动,并在尝试挂载时在 dmesg 中发现了类似的行(在接受 LUKS 密码之后) ):
[ 8023.426359] BTRFS info (device dm-0): disk space caching is enabled
[ 8023.426361] BTRFS info (device dm-0): has skinny extents
[ 8023.427820] BTRFS error (device dm-0): bad tree block start, want 120516247552 have 17642829462275766793
[ 8023.427828] BTRFS warning (device dm-0): failed to read tree root
[ 8023.459232] BTRFS error (device dm-0): open_ctree failed
如果该“想要”值应该是字节偏移量,那么它似乎超出了任何合理的数量。我启动到 Ubuntu 19.04 闪存驱动器并尝试执行rescue chunk-recover
报告 111 个可恢复块和“块树恢复成功”的操作,但它对问题没有任何影响。我再次运行了块恢复过程,它产生的输出与第一次运行相同,因此它似乎没有做任何事情。
我尝试做一个rescue super-recover
只是为了看看发生了什么,它报告了 2 个超级块,它们已经处于良好状态,并且没有采取任何操作。
此时,我使用 dd 将磁盘备份到某个工作存储上的文件。我知道我的数据(或至少其中一些)仍然存在,因为如果我翻阅图像的 xxd 转储,我可以看到纯文本文件的内容。
我尝试这样做check --repair
,我知道这是最后的手段,但这也没有成功,出现类似于 dmesg 中安装失败的错误:
enabling repair mode
Opening filesystem to check...
checksum verify failed on 120516247552 found 4D050B32 wanted 0EB4D74B
checksum verify failed on 120516247552 found 4D050B32 wanted 0EB4D74B
bad tree block 120516247552, bytenr mismatch, want=120516247552, have=17642829462275766793
Couldn't read tree root
ERROR: cannot open file system
我很确定这不是重复的BTRFS 坏树块开始
编辑:我尝试将inspect-internal dump-tree -b ...
其指向与扇区大小对齐的各个位置,所有这些位置都会生成校验和不匹配错误,我注意到这一点,check --repair
并且其他命令在尝试读取 120516247552 处的根树时抱怨。这是某些特定的症状吗?当磁盘上各处校验和失败时出现问题? (硬件故障?)重申一下,我能够制作磁盘内容的图像,dd
并且可以看到其中的明文数据,它并不全是垃圾,因此磁盘无法返回任何有效的想法数据看来不太可能。