我怎么知道`dd` 克隆需要多长时间?

Lui*_*ado 30 command-line clone dd

我必须dd有几个 1TB 硬盘。他们花了几个小时来克隆,我想知道是否有任何方法可以知道他们的进展速度,他们做了多少以及他们复制其余部分需要多长时间。

我只能看到运行命令的终端。ps -e至少当我运行时,我知道dd从显示的 CPU 使用情况来看它正在工作,但我无法知道它已经完成了多少或需要多长时间才能完成。

有点让我发疯。

Lui*_*ado 31

典型的。当我问一些问题时,我会以某种方式找到答案(即使我找了几个小时......但神奇的是我在创建问题后找到了 -.- )。无论如何,对于我dd --help在帮助结束时检查的内容(我不敢相信我没有看到)以下内容:

Sending a USR1 signal to a running `dd' process makes it
print I/O statistics to standard error and then resume copying.

   $ dd if=/dev/zero of=/dev/null& pid=$!
   $ kill -USR1 $pid; sleep 1; kill $pid
   18335302+0 records in
   18335302+0 records out
   9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
Run Code Online (Sandbox Code Playgroud)

这意味着在另一个终端中,您将使用要检查的 DD 的进程 ID 运行以下行。例如,在我的情况下是进程 ID 4112。您可以通过键入ps -e并查找 dd 或仅ps -e|grep dd查看前面的数字来查看进程 ID 。记下那个数字,然后在另一个终端窗口中输入kill -USR1 4112; sleep 1;这将给我时间,自它开始以来经过的秒数以及复制了多少。至少现在我知道以大约 40MB/s 的速度复制 1TB 的信息需要大约 8 个小时。

  • 这在 OSX 上不起作用,它只是杀死了它......这很不幸,因为它已经运行了一个小时...... :( (6认同)
  • 不要运行`kill $pid`。这可能会终止复制过程。@Luis 你的回答有点误导。你需要做的就是运行`ps -a | grep dd` 然后将信号发送到获得的pid`kill -USR1 123456789`(其中“123456789”是pid)。 (2认同)
  • @nux 嗨,朋友,感谢您的评论。在这种情况下,它直接来自手册页。以防万一,对于 DD,当它收到虚拟 USR1 时,它的行为就像一个更详细的日志,因此它输出示例中提到的最后一行。 (2认同)
  • @balupton“**在 BSD 系统上,您需要发送 INFO 信号**。Linux 没有 SIGINFO,而是使用 USR1。” [参见此处](http://unix.stackexchange.com/a/11264/154671) (2认同)

Sep*_*ero 23

将该程序pv用于任何管道流以查看传输的数据的实时报告。它可以用于任何使用管道的应用程序。它也是查看 USB、外部磁盘、联网计算机等设备的传输速率的绝佳工具。

dd if=infile | pv > outfile
Run Code Online (Sandbox Code Playgroud)

或者直接复制,只需使用这个:

pv infile > outfile
Run Code Online (Sandbox Code Playgroud)

例子:

sudo pv /dev/sda1 > /home/user/sda1.ext4.img
Run Code Online (Sandbox Code Playgroud)

  • @LuisAlvarado,是的,您可以克隆这样的光盘。Mech 使用另一个分区作为输出,但您也可以输出到一个名为“sda.img”的常规文件 (2认同)

小智 15

关于使用 kill 在 Mac 上显示信息,您必须将-INFO标志而不是-USR1标志传递给它。请记住,它会在您的 dd 进程正在运行的终端中显示信息,因此如果您打开一个新选项卡进行输入kill -INFO $PID$PID您使用的数字在哪里ps -e | grep dd),您将必须切换回dd正在运行的选项卡看到输出。

现在,如果我能弄清楚如何将该输出显示为 GB 或 MB 而不是纯字节...