zzxworld

使用 dd 命令制作系统 USB 启动盘

U 盘已经是目前主流的系统安装方式,所以各种制作 USB 启动盘的软件也很多。如果你和我一样使用的是 Linux 或是 macOS 这种「类 Unix」操作系统,其实不太需要使用专门的 USB 启动盘制作软件,一个 dd 命令就能搞定。

在 Linux 系统使用 dd 命令

比如我要制作一个 Debian 系统的 USB 启动 U 盘,只需要先下载好 iso 格式的镜像文件,然后插入 U 盘,再通过下面的命令就可以制作好启动 U 盘了。

dd if=~/Downloads/debian-11.3.0-amd64-netinst.iso of=/dev/sdb

命令参数很简单。if 指定了系统镜像文件地址,of 指定了 U 盘位置。在 Linux 系统上,可以通过 fdisk -l 命令来获取到 U 盘的地址。执行命令前请仔细核对 U 盘地址,如果输错了地址会导致一些不可逆的数据损失。

除了 ifof 这两个必要的参数外,dd 命令另外一个有用的选项是 bs。通过它可以手动指定操作数据块的大小。取值通常为 4K1M 这种在计算机上衡量数据大小的单位。使用合适的数据块大小可以提升 dd 命令的执行效率,不过这没有一个通用的最优值。简单来说,这个参数在不同的系统和硬件上,最优取值是不一样的。如果在意 dd 命令的执行效率,可能需要自己通过 time 前缀命令来记录使用不同取值后的执行时间,然后挑选出一个最优取值。我个人不太在意快慢,所以通常会使用 1M。加上这个参数后的 U 盘启动盘命令如下:

dd if=~/Downloads/debian-11.3.0-amd64-netinst.iso of=/dev/sdb bs=1M

dd 命令默认是静默执行的,如果想要知道执行过程中的进度信息,可以使用 status 选项:

dd if=~/Downloads/debian-11.3.0-amd64-netinst.iso of=/dev/sdb bs=1M status=progress

在 macOS 系统使用 dd 命令

macOS 基于 BSD 系统,和 Linux 系统同属于「类 Unix」系统。在 macOS 系统中也可以使用 dd 命令,不过在使用方式上存在一些细微区别。

首先是在获取 U 盘路径上需要使用 diskutil 命令:

diskutil list

在使用 dd 命令写入映像文件前,还需要先用 diskutil 命令取消 U 盘的挂载,否则会出现 Resource busy 的错误:

diskutil unmountDisk /dev/disk2 

/dev/disk2 为 U 盘路径,请替换为自己实际的 U 盘路径。

然后才可以使用 dd 命令。不过要注意在 macOS 上不支持 status 进度参数。另外 bs 参数的单位需要小写。比如上面在 Linux 系统中使用的 bs=1M 就要替换为 bs=1m

最后

如果想要更深入的了解一下 dd 命令,可以参阅下面这篇文章: