dd 报告的实际速度是多少?

dd 报告的实际速度是多少?

我在做的时候一直认为:

dd if=/dev/sdx of=/dev/sdy

命令完成后显示的报告,例如:

79304319+0 records in
79304319+0 records out
40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s

包含与以下各项之间最慢的速度相对应的速度:

  • 输入的读取速度,
  • 输出的写入速度,
  • 读和写之间发生了什么,

也就是说,如果我将读取速度为 5 MB/s 的 USB 驱动器中的数据复制到 SSD,则dd实际上会报告 5 MB/s,与 SSD 的速度无关。

在实践中,我正在复制连接到 USB 2 的磁盘(检查了两次,手册说它是 USB 2.0,甚至精确到 480 Mbps 的连接速度),并注意到报告的dd速度从 65 到 88 MB/s 不等,高于最高速度60MB/s用于 USB 2.0。

那里发生了什么?

速度是由dd读取速度和写入速度相加得出的吗(这意味着实际速度约为 40 MB/s,这样更有意义)?


附加信息:我正在制作一个硬盘的副本,该硬盘的坏扇区数量不断增加,以便有一个可以进行实验的克隆。复制整个磁盘后,报告的速度确实比预期要高:

3902854784+0 records in
3902854784+0 records out
1998261649408 bytes (2.0 TB) copied, 26040.5 s, 76.7 MB/s

鉴于该命令仅针对前几(2 到 3)GB 重复。我检查了一遍,复制的磁盘是正确的,而且主板不支持USB 3(并且没有额外的USB 3 PCI-e卡)。

hdparm的结果更奇怪:

$ hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   13498 MB in  2.00 seconds = 6755.77 MB/sec
 Timing buffered disk reads: 486 MB in  3.00 seconds = 161.77 MB/sec

$ hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   15058 MB in  2.00 seconds = 7536.75 MB/sec
 Timing buffered disk reads: 418 MB in  3.01 seconds = 138.91 MB/sec

$ hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   15038 MB in  2.00 seconds = 7527.54 MB/sec
 Timing buffered disk reads: 386 MB in  3.01 seconds = 128.38 MB/sec

答案1

除非您指定oflag=directconv=fsync,否则内核会缓冲数据,因此dd一旦内核接受了最后一个数据(这可能是在数据到达驱动器之前几秒钟),内核就会认为数据已完成。对于少量数据,这可能会给吞吐量估计带来重大误差。

答案2

一般来说,dd显示整个传输所花费的时间,速度是“数据量除以所花费的时间”。基本上它和你应该得到的一样time dd ...,没有魔法。

40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
40603811328 / 459.645 / 1000 / 1000 = 88.3373

也许您在某个时刻取消了 dd 并重新启动它,此时大部分数据已经被缓存,因此缓存会扰乱您的统计数据?您可以尝试hdparm -tT /dev/disk粗略估计实际驱动速度。

对于USB2来说,速度确实值得怀疑,希望大家不要误用错误的设备。

相关内容