我们能否在不了解顶部运行的文件系统的情况下知道使用了哪些逻辑块?

我们能否在不了解顶部运行的文件系统的情况下知道使用了哪些逻辑块?

这个常见问题解答:

为什么 Clonezilla 可以不是恢复从大驱动器保存的图像到较小的驱动器?有什么解决办法吗?

实现这样的功能并不容易,因为Clonezilla现在是一个分区“镜像”工具,通过“镜像”,意味着clonezilla 实际上并不知道文件本身,clonezilla 只知道使用过的块在哪里。因此,目标分区大小必须等于或大于原始分区大小,以便 Clonezilla 可以恢复该分区上已使用的块。如果目标分区大小较小,则会出错。除非Clonezilla将来有基于文件的功能。或许...

据我所知,文件是指向一个或多个连续块(或簇)的指针列表。在不了解文件系统的情况下,软件如何知道哪些块正在使用?

答案1

简单回答:不。

对于任何数据结构都是如此。如果你不理解数据结构,你就无法在其中找到任何东西。


出于数据恢复的目的,有一些工具可以扫描数据(驱动器)并搜索它理解的签名(例如 jpeg 文件的开头)。一个示例工具是摄影

这种技术可以让软件在不了解文件系统的情况下找到一些文件。但它很混乱且不可靠。该技术不能很好地处理碎片,并且仅适用于某些文件类型。它通常会导致文件损坏。


有一些特定于文件系统的克隆工具。例如,如果您知道分区类型是 ext2/3/4,您可以使用类似的工具e2图像在不使用内核文件系统驱动程序的情况下复制文件。

您还可以在使用clonezilla 进行克隆之前调整文件系统的大小。例如:使用调整2fs大小首先缩小文件系统。

除此之外,您唯一真正的选择是挂载文件系统并使用cptar或复制文件rsync


关于 CloneZilla 不实施调整大小的决定: 文件系统通常非常复杂。有一些更简单的,但 ext2/3/4、reiserfs 等都不是简单的。

从文件系统中解析足够的信息以确定它正在使用哪些块可能很简单。有些文件系统甚至有一个漂亮整洁的表,只是标记哪些块被使用/不使用。解析它根本不需要文件知识。

例如,ext3 默认使用 4096 字节的块和 32,768 块的块组。每个 128MiB 块组包含一个“数据块位图”,显示该组中的哪些块正在使用中(请参阅参考)。因此,在不了解文件本身的情况下,程序可以解析只是哪些块正在使用中。

然而,调整文件系统的大小需要更丰富的知识。在不了解 ext2 等细节的情况下,可能的障碍包括

  • 无法更新交叉引用指针或指向/来自元数据的指针
  • 无法更新校验和
  • 无法正确更新块使用位图

对于天真的开发人员来说,以破坏文件系统或破坏元数据的方式实现调整大小是非常容易的。

相关内容