BtrFS 中的逻辑地址映射

BtrFS 中的逻辑地址映射

我试图通过挖掘驱动器的十六进制表示形式 (xxd /dev/sd**) 来手动从 BtrFS 驱动器恢复一些文件内容。

我认为可以完成的唯一方法是在文件树中的某个位置找到 file_extent_item 。然后,我将查找存储在该项目中的范围数据的开始逻辑地址,最后转到该偏移量以提取字节。我遇到的问题是这样的偏移量并不完全对应于磁盘的偏移量。

我制作了一个脚本,该脚本将提取存储在元数据块标头内的逻辑地址,然后将其与我在其中找到该元数据块的磁盘上的地址进行比较。以下是一些结果:

Phy. address: 150 0000h
Log. address: 150 0000h (match up)

Phy. address: 250 0000h
Log. address: 1D0 0000h (-80 0000h)

Phy. address: 824F C000h
Log. address: 41CF C000h (-4080 0000h)

我想了解这些差异是如何发生的以及如何跟踪它们,以便可以通过 file_extent_items 中给出的逻辑地址来定位数据范围。有谁知道这个谜团的答案(或者如果有的话如何以另一种方式找到文件内容:P)?

PS 我无法通过内容查找文件,所以唯一的方法是通过 btrfs_***_items 找到它们。

相关内容