监控dd的进度
原文链接
dd允许将硬盘驱动器复制到另一个硬盘驱动器,完全归零硬盘驱动器等。但是一旦启动dd命令,没有什么可以告诉您它的进度。 它只是在光标处,直到命令最终完成。 那么如何监控dd的进展呢?

更新2016 :如果您使用GNU coreutils> = 8.24(默认情况下在Ubuntu Xenial 16.04中),请参阅下面的方法2以获取显示进度的替代方法。

方法1:通过使用pv
安装pv并将其放在仅输入/输出dd命令之间。

注意 :您已经开始使用dd时无法使用它。

从包装说明 :

pv – Pipe Viewer – 是一个基于终端的工具,用于监控通过管道的数据进度。 它可以插入到两个进程之间的任何正常管道中,以直观地指示数据通过的速度,采取的时间,接近完成的时间以及估计完成之前的时间。

安装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将输出传递给stdout:

 pv /home/user/bigfile.iso | md5sum
产量50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06

请注意,在这种情况下, pv自动识别大小。

方法2:添加到dd新status选项(GNU Coreutils 8.24+)
GNU Coreutils 8.24+(Ubuntu 16.04及更新版本)中的dd获得了一个新status选项来显示进度:

例dd if=/dev/urandom of=/dev/null status=progress
产量462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

从HowTo:监控dd的进度

您可以使用kill命令监视dd的进度而不停止它。

要查看dd运行后的进度,请打开另一个终端并输入:

sudo kill -USR1 $(pgrep ^dd)
这将在dd终端窗口中显示dd进度而不会暂停进程。 如果您使用的是BSD或OS X,请使用INFO而不是USR1 。 USR1信号将终止dd。

如果您想定期更新dd进度,请输入:

watch -n5 ‘sudo kill -USR1 $(pgrep ^dd)’
watch会每隔n秒( -n5 = 5秒)探测dd进程并报告而不会停止它。

请注意上面命令中的正确单引号。

一些方便的样本使用与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 dd if=/dev/urandom | pv | dd of=/dev/null dd if=/dev/urandom | pv | dd of=/dev/null 。

我最喜欢克隆磁盘驱动器:

(pv -n /dev/sda | dd of=/dev/sdb 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/

也用于归档自己。

在dd运行时使用Ctrl + Shift + T ,它将输出进度(以字节为单位):

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)
为了完整起见:

GNU coreutils的 8.24版本包含一个dd补丁,用于引入打印进度的参数。

引入此更改的提交有以下评论:

dd:新状态=定期打印统计信息的进度级别

许多发行版,包括Ubuntu 16.04.2 LTS都使用这个版本。

最好的是使用http://dcfldd.sourceforge.net/,它很容易通过apt-get安装

原生进度状态被添加到dd !!!

新版Coreutils(8.24)为dd工具添加了进度状态:

在Xubuntu 15.10上的用法:

打开终端并键入以下命令:

wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xz tar -xf coreutils-8.24.tar.xz cd coreutils-8.24 ./configure && make -j $(nproc)
以root身份运行dd :

sudo su cd src ./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress
您将看到:字节,秒和速度(字节/秒)。

要检查dd的版本:

本机:

dd --version
新:

cd coreutils-8.24/src ./dd --version
如果您已经启动了dd,并且正在编写文件,例如在创建pendrive到磁盘的副本时,可以使用watch命令不断观察输出文件的大小以查看更改并估计完成情况。

watch ls -l /pathtofile/filename
仅查看文件大小(h-human view):

watch ls -sh /pathtofile/filename
dd | pv | dd dd | pv | dd dd | pv | dd triad让我的50GB vm拷贝需要800秒,而不是使用dd的260秒。 有了这个管道,至少,pv不知道输入文件有多大,所以它无法告诉你你有多远,所以没有不好的做法如下 – 并且你获得了一个很好的速度优势:

我会避免任何大的pv,(如果使用Bash):

控制-D dd过程

bg把它放在后台。 观察到bg将为您提供类似[1] 6011输出,其中后一个数字是进程ID。 所以,做:

while true; do kill -USR1 process_id ; sleep 5; done

其中process_id是您观察到的进程ID。 当您看到以下内容时,按下Control-C:

[1]+ Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse -bash: kill: (60111) - No such process
你完成了。

编辑:傻系统管理员! 自动化你的生活,不工作! 如果我有一个我想监视的长dd过程,这里有一个单行程,将为您照顾整个辣酱玉米饼馅; 把这一切都放在一条线上:

dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 b g i d ∣ ∣ b r e a k ; s l e e p 4 ; d o n e 当 然 , 你 可 以 编 写 脚 本 , 也 许 你 的 输 入 文 件 是 bgid || break; sleep 4; done 当然,你可以编写脚本,也许你的输入文件是 bgid∣∣break;sleep4;done当然,你可以编写脚本,也许你的输入文件是 1,输出文件是$ 2。 这留给读者练习。 请注意,在杀死之前你需要那么小的睡眠,否则当它还没有准备好时,可能会试图向dd发送信号。 根据需要调整您的睡眠(甚至可以完全取消第二次睡眠)。

Bash- FTW!

dd将硬盘驱动器复制到另一个硬盘驱动器并监控dd的进度相关推荐

  1. dd转换和复制,数据恢复等。

    来自 维基百科.http://zh.wikipedia.org/zh-cn/Dd_(Unix) dd是一个Unix和类Unix系统上的命令,主要功能为转换和复制文件.[1] 在Unix上,硬件的设备驱 ...

  2. 计算机硬盘驱动器的作用,如果计算机硬盘驱动器损坏了,有什么帮助吗?为什么有人买了坏硬盘?注意第四个目的!...

    硬盘是计算机中重要的硬件之一. 它是存储硬件. 当前,市场上的主流硬盘分为固态硬盘和机械硬盘. 写入速度慢,但是容量大且价格便宜. 用作存储的硬件必须整天处理系统数据. 硬盘也有使用寿命. 超过使用寿 ...

  3. 从软盘硬盘驱动器中提取扇区_硬盘驱动器诊断工具如何知道某个扇区是否损坏?...

    从软盘硬盘驱动器中提取扇区 No one likes to think about a hard-drive going bad much less experiencing trouble with ...

  4. ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串

    题目描述 有一字符串,包含n个字符. 写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 6 abcdef 3 样 ...

  5. 将磁盘上的一个文本文件的内容复制到另一个文件中

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p198 8.1.2 上级实训内容 [实训内容2]将磁盘上的一个文本文件的内容复制到另一个文件中 #in ...

  6. mysql innodb 数据复制_快速将InnoDB表复制到另一个实例

    此过程演示如何将常规InnoDB表从正在运行的MySQL服务器实例复制 到另一个正在运行的实例.可以使用具有微小调整的相同过程在同一实例上执行完整表还原. 在源实例上,创建一个表(如果不存在): my ...

  7. C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy...

    static void Main(string[] args){int[] src = new[] { 1, 2, 3, 4, 5, 6 };const int destLen = 4;//目标数组大 ...

  8. Linux 将文件夹下的所有文件复制到另一个文件里

    如何将文件夹/home/work下的文件复制到/home/temp里面? 使用命令: cp -R /home/work/* /home/temp *表示所有文件 但是/home/work 下的隐藏文件 ...

  9. 把一个ListT的数据复制至另一个ListT

    把一个数据集List<T>复制至到另一个数据集List<T>. 方法一,可以使用循环,然后把每一个T添加至另一个集合中去: public void ListDemo(){var ...

最新文章

  1. 第四节、逆矩阵与转置矩阵
  2. mysql题目(二学年)
  3. MyBatis开发Dao的方法
  4. 哲学家就餐问题php代码,Python实现哲学家就餐问题实例代码
  5. Linux简介之——目录与文件管理
  6. 基于python的查重系统_答案在这!如何快速的通过论文查重检测?
  7. 又又叒更新,Win 12要来了?
  8. “企业知识产权管理与预警”培训活动在省技术产权交易市场成功举办
  9. 每日冲刺报告——Day2(Java-Team)
  10. 机架式服务器可以安装win7系统,Win7 32位系统怎么安装电音
  11. 使用Echarts绘制力导向图
  12. 读书笔记(10)网络规划与设计
  13. 计算机控制原理中雷达天线,相控阵雷达工作原理
  14. 动词ing形式的5种用法_动词ing形式的用法及变化规则.
  15. ABYY FineReader PDF软件最新15个人​版安装下载步骤教程
  16. express+socket.io 共享session
  17. 运维工程师岗位职责、职业路线和常用工具
  18. 2017年Q1中国无线路由器市场研究报告
  19. LeetCode刷题之---上一个排序
  20. 小白兔写话_看图写话小白兔

热门文章

  1. 51单片机 智能婴儿监护系统
  2. spring quarts 任务调度
  3. MIPI CSI接口调试方法: data rate计算
  4. ubuntu,你改变了我的人生
  5. 05-04 求负数二进制中1的个数
  6. java中rank函数_排位函数PERCENTRANK如何使用
  7. oralce函数 STDDEV([distinct|all]x)
  8. React-Native进阶_3.触摸高亮显示TouchableHighlight
  9. 编程的几种境界与招式
  10. \x 和 0x 的区别