dd
真是个奇迹。它可以让您将一个硬盘复制到另一个硬盘,将硬盘完全清零等等。但是一旦您启动命令dd
,就没有任何内容可以告诉您它的进度。它只是停留在光标处,直到命令最终完成。那么如何监控 dd 的进度呢?
答案1
2016 年更新:如果您使用 GNU coreutils >= 8.24(Ubuntu Xenial 16.04 及以上版本中的默认版本),则只需将其添加status=progress
到 dd 命令中即可。有关详细信息,请参阅下面的方法 2。
方法 1:使用pv
安装pv
并将其放在仅输入/输出dd
命令之间。
笔记:当您已经开始时则无法使用它dd
。
从包裹描述:
pv
- 管道查看器 - 是一种基于终端的工具,用于监控数据通过管道的进度。它可以插入到两个进程之间的任何正常管道中,以直观的方式显示数据通过的速度、花费的时间、距离完成还有多久以及完成所需的时间估计。
安装
sudo apt-get install pv
例子
dd if=/dev/urandom | pv | dd of=/dev/null
输出
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
--size
如果您需要估算时间,可以使用来指定近似大小。
示例:假设从 /dev/sdb 复制一个 2GB 的磁盘
没有的话命令pv
如下:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
命令pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
输出:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
其他用途
当然,您也可以pv
直接使用管道将输出传输到标准输出:
pv /home/user/bigfile.iso | md5sum
输出
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
请注意,在这种情况下,pv
会自动识别尺寸。
方法 2:status
添加新选项dd
(GNU Coreutils 8.24+)
dd
在 GNU Coreutils 8.24+(Ubuntu 16.04 及更新版本)中有一个status
显示进度的新选项:
例子
dd if=/dev/urandom of=/dev/null status=progress
输出
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
答案2
dd
您可以使用命令kill
向进程发送信号来监视其运行进度,而无需停止它。
启动后dd
,打开另一个终端并输入任何一个:
sudo kill -USR1 $(pgrep ^dd$)
或者,如果你使用的是 BSD 或 OS X:
sudo kill -INFO $(pgrep ^dd$)
这将在终端窗口中显示进度,dd
而不会停止进程(通过打印到其 stderr 流)。例如:
# dd if=/dev/urandom of=rando bs=1024 count=1048576
335822+0 records in
335821+0 records out
343880704 bytes (344 MB, 328 MiB) copied, 6.85661 s, 50.2 MB/s
如果您想定期获取进度更新dd
,请输入:
watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'
watch
dd
将每 -n 秒( = 5 秒)探测一次该进程-n5
并在不停止它的情况下报告。
请注意上面命令中的正确单引号。
答案3
一些方便的示例用法,pv
比其他答案更少打字或更多的进步:
首先,您需要安装pv
,命令如下:
sudo apt-get install pv
以下是一些示例:
pv -n /dev/urandom | dd of=/dev/null
pv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror
注意:第一个示例比 少输入 5 个字符dd if=/dev/urandom | pv | dd of=/dev/null
。
我最喜欢克隆磁盘驱动器(用驱动器号替换 X):
(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0
来源:http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
也用于我自己的存档。
答案4
运行时使用Ctrl++ ,它将输出进度(以字节为单位)Shift:Tdd
load: 1.51 cmd: dd 31215 uninterruptible 0.28u 3.67s
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)