‘dd’命令是否花费太长时间?

‘dd’命令是否花费太长时间?

我设置dd将较小的系统 40.00GB 硬盘 (/dev/sda) 克隆到通过 USB 读卡器 (dev/sdb) 连接的新的较大的 111.00GB 硬盘上,这已经持续了两个小时。新硬盘上的活动计显示它正在执行某项操作。但 CPU 只有 20% 左右。这件事什么时候才能完成?我应该重新启动该过程吗?

答案1

将来你应该使用它pv来获取正在运行的进度条。

sudo apt-get install pv

安装后pv,假设您想将 20GB 的驱动器克隆/dev/foo到另一个驱动器(20GB 或更大!)/dev/baz

sudo dd if=/dev/foo bs=4M | pv -s 20G | sudo dd of=/dev/baz bs=4M

需要注意的重要一点:该bs=4M参数将 dd 操作的块大小设置为 4MB,急剧地提高整个过程的速度。并且参数-s 20G告诉pv您此操作预计有多大,因此它可以为您提供预计到达时间以及当前速度。

我爱得pv太深了,这可能应该是违法的。

请注意,虽然这种方式从左到右的顺序很直观、简洁,但如果你谈论的是真正快速的数据流,那么从 STDOUT 传输数据可能会带来性能损失。以下语法更快,如果你正在查看每秒几百 MB 的移动速度:

pv -s 20G < /dev/foo > /dev/baz

-s 20G是可选的,如果您确实知道流有多大(或大约有多大),它可以pv为您提供完成时间的估计。如果没有这个,pv将尝试找出数据集的大小(如果可能的话)(例如,它知道文件有多大),但如果不能(例如使用块设备,而不是文件),它只会告诉您传输速率,而不会猜测需要多长时间。

答案2

您可以通过发送 SIGUSR1 信号来查看它已经复制了多少数据以及传输速率:

kill -SIGUSR1 $(pidof dd)

对于复制活动,您受到设备 I/O 速度的限制,因此 CPU 不应该完全负载,所以不必担心。

答案3

我过去曾使用过 pv 以及(ps 和 kill),正如其他答案中所建议的那样,但最近我一直在使用它,dc3dd它产生相同的结果,同时在整个过程中提供进度报告。

您可以使用以下命令检查它是否已安装:which dc3dd

如果没有,你可以使用以下命令安装sudo apt-get install dc3dd

命令开关类似于 dd(用于克隆,但擦除更简单一些)。

对于你的情况我会使用命令dc3dd if=/dev/sda of=/dev/sdb

编辑:

最新版本dd来自coreutils 包ddUbuntu 16.04 及更高版本中包含的 8.24+ 版本包含一个状态参数。您可以通过将开关添加status=progress到命令行来实现相同的结果dd

例子:dd if=/dev/zero of=/dev/null count=1000 status=progress

答案4

您也可以使用 ddrescue:

sudo ddrescue -v /dev/sda /dev/sdb

v 代表详细。

相关内容