我正在开发一款软件,用于将一块硬盘克隆到其他几块硬盘上。我想一次性将内容克隆到最多 23 个驱动器上,使用dd
将分区从源克隆到目标sudo dd if=/dev/sdb1 of=/dev/sdc1 bs=4096 conv=notrunc,noerror
,然后重复此命令sdd1
,sde1
等等……
但是,传输速率对于应用程序的需求来说太低了。通常情况下,良好的传输速度约为 100 MB/s,但它会降到 20 MB/s,这大大减慢了传输速度。
它只允许我一次克隆最多 12 个磁盘。因此,我将克隆过程分为第一步克隆到 12 个磁盘,第二步克隆剩余的磁盘。但这也不会提高速度。
我想知道在这两个步骤之间我是否可以做些什么。
答案1
我一直使用 tee 来指定多个目标,尽管我不建议超过可用核心的数量。dd 在资源使用方面相当密集。
cat source.dd | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
几年前,我曾这样做过,在 USB2 端口上大量复制一些 4GB 的 USB 记忆棒。时间已经过去很久了,所以我不记得我使用的实际来源,但很可能是https://superuser.com/questions/145516/cloning-single-disk-drive-to-multiple-drives-simultaneously它使用几乎相同的代码。
答案2
您只是受到计算机 PCI 总线内部传输速率的限制。如果您想要更高的速度,则必须停止使用 PC 并升级到服务器硬件。有关更多信息,请参阅英特尔的规格表适用于 C220 系列芯片组。
此外,您不需要开发该软件,因为它已经存在:CloneZilla 服务器。但是,这个是通过网络工作的,所以你需要一个非常快的服务器,有大量的内存来缓存所有内容,高速以太网或多个千兆卡,以便能够同时为您想要映像的所有 PC 提供服务(不要忘记高速以太网交换机)。
如果您仍然坚持开发自己的内部解决方案,我们将需要更多有关您要完成的任务的背景信息,例如将参数添加--sparse
到dd
命令中可能大大加快速度!其他选项可能是partclone
或ddrescue
甚至是 LVM 快照,但所有这些都取决于您的使用情况。