CcVHKakalLLOOPPOkKkkKk Asked: 2019-12-21 06:16:42 +0800 CST2019-12-21 06:16:42 +0800 CST 2019-12-21 06:16:42 +0800 CST 为什么使用 dd 而不是 cp 来创建启动盘? 772 dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=sync做 ie或做之间有什么区别cp archlinux.iso /dev/sdx && sync,以及使用一个而不是另一个的理由吗?(除了 dd 中漂亮的进度条) dd cp 2 个回答 Voted Best Answer Eduardo Trápani 2019-12-21T06:56:09+08:002019-12-21T06:56:09+08:00 一个区别是效率,因此是速度。例如,您可以一个一个地获取字节并将它们复制到设备,cat如果它具有理想化的实现或在旧系统中,例如 BSD4: cat archlinux.iso > /dev/sdx 在这些实现cat中,将独立移动每个字节。这是一个缓慢的过程,尽管在实践中会涉及到缓冲区。请注意,现代cat实现将读取块(见下文)。 有了一个好的块大小dd,它会更快。 cp它取决于cp(不受您控制)和其他缓冲区使用的缓冲区大小。效率介于理想化实现cat和dd最佳块大小之间。 在实践中,虽然现代cat并且cp会询问系统首选的块大小:st_blksize。请注意,这不一定是最佳块大小。 打个比方:这就像把一个杯子里的东西倒进另一个杯子里。 理想化cat会一次做一滴。 dd将使用勺子,并且您可以准确定义勺子的大小(适用系统限制) cp现代cat会使用自己的勺子(stat -f -c %s filename会告诉你它有多大)。 user339730 2019-12-26T17:27:44+08:002019-12-26T17:27:44+08:00 我使用它主要是因为status=progress您提到的;我能说什么,我很不耐烦,需要知道:-) 即使您忘记添加它并开始作业,您也可以向它发送一个 SIGUSR1 信号,它会将当前 I/O 统计信息打印到 stderr(除非您重定向它,否则它就是您的终端)。
一个区别是效率,因此是速度。例如,您可以一个一个地获取字节并将它们复制到设备,
cat
如果它具有理想化的实现或在旧系统中,例如 BSD4:在这些实现
cat
中,将独立移动每个字节。这是一个缓慢的过程,尽管在实践中会涉及到缓冲区。请注意,现代cat
实现将读取块(见下文)。有了一个好的块大小
dd
,它会更快。cp
它取决于cp
(不受您控制)和其他缓冲区使用的缓冲区大小。效率介于理想化实现cat
和dd
最佳块大小之间。在实践中,虽然现代
cat
并且cp
会询问系统首选的块大小:st_blksize。请注意,这不一定是最佳块大小。打个比方:这就像把一个杯子里的东西倒进另一个杯子里。
理想化
cat
会一次做一滴。dd
将使用勺子,并且您可以准确定义勺子的大小(适用系统限制)cp
现代cat
会使用自己的勺子(stat -f -c %s filename
会告诉你它有多大)。我使用它主要是因为
status=progress
您提到的;我能说什么,我很不耐烦,需要知道:-)即使您忘记添加它并开始作业,您也可以向它发送一个 SIGUSR1 信号,它会将当前 I/O 统计信息打印到 stderr(除非您重定向它,否则它就是您的终端)。