Linux dd命令显示进度复制栏以及状态

时间:2020-01-09 10:42:12  来源:igfitidea点击:

我正在使用dd命令进行块级复制,只是发现没有内置的方式可以检查进度。
在将/dev/sda对应到/deb/sdb并在数据通过管道显示时显示进度条时,如何使用Linux或者Unix dd命令?
如何在Linux上监控dd的进度?

dd是一个免费的开源命令行工具,适用于Linux和类似Unix的操作系统。
它主要用于转换和复制文件。
作为主要设计为过滤器dd的程序通常不会提供任何进度指示。
本教程显示如何在Linux操作系统上显示进度复制栏。

Linux dd命令显示进度复制栏以及状态

您需要使用来自coreutils版本8.24或者更高版本的gnu dd命令才能使用以下选项。
使用dd命令显示进度复制栏的语法如下:

dd if=/path/to/input of=/path/to/output status=progress

让我们传递progress选项,以使用GNU dd命令查看定期的传输统计信息:

# dd if=/dev/sda of=/dev/sdb bs=1024k status=progress

无需使用sudo。
我使用sudo是因为我试图读取和克隆U盘。

您如何监视dd的进度?

这是另一个例子。
首先,使用grep命令和hwinfo命令找出您的USB设备名称:

grep -Ff <(hwinfo --disk --short) <(hwinfo --usb --short)

输出示例:

disk:
  /dev/sdc             SanDisk Ultra

接下来,在Linux下卸载设备:

sudo umount /dev/sdc

最后,将一个iso镜像写入名为/dev/sdc的USB设备,并监视dd的进度:

sudo dd if=openSUSE-Leap-15.1-DVD-x86_64.iso of=/dev/sdc bs=4M status=progress

输出示例:

2684354560 bytes (2.7 GB, 2.5 GiB) copied, 1 s, 2.7 GB/s    
967+1 records in
967+1 records out
4056940544 bytes (4.1 GB, 3.8 GiB) copied, 361.614 s, 11.2 MB/s

使用pv命令监视dd命令的进度并查看状态

另一个选择是使用pv命令,该命令允许您通过管道查看数据的进度。

安装pv完成后,执行以下命令以查看状态栏。请注意,如果标准输入不是文件,并且没有使用-s选项指定大小,则进度条无法指示传输完成的程度,因此它将左右移动以指示数据正在移动。它还将显示平均MB/s速率:

pv和dd动作

您可以创建一个进度条并使用对话框命令显示如下:

(pv -n /dev/sda | dd of=/dev/sdb bs=128M conv=notrunc,noerror) 2&gt;&amp;1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0

示例:仅从coreutils版本8.24或者更高版本使用gnu dd命令

这是我的Mac OS X/MacOS的另一个示例:

$ sudo gdd if=ZeroShell-3.6.0-USB.img of=/dev/disk5 bs=1024k status=progress

您如何在Linux上监控dd的进度?

如果您使用的是dd的旧版本或者无法安装pv命令,请在loop/command时尝试以下简单的一线bash shell:

## 1. first start dd as usual ##
sudo dd if=/dev/sdc of=/tmp/demo.img bs=4M
 
## 2. Open another terminal or tab ##
## 3. find pid of dd command ##
pidof dd              ### &lt;--- say pid is 21145
ps aux | grep -w dd
 
## 4. Run bash/sh while loop as follows ##
while sudo kill -USR1 21145 ; do sleep 10 ; done
 
## 5. Switch back to terminal where dd was started ##