从这个常见问题解答:
为什么 Clonezilla 可以不是恢复从大驱动器保存的图像到较小的驱动器?有什么解决办法吗?
实现这样的功能并不容易,因为Clonezilla现在是一个分区“镜像”工具,通过“镜像”,意味着clonezilla 实际上并不知道文件本身,clonezilla 只知道使用过的块在哪里。因此,目标分区大小必须等于或大于原始分区大小,以便 Clonezilla 可以恢复该分区上已使用的块。如果目标分区大小较小,则会出错。除非Clonezilla将来有基于文件的功能。或许...
据我所知,文件是指向一个或多个连续块(或簇)的指针列表。在不了解文件系统的情况下,软件如何知道哪些块正在使用?
答案1
简单回答:不。
对于任何数据结构都是如此。如果你不理解数据结构,你就无法在其中找到任何东西。
出于数据恢复的目的,有一些工具可以扫描数据(驱动器)并搜索它理解的签名(例如 jpeg 文件的开头)。一个示例工具是摄影
这种技术可以让软件在不了解文件系统的情况下找到一些文件。但它很混乱且不可靠。该技术不能很好地处理碎片,并且仅适用于某些文件类型。它通常会导致文件损坏。
有一些特定于文件系统的克隆工具。例如,如果您知道分区类型是 ext2/3/4,您可以使用类似的工具e2图像在不使用内核文件系统驱动程序的情况下复制文件。
您还可以在使用clonezilla 进行克隆之前调整文件系统的大小。例如:使用调整2fs大小首先缩小文件系统。
除此之外,您唯一真正的选择是挂载文件系统并使用cp
、tar
或复制文件rsync
。
关于 CloneZilla 不实施调整大小的决定: 文件系统通常非常复杂。有一些更简单的,但 ext2/3/4、reiserfs 等都不是简单的。
从文件系统中解析足够的信息以确定它正在使用哪些块可能很简单。有些文件系统甚至有一个漂亮整洁的表,只是标记哪些块被使用/不使用。解析它根本不需要文件知识。
例如,ext3 默认使用 4096 字节的块和 32,768 块的块组。每个 128MiB 块组包含一个“数据块位图”,显示该组中的哪些块正在使用中(请参阅参考)。因此,在不了解文件本身的情况下,程序可以解析只是哪些块正在使用中。
然而,调整文件系统的大小需要更丰富的知识。在不了解 ext2 等细节的情况下,可能的障碍包括
- 无法更新交叉引用指针或指向/来自元数据的指针
- 无法更新校验和
- 无法正确更新块使用位图
对于天真的开发人员来说,以破坏文件系统或破坏元数据的方式实现调整大小是非常容易的。