我正在寻找一种可以同时将单个磁盘驱动器克隆到多个磁盘驱动器的方法。
我已经在 1TB 磁盘上准备了系统映像,将一个磁盘克隆到另一个磁盘需要将近 2 个小时,然后线性增加,以便克隆 30 个磁盘。
是否可以将一个磁盘克隆到多个目标驱动器同时地?
答案1
您可以使用 bash 的“进程替换”与 tee 命令一起执行此操作:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
或者为了清楚起见(以牺牲一点效率为代价),你可以使最后一个dd
以与其他相同的方式调用,并将 tee 的标准输出发送到 /dev/null:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null
如果你已经安装了,你可以使用管道查看器而不是cat
获得有用的进度指示器:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
这只会读取一次源映像,因此源驱动器确实会遭受磁头抖动,这可能是当您尝试通过其他方法多次复制映像时,速度会呈指数级下降的原因。使用tee
上述方法,进程应该以最慢的目标驱动器的速度运行。
如果您的目标驱动器是通过 USB 连接,请注意它们可能都共享总线带宽,因此并行写入多个驱动器可能不会比按顺序写入更快,因为 USB 总线成为瓶颈,而不是源驱动器或目标驱动器。
以上假设您正在使用 Linux 或类似系统(它也应该适用于 OSX,尽管设备名称可能不同),如果您正在使用 Windows 或其他系统,那么您需要不同的解决方案。
编辑
通过网络进行成像与通过 USB 对许多驱动器进行成像存在类似的问题 - 传输通道而不是驱动器成为瓶颈 - 除非您使用的软件支持某种形式的广播或多播传输。
对于该dd
方法,您可能可以在每台机器上以菊花链形式netcat
+ tee
+dd
进程,如下所示:
- 源机器
cat
/pv
/dd
s 将数据传到nc
目标机器 1。 - 目标机器 1 正在
nc
监听来自源机器的数据,并通过管道tee
将其发送到dd
(然后发送到磁盘)另一个nc
进程,该进程将发送到目标机器 2。 - 目标机器 2 正在
nc
监听来自目标机器 1 的数据并通过管道将其tee
发送到目标机器dd
1(然后发送到磁盘),然后另一个nc
进程将其发送到目标机器 3。 - 依此类推,直到最后一台机器从前
nc
一台机器拾取数据并通过 将其发送到磁盘dd
。
这样,假设您的交换机和网卡都已协商全双工链路,则您可能会使用全部网络带宽。源计算机不会发送 10 份数据副本(假设有 10 台目标计算机),因此每份数据仅限于传出带宽的 1/10,而是仅发送 1 份。每台目标计算机都会获取一份数据副本并再次发送出去。您可能需要调整 的缓冲区大小设置pv
,nc
以dd
更接近最佳实际性能。
如果你能找到一些支持多播的软件,那就很多更容易(可能还更快一点)!但上述方法是一种我可能会愚蠢到尝试的黑客解决方案……
再次编辑
另一个想法。如果驱动器映像压缩得很好(如果其中大部分都是零,那么压缩效果会很好),即使一次发送到多个目的地,源计算机的传出带宽也不会成为问题。只需先压缩映像,使用tee
+将其传输到任何地方nc
,然后在目的地解压缩(网络-> nc
-> 解压缩器-> dd
-> 磁盘)。
答案2
google 上建议的第一个答案(在 Linux 系统上):,dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)
其中 /dev/sdb 是您要克隆的硬盘驱动器,/dev/sdc、/dev/sdb 和 /dev/sde 是要克隆到的驱动器(您可以根据需要添加任意数量的驱动器,只需复制粘贴即可)。LiveCD 应该可以做到这一点,请记住要小心使用驱动器号!
答案3
我所知道的是,有些东西叫做硬盘复制器。这些是特殊的设备,可以同时将硬盘克隆(复制)到多个驱动器。也许本文帮助你。
答案4
如果您使用的是 Mac OS X,则此功能是内置的。从您要提供图像的机器启动多播 asr 会话。从客户端启动到启动盘,打开终端,然后连接到 asr 多播流。免费。