dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=sync
do ie或 do之间有什么区别cp archlinux.iso /dev/sdx && sync
,以及使用其中之一的理由吗? (除了dd中漂亮的进度条)
答案1
区别之一是效率,以及速度。例如,您可以逐一获取字节并将它们复制到设备,如果cat
它有理想化的实施或者在旧系统中,例如BSD4:
cat archlinux.iso > /dev/sdx
在这些实现中将cat
移动每个字节独立。这是一个缓慢的过程,尽管实际上会涉及缓冲区。请注意,现代cat
实现将读取块(见下文)。
与dd
和A好的块大小会更快。
它取决于(不受您控制的)和其他缓冲区cp
使用的缓冲区大小。cp
效率介于理想化实现cat
和dd
最佳块大小之间。
在实践中,虽然现代cat
,但cp
会询问系统首选块大小:st_blk大小。请注意,这不一定是最佳块大小。
打个比方:就像将一个玻璃杯中的内容物倒入另一个玻璃杯中。
理想化
cat
会一次滴一滴。dd
将使用勺子,并且您准确定义勺子有多大(系统限制)cp
现代人cat
会使用自己的勺子(stat -f -c %s filename
会告诉你它有多大)。
答案2
我使用它主要是因为status=progress
你提到的;我能说什么,我很不耐烦,需要知道:-)
即使您忘记添加它并开始作业,您也可以向其发送 SIGUSR1 信号,它会将当前 I/O 统计信息打印到 stderr(除非您重定向它,否则它是您的终端)。