方法 1:使用pv

方法 1:使用pv

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 的进度

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$)'

watchdd将每 -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++ ,它将输出进度(以字节为单位)ShiftTdd

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)

相关内容