dd 能做什么而 pv 不能做什么?

dd 能做什么而 pv 不能做什么?

我经常在网上看到将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

没有干净的方法可以通过重定向/管道来实现这一点。

相关内容