在没有根集的情况下从损坏的 btrfs 分区恢复目录

在没有根集的情况下从损坏的 btrfs 分区恢复目录

我正在尝试从媒体物理损坏的 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. 

这是有风险的,而且速度非常慢。

如何恢复 BTRFS 分区

相关内容