克隆U盘时使用cp和dd有什么区别?

MrW*_*rWm 13 command-line partitioning dd cp

我发现至少有两种方法可以克隆 U 盘:(以/dev/sdb/dev/sdc为目标,以目标为目标)

  1. 克隆与cp

    sudo cp /dev/sdb /dev/sdc
    
    Run Code Online (Sandbox Code Playgroud)
  2. 克隆与dd

    sudo dd if=/dev/sdb of=/dev/sdc bs=4096
    
    Run Code Online (Sandbox Code Playgroud)

这两个命令之间是否有任何显着差异,为什么 dd 优于 cp?

mur*_*uru 17

在这种情况下,不同之处在于dd限制为一次读取 4096 字节的块,因为您使用了bs=4096. 可能的效果是这dd将比 慢得多cp。尝试使用更大的块大小 ( 10M, 50M?)。

最适合当前设备的特定缓冲区大小可能与cp's(或cat's)不同。您无法轻松控制cp的缓冲。dd的效用在以下情况下大放异彩:

  • 您有非常大的设备要复制,因此尝试确定最佳块大小是值得的。
  • 您只需复制磁盘的一部分。您可以指定count限制复制的块数。
  • 您想恢复中断的副本。您不能使用cp,但您可以dd通过使用seekskip选项尝试使用。
  • 您想将其通过管道传输到某些东西的标准输入(不可否认,cat在这里也可以使用):

    dd if=/dev/sda bs=10M | ssh host dd of=/dev/sdb
    
    Run Code Online (Sandbox Code Playgroud)

dd在这篇 Unix 和 Linux 帖子中有用性进行了很好的讨论: dd vs cat — dd 现在仍然相关吗?