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

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

我正在使用以下命令在两个相同的驱动器上执行操作dd

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

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

  • USB2.0 HighSpeed(目前计划)
  • 千兆网络克隆(真的不想尝试这个)
  • USB3.0(如果我找到其他驱动器托架)
  • eSATA(如果我找到或购买电缆)
  • SATA(如果我找到/购买电缆,一定会喜欢笔记本电脑 CD 驱动器)

有没有办法在不到 96 小时的时间内运行此驱动器复制?我愿意使用除 之外的其他工具dd

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

  • Fat32 EFI 分区 (*)
  • NTFS Windows 分区 (*)
  • HFS+ OSX 分区
  • EXT4 Ubuntu 分区 (*)
  • 交换分区 (*)

*由 Clonezilla 支持


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

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

答案1

根据我的经验,我认为命令行中没有比 更快的东西了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是显示进度、当前速度、自开始以来的时间和预计到达时间。关于 HFS+,我不知道,只是想在“速度”方面提供帮助。使用pv或非常优化的bs参数,您可以在不到 7 小时内完成 4 TB 的驱动器(当前速度为 150 MB/s,则需要 6 小时 50 分钟)。

在此处输入图片描述

我对您正在使用的连接类型和我可用的其他连接类型进行了几次测试。我使用的是华硕 Z87 Pro 和英特尔 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 

答案2

要复制整个分区,使用cat而不是dd我跑了基准不久前,在两个磁盘之间复制一个大文件而不是一个分区(在同一个磁盘上,相对时间不同):

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 rpm 驱动器可以做到这一点,但 5900rpm 可能没那么快(也许它们适合线性写入?)。

如果任一磁盘同时使用,这会大大减慢复制速度,因为磁盘头需要移动。

答案3

问题在于您的连接类型和块大小。为了获得最快的结果,您的块大小应该是您通常收到的最低写入速度的一半。这将为您提供安全余量,但仍允许较大的数字;当然,您还需要有足够的 RAM 来保存数据。

Usb 2.0 为 12 兆比特每秒 (Mbps),Usb 2.0 高速为 480 Mbps。这当然是原始速度;由于每字节有 8 位,并且有帧开销,可用速度(MB/s)通常比小数多一位。因此,例如原始速度 480,可用速度为 48MBs。请记住,这是数学上的最佳值,在现实世界中会略低一些。对于 usb 2.0 高速连接,您应该期望最大写入速度在 30-35 MBs 左右,前提是实际存储设备可以达到或超过连接速度。

答案4

我正在将 Windows 7 从 HDD 移至 SSD,并找到了这个和其他一些答案...我学到的东西可能会对其他人有所帮助。就我而言,源驱动器更大,否则我就会在 /dev/sda -> /dev/sdb 设备级别上工作。

Win7 及其 3 个分区...我在 USB 上使用 Xbuntu 14.04 live cd。弹出 Win 计算机的 DVD 并将 SSD 放在其位置。安装了 partclone 并尝试了此操作:

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

Partclone 在 Windows 中需要在 ntfs 上运行 chkdisk 时出错,因此快速修复让 partclone 满意:

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

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

其他潜在问题:

  • 如果您要传输到的驱动器以前使用过,则它可能有 GPT 的残留。Windows 7 出厂安装通常是 msdos/mbr 分区表。您需要从目标驱动器中删除 GPT 碎片。这Unix 和 Linux 质量保证帮了我大忙。您必须gdisk在设备上使用,使用 x,然后使用 z,然后使用 yes 来删除 GPT 数据,并确保保留 MBR。

  • 不要忘记,如果你不执行设备级 dd,则需要使用以下命令复制 MBR
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    其中 sdb 是源或旧驱动器,sda 是目标或新驱动器来源

相关内容