同时将单个磁盘驱动器克隆到多个驱动器


12

我正在寻找一种将单个磁盘驱动器同时克隆到多个磁盘驱动器的方法。

我已经在1TB的磁盘上准备了系统映像,将一个磁盘克隆到另一个磁盘需要大约2个小时,然后以指数级增长,以便克隆30个磁盘。

如果可以将一个磁盘克隆到多个目标上,则将大大简化整个过程。

另外,是否有某些东西可以阻止这种操作?我的意思是,为什么我所知道的每个磁盘克隆软件仅支持单个目标驱动器,这是否有某些特殊原因?

谢谢!

Answers:


17

您可以结合使用bash的“进程替换”和tee命令来执行此操作:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

或者为了清楚起见(以牺牲一点效率为代价),您可以使最后dd一个与其他人相同,然后将tee的stdout发送到/ 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,像这样每台机器上的进程:

  1. 源机cat/ pv/ dd至S的数据nc到目的地机器1。
  2. 目标计算机1 nc侦听了源计算机中的数据,并对其进行管道传输,然后将数据通过管道tee依次发送到dd(然后发送到磁盘),并将另一个nc进程发送到目标计算机2。
  3. 目标机器2 nc侦听了来自目标机器1的数据,并对其进行了管道传输,然后将数据通过管道tee依次发送到dd(然后发送到磁盘),并将另一个nc进程发送给目标机器3。
  4. 依此类推,直到最后一台仅nc从前一台计算机中提取数据并将其通过传送到磁盘的计算机dd

这样,假设您的交换机和网卡都已协商了全双工链路,则可能会使用全部网络带宽。而不是由源计算机发送10个数据副本(假设有10个目标计算机),因此每个设备都限于发送带宽的1/10,而仅发送1。每个目标计算机都将数据的一个副本发送出去。再次。您可能需要调整的缓冲区大小设置pvncdd接近最佳的实际性能。

如果您找到了一些仅支持多播的软件,那将容易得多(并且可能快一点)!但是以上是我可能很愚蠢的尝试尝试的那种棘手的解决方案...

重新编辑

另一个想法。如果驱动器映像压缩良好(如果其中很大一部分充满零,它将很好压缩),即使一次发送到许多目的地,源计算机的传出带宽也不会成为问题。只需先压缩图像,然后使用tee+ 将其传输到任何地方nc,然后在目标位置(网络nc->->解压缩器dd->->磁盘)解压缩。


感谢您对该过程的深入说明。真的很有帮助。我现在正在探索网络克隆选项(使用多播),如果失败,我将进一步研究DD向量。
mr.b 2010年

您并不是说驱动器已连接到不同的计算机……这使情况完全不同!
marcusw

同时,这最接近本地计算机和计算机网络一对多磁盘复制。感谢您的深入解释!
2010年

对于基于Linux的网络克隆选项,您可能需要考虑使用Clonezilla。它可以通过多播以及包括DD在内的多个本地克隆选项进行克隆。
user35060 2013年

5

在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应该做到这一点,并记住要小心您的驱动器号!


1
真正。在问这个问题之前,我做了一些研究,但是我有兴趣听别人的经验。DD是一个很棒的小工具,但是:1)它缺乏对实际数据内容的了解(它也会逐个扇区地复制空白空间),以及2)有人报告了对多个驱动器进行克隆时的性能问题通过这种方式。还有其他想法吗?
mr.b 2010年

“ [...] / dev / sdb是要克隆的硬盘驱动器,/ dev / sdc,/ dev / sdb和/ dev / sde是要克隆到的驱动器[...]” ---> “ [...并且记住要小心您的驱动器号!” :DI同意!!!
dag729 2010年

1
@ mr.b:1)在我看来,逐位复制比采用潜在危险的快捷方式要好。2)嗯,我能想到的最好的方法是弄乱dd的源,使其同时复制到多个位置,但是复制慢速的方法会更快。
marcusw

您确定of=-吗?-Just会为我创建一个输出文件,而不是输出到stdout。这可以通过仅保留of选项来解决。
从这里开始

那样使用“ tee”是行不通的。请参阅:joshhead.wordpress.com/2011/08/04/…– user35060 2013
16:37

2

我所知道的是,有一些东西叫做硬盘复制器。这些是特殊的设备,可以同时将HD复制(复制)到多个驱动器。也许这篇文章对您有所帮助。


是的,我知道这些设备的存在。然而,他们的一切,但价格便宜,尤其是在我的零预算案:(感谢提他们,虽然。
mr.b

1
虽然成本不完全为零,但如果您有一台备用机器(具有适当的电源),您可以征服并买得起几个便宜的SATA控制器(我的家用机器中有两个端口的SATA控制器,花费了一个tenner)如果您可以找到一些有效地支持“从单一来源读取,写入多个来源”的文件,则可以制作自己的简单复制机并使用dd + tee方法或其他软件。
David Spillett 2010年

(这是我以为您在最初的回答中尝试做的事情。)
David Spillett 2010年

1

由于尚无人提及,因此我将提及Clonezilla及其服务器版。(不幸的是,它似乎没有直接链接,但是您可以在网站的左侧导航菜单中找到“服务器版” ...)

我对Clonezilla Live Edition感到很幸运,但是还没有尝试使用Server Edition。虽然看起来很漂亮。


根据您提供的反馈,我将把Clonezilla作为第二好的解决方案。
user35060 2013年


1

我在网上找到了2个与此相关的有用链接。一个使用dd而不带cat的磁盘进行复制:

dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility

另一个链接进一步扩展了该链接,以显示进度表:

dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics


0

我想扩展一下大卫的答案

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

drive.image实际上是另一种设备,像/dev/sde

其次,通过dd适当的bs设置,命令将使幅度更快地工作。我曾经bs=64k看到复制40 Gig分区的速度提高了6倍,从1小时到10分钟。

因此,最终命令将如下所示:

pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

如果您的源是驱动器而不是文件,它将看起来像这样:

pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd


0

并行硬盘复制是计算机取证中的常见任务。 dc3dd手册页)是专用工具,它允许将单个源并行复制到多个目标,并且类似于UNIX dd,并且of=允许多个选项。

也可以启用源卷和副本的散列以验证其完整性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.