使用 dd 进行克隆 - 对于生成的图像大小,非分区空间是否被视为与文件系统内的空白空间相同?

使用 dd 进行克隆 - 对于生成的图像大小,非分区空间是否被视为与文件系统内的空白空间相同?

注意:全部 = 我发现的全部

所有“使用 dd 克隆”信息都讨论了 dd 如何复制所有“空白空间”,但实际上所有的写入似乎都在响应文件系统填满整个磁盘的情况。

如果我有两个分区,它们加起来只占 160G 磁盘的 10%,那该怎么办呢?对于老式的“dd if=/dev/sda of=disk.img”运行,映像大小是多少:16G 还是 160G?

除非我瞎了,使用 DD 进行磁盘克隆没有此信息。

答案1

sda整个磁盘是 160 GB

sda1是该磁盘上的第一个分区 - 8 GB(例如)

sda2是该磁盘上的第二个分区 - 8 GB(例如)

如果您只想克隆 16 GB 的文件系统数据,请使用ddonsda1sda2

要将数据恢复到其他磁盘,您必须先对该磁盘进行分区(最好与原始磁盘相同)。我估计您可能还必须重新安装引导加载程序。

例如,参见http://www.backuphowto.info/linux-backup-hard-disk-clone-dd

答案2

首先我想回答你的问题:

如果我有两个分区,它们加起来只占 160G 磁盘的 10%,那该怎么办呢?对于旧的“dd if=/dev/sda of=disk.img”运行,图像大小是多少:16G 还是 160G?

如果您在 /dev/sda(即整个 160G 的磁盘 sda)上运行 dd,则 disk.img 将为 160G,因为 dd 只会逐个复制 sda 上的所有位。/dev/sda1 和 /dev/sda2 之后的空间是否分区都没有区别!不幸的是,如果硬盘之前曾经装满数据,即使您尝试压缩 disk.img,它也不会真正变小,因为磁盘表面上的“空白空间”实际上不是空的,而是包含以前使用的文件系统和数据的剩余位。不过,我不知道从未使用过的全新硬盘的情况如何!

此外,我想回答您对 RedGrittyBrick 的回答的评论。如果您的目标是制作最小尺寸的全磁盘映像,那么可能的解决方案如下

  1. 使用空白空间创建第三个分区,例如:/dev/sda3。无需(但也没有坏处)用文件系统格式化它,因为该分区将在下一步中被零覆盖,从而消除了再次格式化文件系统的需要

  2. 现在用零填充整个分区:dd if=/dev/zero of=/dev/sda3。这将花费相当长的时间,而且 dd 没有进度条,所以请耐心等待。在某个时候,dd 将报告磁盘已满,一段时间后将退出并显示有关复制位的最终报告

  3. 如果您不想该分区存在,您可以现在再次删除它。零将保留在磁盘表面!

  4. 现在按照您最初的计划制作单个磁盘映像:dd if=/dev/sda of=disk.img。顺便说一下:不需要任何其他 dd 参数,例如conv=notrunc等,正如许多其他论坛所报告的那样。notrunc 有 根本无事可做与我们在这里要做的事情(将磁盘克隆到文件)不同,它用于完全不同的事情(简而言之:在已经存在的文件中插入数据,如果新添加的数据比现有文件短,则不切断现有文件的剩余部分)。不要听信那些认为 notrunc 是尤其需要当将磁盘克隆到文件时,这完全是胡扯

  5. disk.img 再次为 160GB,这并不奇怪。但现在与之前的区别在于,如果您压缩 disk.img,这次它的大小将几乎与 /dev/sda1 和 /dev/sda2 压缩映像的总和相同,因为剩余未分区磁盘表面上的零将压缩到几乎为零!

  6. 好了,现在你有了整个磁盘的单文件完整磁盘映像,但它几乎只有 /dev/sda1 和 /dev/sda2 实际使用的数据区域的大小

  7. 如果您尚未创建 /dev/sda1 和 /dev/sda2,您也可以先使用 dd 将零写入整个磁盘 /dev/sda,或者使用将零写入整个磁盘的磁盘擦除工具等,然后再创建 /dev/sda1 和 /dev/sda2。结果应该相同

HTH!谨致问候 地球上一位匿名的互联网原住民

相关内容