使用 dd 和压缩工具进行分区克隆

使用 dd 和压缩工具进行分区克隆

灾难最近我遇到了这样的情况,我决定开始备份我的数据。我正在寻找克隆分区和磁盘的最佳方法,并遇到了一个问题在 stackexchange 网络的另一个站点上。

第二个答案看起来很有趣,但是在第二部分中,它表明了以下内容:

为了节省更多空间,请预先对要克隆的驱动器/分区进行碎片整理(如果适用),然后将所有剩余未使用的空间清零,以便 gzip 更容易压缩

这似乎是一个耗时的过程,并且可能会缩短硬盘的使用寿命,所以我在想:为什么要将硬盘上未使用的空间清零?为什么不将分区缩小到接近其在磁盘上占用的大小,然后将 dd 与 gzip 结合使用?

例如,如果托管我的 Windows 安装的分区大小为 450GB,使用的数据大小为 80GB,我可以使用 Windows 上的“磁盘管理”将分区缩小 '450 - 80 + 0.5'GB。0.5GB 是为了避免后台进程尝试写入磁盘时出现问题。

然后我可以使用 live linux distro 执行以下命令:

dd if=/dev/hdb | gzip -c  > /image.img.gz

然后我可以返回到 Windows 并扩展分区以声明未分配的空间。

由于我还没有尝试过这种方法,所以我想问:

我是否遗漏了什么/有什么问题?

我询问的原因是我还没有找到任何答案或文章提到这种方法。

我的第二个问题是:现在有没有比 gzip 更好的压缩工具可以用于此目的?

答案1

这似乎是一个耗时的过程,而且可能会缩短硬盘的使用寿命,所以我在想:为什么要将硬盘上未使用的空间清零?为什么不将分区缩小到接近其在磁盘上占用的大小,然后将 dd 与 gunzip 结合使用?

缩小分区是这是一个耗时的过程,因为它需要移动大量数据 - 这些数据通常分布在整个分区中(以避免碎片化)而不是一开始就打包所有文件,因此您越想缩小分区,就越需要将更多的数据物理移动到不同的地方。

超过一定的“已使用”百分比,它甚至可能比清零空白空间还要慢,因为收缩工具需要数据在写入其他地方之前会被破坏,其工作速度将不及 HDD 的一半。

(此外,Windows 通常会拒绝将在线文件系统缩小到超过某个限度 - 例如,如果您从一个 ~1TB 的文件系统开始,即使文件系统接近空,最小值通常也会是 ~450GB。可能需要从 Windows PE 进行离线收缩,甚至从使用 ntfsresize 的 Linux 进行离线收缩,以进一步缩小它。)

两个更好的选择是:

  1. 使用 克隆分区ntfsclone,其行为类似于dd,但它了解 NTFS 空间分配位图,因此它将避免读取 NTFS 认为未使用的任何扇区。结果类似于将文件系统预置为零,但很多速度更快,因为空扇区既不会被写入也不会被读取。

    partclone是一个类似的工具,它支持更多的文件系统,但不幸的是只能输出其专有的图像格式(需要第二次 partclone 调用才能恢复到物理分区),而 ntfsclone 只输出一个可以直接写入新分区的“原始”图像。

    在某些情况下Disk2vhd.exe,您可以使用在 Windows 上运行并始终输出 VHD 或 VHDX 映像文件(用于将物理 Windows 安装转换为 Hyper-V)。VHD(X) 映像是动态分配的,因此它们只占用所需的空间 - 并且可以将它们作为虚拟磁盘附加到任何 Windows 10 系统上。但是,Disk2vhd 没有用于恢复的配套工具VHD 到物理磁盘(尽管这可以使用 qemu-img 来完成)。

  2. 使用 创建文件级映像dism.exe /capture-image,它将输出一个 WIM 存档(与 Windows 安装过程使用的类型相同)——然后可以使用 将其提取到新的 NTFS 分区/apply-image,从而保留 [几乎] 所有 Windows 特定的元数据。

    您可以从 Windows PE 执行此操作,例如通过启动 Windows 安装程序或恢复环境,然后按 Shift+F10 打开命令提示符。

    这种方法避免了任何与调整大小相关的问题(例如,你可以从 1TB 磁盘捕获图像并将其提取到 256GB 磁盘),但它比 ntfsclone 慢,因为你需要一个中间位置来存储图像,并且不清楚它是否真正捕获全部元数据。 (例如,事实证明您需要使用该/EA选项才能包含 WSL1 使用的扩展属性。)

相关内容