dd 能做什么而 pv 不能?

Dre*_*pin 6 linux command-line dd disk-image

我一直在网上看到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
Run Code Online (Sandbox Code Playgroud)

pv你可以通过单独使用来实现同样的事情

pv /dev/sda > /mnt/backup.img
Run Code Online (Sandbox Code Playgroud)

Fra*_*mas 5

好吧,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
Run Code Online (Sandbox Code Playgroud)

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