当前位置: 首页>>技术问答>>正文


我如何加速完整的磁盘dd?

, , ,

问题描述

我使用此命令在两个相同的驱动器上执行dd

 dd if=/dev/sda of=/dev/sdb bs=4096

两个硬盘驱动器的型号完全相同,都有1TB的存储空间。 /dev/sda使用4096的块大小./dev/sda是本地驱动器,/dev/sdb是远程球童。我或许可以使用以下协议:

  • USB2.0 HighSpeed(目前计划)

  • 千兆Over-The-Network克隆(真的不想尝试这个)

  • USB3.0(如果我找到我的其他驱动器球童)

  • eSATA(如果我发现/购买电缆)

  • SATA(如果我找到/购买电缆,必须爱笔记本电脑CD驱动器)

有没有办法运行这个驱动器副本,花费少于96小时?我愿意使用dd以外的工具。

我需要克隆以下分区(包括UUID)

  • Fat32 EFI分区(*)

  • NTFS Windows分区(*)

  • HFS + OSX分区

  • EXT4 Ubuntu分区(*)

  • 交换分区(*)

*由Clonezilla提供支持


我尝试过Clonezilla(它的速度要快得多),但它不支持我需要的HFS +智能复制。也许最新版本支持这个?

当我完成第一次克隆时,除了HFS +之外,我做了所有分区,并且进行得非常快。 (总共不超过3小时)

最佳解决方法

根据我的经验,我不认为在dd命令行中有更快的速度。调整bs参数可以提高速度,例如,我有2个HDD,我知道它的读/写速度大于100 MB /s所以我这样做:

dd if=/dev/sda of=/dev/sdb bs=100M

还有pv(需要首先安装),它检查两个驱动器上的最快速度,然后继续进行克隆。这当然必须从root完成:

pv < /dev/sda > /dev/sdb

使用PV我得到156 MB /s

除了速度之外,pv的好处在于它显示了自开始和ETA以来的进度,当前速度,时间。关于HFS +我不知道,我只是想帮助”speed”部分。使用pv或非常优化的bs参数,您可以在不到7小时内完成4 TB驱动(6小时50分钟,当前速度为150 MB /s)。

partitioning,hard-drive,dd,ubuntu

我使用您正在使用的连接类型和其他可用的连接类型进行了几项测试。我使用的是华硕Z87 Pro和Intel DZ68DP。这是我的结果,但首先我们需要知道许多传输速率(原始速度)的理论速度就是理论。做真正的测试显示它们是原始速度的40%到80%。此测试可能会根据所使用的设备,连接类型,主板,连接电缆的类型,文件系统类型等而改变。考虑到这一点,这就是我得到的(我只测试了写入设备的速度,读取通常更高):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 

次佳解决方法

问题是您的连接类型和块大小。为了获得最快的结果,您的块大小应该是您通常接收的最低写入速度的一半。这将给你一个安全边际,但仍然允许大量;当然你也需要有足够的ram来保存数据。

Usb 2.0是12兆比特每秒(Mbps),Usb 2.0高速是480 Mbps。这当然是原始速度;在一个字节中有8位和帧开销,以MB /s为单位的可用速度通常是小数位。因此,例如480 raw,变为48MB可用。请记住,这是数学上最好的,在现实世界中它会更低一些。对于usb 2.0高速连接,如果实际存储设备可以等于或超过连接速度,则应该预期大约30-35 MB的最大写入速度。

第三种解决方法

要复制分区批发,请使用cat而不是dd。我不久前运行了benchmarks,在两个磁盘之间复制一个大文件而不是一个分区(在同一个磁盘上,相对时序不同):

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

该基准测试的结论是,dd的块大小选择很重要(但不是那么多),而cat自动找到快速复制的最佳方法:dd只能减慢你的速度。由于块大小较小,dd会浪费时间,导致微小的读写丢失。对于大块大小,一个磁盘保持空闲而另一个磁盘正在读取或写入。当一个磁盘读取而另一个磁盘写入时,实现最佳速率。

要复制分区,使用cp -a复制文件可能会更快。这取决于有多少文件以及文件系统有多少是可用空间。复制文件的开销与文件数大致成比例,但另一方面复制空闲空间会浪费时间。

USB2的最大数据速率略低于50 MB /s,传输1TB可达6-7小时。这假定硬盘速度足以使USB总线饱和;我认为更快的7200转驱动器可以做到但5900rpm可能不会那么快(也许它们用于线性写入?)。

如果任意一个磁盘并行使用,这可能会大大减慢复制速度,因为磁头需要移动。

第四种方法

我同意经过良好调整的dd(‘pv’)或’cat’命令的原始速度很难被击败,但如果复制有任何问题(坏扇区,电源故障,用户错误等),那么你必须重新开始。

我想建议ddrescue – 一个具有dd全速的FOSS工具,但它可以解决磁盘错误,如果发生故障,可以在以后恢复。

第五种方法

我正在将Windows 7从HDD转移到SSD并找到了这个以及其他一些答案……我学到的东西可能对其他人有所帮助。在我的情况下,源驱动器更大,否则我会在/dev /sda工作 – > /dev /sdb设备级别。

Win7及其3个分区……我在usb上使用了Xbuntu 14.04 live cd。弹出胜利计算机的DVD并将SSD放在原位。安装了partclone并尝试了这个:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

Partclone在需要chkdisk在Windows上运行的ntfs上呕吐,因此快速解决了partclone的问题:

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

所有命令都以root身份运行。 Partclone的ncurses UI(-N选项)表示传输速率为7GB /min,最终为5GB /min,相当于83MB /sec。最重要的是partclone不会复制未使用的空间,因此这使克隆速度非常快。

额外潜在的getchyas:

  • 如果您转移到的驱动器以前使用过,它可能有GPT的残余。 Windows 7出厂安装通常是msdos /mbr分区表。您需要从目标驱动器中删除GPT片段。这个Unix & Linux QA帮助了我。你必须在设备上使用gdisk,使用x然后z和是来删除GPT数据并确保你保持MBR。

  • 并且不要忘记如果你没有设备级别dd,你需要使用dd if=/dev/sdb of=/dev/sda bs=446 count=1复制MBR,其中sdb是源或旧驱动器,sda是目标或新驱动器(source)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1459.html,未经允许,请勿转载。