为什么使用 dd 而不是 cp 来创建启动盘?

为什么使用 dd 而不是 cp 来创建启动盘?

dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=syncdo ie或 do之间有什么区别cp archlinux.iso /dev/sdx && sync,以及使用其中之一的理由吗? (除了dd中漂亮的进度条)

答案1

区别之一是效率,以及速度。例如,您可以逐一获取字节并将它们复制到设备,如果cat它有理想化的实施或者在旧系统中,例如BSD4:

cat archlinux.iso > /dev/sdx

在这些实现中将cat移动每个字节独立。这是一个缓慢的过程,尽管实际上会涉及缓冲区。请注意,现代cat实现将读取块(见下文)。

ddA好的块大小会更快。

它取决于(不受您控制的)和其他缓冲区cp使用的缓冲区大小。cp效率介于理想化实现catdd最佳块大小之间。

在实践中,虽然现代cat,但cp会询问系统首选块大小st_blk大小。请注意,这不一定是最佳块大小

打个比方:就像将一个玻璃杯中的内容物倒入另一个玻璃杯中。

  • 理想化cat会一次滴一滴。

  • dd将使用勺子,并且您准确定义勺子有多大(系统限制)

  • cp现代人cat会使用自己的勺子(stat -f -c %s filename会告诉你它有多大)。

答案2

我使用它主要是因为status=progress你提到的;我能说什么,我很不耐烦,需要知道:-)

即使您忘记添加它并开始作业,您也可以向其发送 SIGUSR1 信号,它会将当前 I/O 统计信息打印到 stderr(除非您重定向它,否则它是您的终端)。

相关内容