Dd

為什麼使用 dd 而不是 cp 來創建啟動盤?

  • March 2, 2022

dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=sync做 ie或做之間有什麼區別cp archlinux.iso /dev/sdx && sync,以及使用一個而不是另一個的理由嗎?(除了 dd 中漂亮的進度條)

一個區別是效率,因此是速度。例如,您可以一個一個地獲取字節並將它們複製到設備,cat如果它具有理想化的實現或在舊系統中,例如 BSD4

cat archlinux.iso > /dev/sdx

在這些實現cat中,將獨立移動每個字節。這是一個緩慢的過程,儘管在實踐中會涉及到緩衝區。請注意,現代cat實現將讀取塊(見下文)。

有了一個好的塊大小dd,它會更快。

cp它取決於cp(不受您控制)和其他緩衝區使用的緩衝區大小。效率介於理想化實現catdd最佳塊大小之間。

在實踐中,雖然現代cat並且cp會詢問系統首選的塊大小st_blksize。請注意,這不一定是最佳塊大小

打個比方:這就像把一個杯子裡的東西倒進另一個杯子裡。

  • 理想化cat會一次做一滴。
  • dd將使用勺子,並且您可以準確定義勺子的大小(適用系統限制)
  • cp現代cat會使用自己的勺子(stat -f -c %s filename會告訴你它有多大)。

引用自:https://unix.stackexchange.com/questions/558262