克隆 USB 驱动器时使用 cp 和 dd 有何区别?

克隆 USB 驱动器时使用 cp 和 dd 有何区别?

我发现至少有两种方法可以克隆 USB 驱动器:(以 USB 驱动器/dev/sdb为源,以 USB 驱动器为/dev/sdc目标)

  1. 克隆cp

    sudo cp /dev/sdb /dev/sdc
    
  2. 克隆dd

    sudo dd if=/dev/sdb of=/dev/sdc bs=4096
    

这两个命令之间是否存在显著差异,为什么 dd 比 cp 更受欢迎?

答案1

在这种情况下,差异在于dd被限制为每次读取 4096 字节块,因为您使用了bs=4096。可能的效果是dd会比 慢得多cp。尝试使用更大的块大小(10M50M?)。

最适合当前设备的特定缓冲区大小可能与cp(或cat)不同。您无法轻松控制 的cp缓冲。dd的实用性在以下情况下非常有用:

  • 你有非常大型设备进行复制,因此值得进行实验来确定最佳块大小。
  • 您只需复制磁盘的一部分。您可以指定count限制复制的块数。
  • 您想恢复中断的复制。您无法使用 执行此操作cp,但您可以尝试使用dd,方法是使用seekskip选项。
  • 您想将其通过管道传输到某些东西的标准输入(诚然,cat在这里也可以工作):

    dd if=/dev/sda bs=10M | ssh host dd of=/dev/sdb
    

dd这篇 Unix 和 Linux 文章很好地讨论了实用性: dd 与 cat — dd 现在还有用吗?

相关内容