有没有一种方法可以获取 Linux 中 DD 的百分比?

有没有一种方法可以获取 Linux 中 DD 的百分比?

事情是这样的。

我通过 Linux Live USB 启动了服务器上驱动器的备份。我开始使用命令ddvanilla; just复制第一个驱动器sudo dd if=/dev/sda of=/dev/sdc1,然后我记起这只会让控制台空白,直到它完成。

无论如何,我需要对同一个驱动器运行不同的备份,因此我也启动了那个备份,sudo dd if=/dev/sdb of=/dev/sdc3 status=progress然后我得到了一行文本,显示当前传输速率以及字节数的进度。

我希望有一种方法可以显示备份的百分比,而不是计算 1.8TB 中备份了多少字节。有没有比 status=progress 更简单的方法?

答案1

查看此问题的答案[1]

pv

例如你可以使用pv 在你开始之前

sudo apt-get install pv    # if you do not have it
pv < /dev/sda > /dev/sc3   # it is reported to be faster
pv /dev/sda > /dev/sc3     # it seems to have the same speed of the previous one
#or 
sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3  # Maybe slower 

输出[2]

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

笔记:
尤其是对于大文件,您可能希望查看man dd并设置加速硬件所需的选项,例如bs=100M设置缓冲区、oflag=sync计算写入的有效字节数,也许direct......
该选项-s仅接受整数参数1.8T-->1844G
从第一行就可以注意到,您dd根本不需要。


kill -USR1 pid

如果你已经启动命令dd,一旦你确定了它的 PID(Ctrl- Z+bg并且你读到了,或pgrep ^dd...),你可以发送一个信号USR1(或SIGUSR1,或SIGINFO见下文)并读取输出。
如果程序的 PID 是 1234,

kill -USR1 1234

dd将在 STDERR 终端上回答类似以下内容

4+1 records in
4+0 records out
41943040 bytes (42 MB) copied, 2.90588 s, 14.4 MB/s

警告:在OpenBSD下,你可能需要提前检查kill[3] : 改用
kill -SIGINFO 1234
它存在名为 的 sigaction SIGINFOSIGUSR1在本例中,应该终止该程序(dd)...
在 Ubuntu 下使用-SIGUSR110)。

答案2

我处理这类事情的首选工具是progress

这个工具可以描述为微小的, Dirty, Linux-and-OSX-Only C 命令,用于查找当前在系统上运行的 coreutils 基本命令(cp、mv、dd、tar、gzip/gunzip、cat 等)并显示 百分比复制的数据。它还可以显示预计时间吞吐量,并提供了“类top”模式(监控)。

“<code>进度</code> 正在进行”屏幕截图

它只是扫描/proc有趣的命令,然后查看目录fdfdinfo查找打开的文件并寻找位置,并报告最大文件的状态。

它非常轻,并且几乎与任何命令兼容。

我发现它特别有用,因为:

  • pv与管道或相比dcfldd,我不必记住在启动操作时运行不同的命令,我可以在事后监控内容;
  • 与 相比kill -USR1,它几乎适用于任何命令,我不必总是仔细检查手册页以确保我没有意外地终止副本;而且,当不带参数调用时,它会显示当前正在运行的任何常见“数据传输”命令的进度,所以我甚至不必查找 PID,这一点很好;
  • 与之相比pv -d,我不再需要查找 PID。

答案3

运行dd,然后在单独的 shell 中调用以下命令:

pv -d $(pidof dd) # root may be required

这将使 pv 获取进程所有打开的文件描述符的统计信息dd。它将向您显示读取和写入缓冲区所在的位置。

答案4

以百分比形式计算,你需要做一些数学运算,但你可以以人类可读的形式获取 dd 的进度,即使在已经开始之后,也可以通过以下方式获取kill -USR1 $(pidof dd)

当前 dd 进程将显示类似以下内容:

已复制 11117279 字节(11 MB,11 MiB),13.715 秒,811 kB/s

相关内容