我想首先创建一个外部USB硬盘(ext2分区)的图像,其中包含大量数据(50 - 70 GB)到内部IDE / SATA磁盘,然后以最快的方式将该图像文件同时恢复到多个USB硬盘。
是否有任何应用程序或脚本可用或任何建议?
Windows也没关系,我可以使用IFS安装这些驱动器。
我想首先创建一个外部USB硬盘(ext2分区)的图像,其中包含大量数据(50 - 70 GB)到内部IDE / SATA磁盘,然后以最快的方式将该图像文件同时恢复到多个USB硬盘。
是否有任何应用程序或脚本可用或任何建议?
Windows也没关系,我可以使用IFS安装这些驱动器。
Answers:
您可以使用 tee
输出到多个文件,和 bash
进程替换以重定向文件的内容 dd
它可以直接写入块设备。
要复制 /dev/sda
在文件中制作它的图像:
dd if=/dev/sda of=./drive.image
并将该图像复制到许多驱动器:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
请注意,最后一项是管道而不是重定向,因为tee也会将其输入发送到starndard输出。如果你想在命令行上保持所有的重定向相同,你可以将它发送到/ dev / null虽然这显然效率低一点,因为你运行一个额外的进程并通过一个额外的进程发送一个额外的所有信息副本管道只丢弃它:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/null
虽然与许多USB驱动器上的整体操作相比,性能影响可能很小。
您也可以将一个驱动器直接复制到许多其他驱动器,跳过图像文件,但是如果您希望以后制作更多副本(或者想要现在制作更多副本,那么使图像文件更有效率)由于数量有限或港口):
cat /dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/sde
您可能还想要替换 cat
同 pv
(如果你还没有安装它,你会在大多数标准存储库中找到它,否则你可以从中获得它 这里 并在上面编译它以获得在复制操作正在进行时显示的进度表,如下所示:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/null
需要注意的重要事项: 根据USB驱动器的连接方式以及它们单独写入数据的速度,您可能会发现这比单独复制到每个驱动器要快一点。 USB总线或集线器上的带宽在连接到它的设备之间共享,因此,除非您有多个USB控制器将成为多个驱动器的主要瓶颈(除非每个驱动器写入速度慢,当然,基于闪存的数量很多) USB棒是)。有些主板有效地拥有多个USB控制器,所以即使没有额外的控制器,也可能并非所有端口都共享相同的总线,但如果您通过集线器运行它们,它们将会 无疑 所有人都共享相同的I / O带宽。
话虽如此,即使由于总线争用而在挂钟时间方面进程很少或根本没有更快,你仍然可以在单个命令中完成它的优势(如果使用单个进度条) pv
)。