dd 命令用于转换和复制文件,因为在 Linux 下设备和磁盘镜像都是文件,所以 dd 的主要作用就是操作他们。 dd 功能强大,动辄操作几个 G 的文件,所以很多参数看似冗余鸡肋,实际上是必不可少的。

块大小与个数

在使用 dd 命令时,块大小(block size,通过 bs= 指定)和块个数(通过 count= 指定)是两个非常重要的参数,它们对命令的性能和行为有显著影响。

块大小定义了每次读取或写入操作中处理的数据量。选择适当的块大小对于性能至关重要:

  • 太小的块大小:会导致大量的 CPU 开销和磁盘 I/O 操作。因为对于给定的数据量,当块大小较小时, dd 需要执行更多次的读写操作。
  • 太大的块大小:虽然可以减少读写操作次数,但是可能会引起单次操作的延迟增加,尤其是在物理介质速度较慢或系统资源有限的情况下。极端情况下,如果块大小超出系统或设备的缓冲区容量,可能会导致效率下降或执行失败。
  • 适中的块大小:通常能够获得最佳的速度和 CPU 使用率平衡。常见的选择是 512 字节、4K、1M 等,具体取决于硬件配置和操作的具体情况。例如,对于 USB 驱动器或者 SSD,较大的块大小(如 4M 或 1M)通常会提供更好的传输速率。

把 ISO 写入 USB 驱动器

可以使用如下命令来制作一个 Linux 安装盘(Windows 不可以):

sudo dd bs=4M if=/path/of/some_os.iso of=/dev/sdx status=progress oflag=sync

创建一个固定大小的文件

dd if=/dev/zero of=file.img bs=1M count=1024

使用来自 /dev/zero 的空字节创建一个 1GB 大小的文件。 bs=1M count=1024 指示 dd 使用 1MB 的块大小,复制 1024 个块。