![dd 能做什么而 pv 不能做什么?](https://linux22.com/image/1453708/dd%20%E8%83%BD%E5%81%9A%E4%BB%80%E4%B9%88%E8%80%8C%20pv%20%E4%B8%8D%E8%83%BD%E5%81%9A%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我经常在网上看到将dd
和 结合使用以pv
显示进度的示例...但是,我不明白的是pv
完全可以独立完成任务。那么,为什么还要使用dd
和 呢? 有没有dd
提供一些pv
没有的优势?
同时使用dd
和的示例pv
。其中一些确实很复杂……
dd if=/dev/sda | pv | dd of=/mnt/backup.img
dd if=/dev/sda | pv -s 10G | dd of=/mnt/backup.img
dd if=/dev/sda | (pv -s `fdisk -l /dev/sda | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | dd of=/mnt/backup.img
pv
您可以使用以下方式实现相同的目的:
pv /dev/sda > /mnt/backup.img
答案1
出色地,pv
只是提供了对管道操作的观察,所以真正的问题是,管道/重定向是否等同于dd
。 答案当然是不。
虽然简单的使用情况dd
可能看起来与 IO 重定向或管道类似,但它dd
是一个相当复杂的工具,具有许多与文件数据转换相关的功能(管道几乎不知道文件是什么,更不用说它的字节顺序/编码类型了)而重定向只是推送位,pv
只是观察通过管道的数据,对它的理解仅限于计算字节数。
dd
理解诸如块和地址之类的磁盘结构,而它pv
对此一无所知。dd
在驱动程序级别与内核接口,同时发生pv
在大量 IO 抽象之上。
例如,dd
可以使用以下命令获取磁盘的 MBR 备份(始终在第 63 个块中):
dd if=/dev/sda of=MBR_boot.img bs=512 count=1 skip=62
没有干净的方法可以通过重定向/管道来实现这一点。