当前位置: 首页>>技术教程>>正文


‘dd’ 命令是否耗时太长?

,

问题描述

我设置了 dd 来将一个较小的系统 40.00GB 硬盘驱动器 (/dev/sda) 克隆到一个新的更大的 111.00GB 硬盘驱动器,它通过 USB 读取器 (dev/sdb) 连接,现在已经运行了两个小时。新硬盘驱动器上的活动计显示它正在做某事。但是CPU只有20%左右。这件事什么时候能完成?我应该 re-start 进程吗?

最佳方案

以后应该使用 pv 来获取运行进度条。

sudo apt-get install pv

安装 pv 后,假设您要将 20GB 驱动器 /dev/foo 克隆到另一个驱动器(20GB 或更大!), /dev/baz

sudo dd if=/dev/foo bs=4M | pv -s 20G | sudo dd of=/dev/baz bs=4M

需要注意的重要部分:bs=4M 参数将 dd 操作的块大小设置为 4MB,这大大提高了整个过程的速度。而 -s 20G 参数告诉 pv 这个操作预计有多大,所以它可以给你一个 ETA 以及当前速度。

我非常喜欢 pv,它应该是非法的。

请注意,虽然这样做从左到右的顺序是直观、美观和整洁的,但如果您谈论的是真正快速的数据流,则传入和传出 STDOUT 的管道可能会导致性能损失。如果您正在考虑移动数百 MB/秒,以下语法会更快:

pv -s 20G < /dev/foo > /dev/baz

-s 20G 是可选的,如果您确实知道流有多大(或大约有多大),它允许 pv 为您提供完成时间的估计。如果没有这个,pv 将尝试找出数据集有多大(例如,它知道文件有多大),但如果不能(例如,使用块设备,而不是文件),它只会告诉你无需猜测事情将需要多长时间的传输速率。

次佳方案

您可以通过向它发送 SIGUSR1 信号来查看它已经走了多远,以便查看它复制了多少数据和传输速率:

kill -SIGUSR1 $(pidof dd)

对于复制活动,您会受到设备 I/O 速度的限制,因此 CPU 不应满载,因此不必担心。

第三种方案

正如其他答案中所建议的那样,我过去曾使用过 pv 以及 (ps and kill),但最近我一直在使用 dc3dd 而不是它产生相同的结果,同时在整个过程中提供进度报告。

您可以检查它是否已经安装:which dc3dd

如果没有,您可以使用 sudo apt-get install dc3dd 安装它

命令开关类似于 dd(用于克隆,尽管擦除更简单一些)。

在你的情况下,我会使用命令 dc3dd if=/dev/sda of=/dev/sdb

编辑:

来自 coreutils package 8.24+ 版本的 dd 的最新版本包含在 Ubuntu 16.04 及更高版本中,包括一个状态参数。通过将 status=progress 开关添加到 dd 命令行,您可以使用 dd 完成相同的结果。

示例:dd if=/dev/zero of=/dev/null count=1000 status=progress

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11919.html,未经允许,请勿转载。