我设置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 包dd
Ubuntu 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 代表详细。