我正在寻找一种将单个磁盘驱动器同时克隆到多个磁盘驱动器的方法。
我在 1TB 磁盘上准备了系统映像,将一个磁盘克隆到另一个磁盘需要将近 2 个小时,然后它呈指数增长,例如克隆了 30 个磁盘。
如果可以将一个磁盘克隆到多个目标,这将大大简化整个过程。
另外,有什么可以阻止这种操作的吗?我的意思是,为什么我知道的每个磁盘克隆软件都只支持单个目标驱动器,有什么特殊原因吗?
谢谢!
Dav*_*ett 17
您可以使用 bash 的“进程替换”和 tee 命令来执行此操作:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
Run Code Online (Sandbox Code Playgroud)
或者为了清楚起见(以牺牲一点效率为代价),您可以使最后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
Run Code Online (Sandbox Code Playgroud)
如果您安装了它,您可以使用管道查看器而不是cat
获得有用的进度指示器:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
Run Code Online (Sandbox Code Playgroud)
这只会读取源图像一次,因此源驱动器确实会受到冲击,这可能就是当您尝试通过其他方法多次复制图像时会看到指数级减速的原因。使用tee
上述方法,进程应该以最慢的目标驱动器的速度运行。
如果目标驱动器通过 USB 连接,请注意它们可能都共享总线带宽,因此并行写入多个驱动器可能不会比顺序写入它们快,因为 USB 总线成为瓶颈,而不是源驱动器或目标驱动器。
以上假设您使用的是 Linux 或类似产品(它也应该适用于 OSX,尽管设备名称可能不同),如果您使用的是 Windows 或其他东西,那么您需要不同的解决方案。
网络上的映像与通过 USB 映像许多驱动器存在类似的问题 - 传输通道成为瓶颈而不是驱动器 - 除非您使用的软件支持某种形式的广播或多播传输。
对于dd
方法,你大概可以菊花链netcat
+ tee
+ dd
,像这样每台机器上的进程:
cat
/ pv
/dd
至S的数据nc
到目的地机器1。nc
监听来自源机器的数据并通过管道将tee
其发送到dd
(并因此发送到磁盘)和另一个nc
发送到目标机器 2 的进程。nc
侦听来自目标机器 1 的数据并将其tee
传送到管道,然后将其发送到dd
(并因此发送到磁盘)和另一个nc
进程发送到目标机器 3。nc
从前一台机器上获取数据并通过dd
.这样,假设您的交换机和网卡都协商了全双工链路,您就有可能使用整个网络带宽。而不是源机器发送 10 份数据副本(假设有 10 台目标机器),因此每台机器都被限制为传出带宽的 1/10,它只发送 1 个。每台目标机器正在获取一份数据副本并将其发送出去再次。您可能需要调整的缓冲区的大小设置pv
,nc
并dd
以更接近最佳的实用性能。
如果你能找到一些只支持多播的软件,那会容易得多(而且可能会快一点)!但以上是我可能愚蠢到足以尝试的那种hacky解决方案......
另一个想法。如果驱动器映像压缩得很好(如果它的大块全是零的话),即使一次发送到许多目的地,源机器的传出带宽也不会成为问题。只需先压缩图像,使用tee
+将其传输到任何地方nc
,然后在目的地(网络nc
-> -> 解压缩器dd
-> -> 磁盘)上解压缩。
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 应该可以做到这一点,记住要小心你的驱动器号!
归档时间: |
|
查看次数: |
25626 次 |
最近记录: |