我正在尝试从媒体物理损坏的 btrfs 分区恢复数据。
我能够恢复大约 99% 的分区,因此我确信大部分数据都应该在那里。但我似乎缺少重要的元数据。我根本无法安装分区。btrfs rescue super-recover
失败的。我可以使用btrfs restore
、 使用 找到的不同树根来获取各种文件btrfs-find-root
。然而,对于一个目录 ( /home
) 这总是会失败:
checksum verify failed on 965984256 found 000000B6 wanted 00000000
bad tree block 965984256, bytenr mismatch, want=965984256, have=0
Error searching -5
Error searching /recovery/sde1/@home
由于我无法从根集进入该目录,我想知道是否有其他方法可以绕过根集元数据来获取目录内容 - 也许通过扫描整个分区。
答案1
如果数据本身损坏,部分文件将包含错误或无法访问的数据。如果是这种情况,我们将在日志中看到校验和错误。在某种程度上,BTRFS
由于其固有的冗余性,能够恢复一些信息,我们可以通过擦洗来做到这一点。
BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 11382, gen 0
BTRFS error (device sda1): unable to fixup (regular) error at logical 13787648000 on dev /dev/sda1
如果superblock
受到影响,您将根本无法挂载。是superblock
的根目录filesystem tree
,包含操作系统安装该单元所需的信息。这通常很容易修复,因为BTRFS
在不同位置保存了额外的副本,因此您可以使用超级块的副本进行安装,甚至可以运行以下命令来尝试修复它。
btrfs rescue super-recover
filesystem
此外,即使实际数据可能完好无损,您也可能会遇到元数据损坏的情况。这意味着它BTRFS
不知道文件或文件部分的存在,因此您无法访问它们。在这种情况下,如果您反应很快,您可以扫描整个磁盘并尝试使用以下命令重建filesystem
元数据树btrfs
rescue chunk-recover.
这是有风险的,而且速度非常慢。