什么是 mkisofs?
mkisofs (Make ISO File System) 是一个经典的命令行工具,用于根据指定的目录结构创建符合 ISO 9660 或 Rock Ridge 扩展标准的 CD/DVD 映像文件(通常为 .iso 文件)。

重要提示:mkisofs 已经被一个更现代、功能更强大的工具 genisoimage 所取代,在大多数现代 Linux 发行版(如 Ubuntu, Debian, CentOS, Fedora)中,mkisofs 实际上只是 genisoimage 的一个符号链接或软链接,它们的用法和选项基本相同,虽然 mkisofs 这个名字仍然被广泛使用,但背后执行的是 genisoimage 程序。
主要用途
- 制作数据光盘:将你的文件和文件夹制作成一个标准的 ISO 镜像文件,以便刻录到 CD 或 DVD 上。
- 制作启动盘:结合引导文件(如
isolinux或eltorito格式的引导映像),可以创建可启动的安装盘或恢复盘(许多 Linux 发行版的安装 ISO 就是这样制作的)。 - 归档和分发:将一组文件打包成一个单一的、跨平台兼容的文件,方便通过网络分发。
基本语法
mkisofs [选项] -o <输出文件名.iso> <源目录>
[选项]:各种控制镜像行为的参数。-o <输出文件名.iso>:指定生成的 ISO 文件的名称,这是必需的选项。<源目录>:包含你想要打包到 ISO 中的所有文件的根目录。
常用选项详解
以下是一些最常用和最重要的选项:
输出和基本选项
-
-o, --output <filename>:指定输出的 ISO 文件名。mkisofs -o my_files.iso /path/to/my/files
-
-v, --verbose:显示详细的创建过程,对于调试问题非常有用。
(图片来源网络,侵删)mkisofs -v -o my_files.iso /path/to/my/files
-
-r, --rock:强烈推荐使用,启用 Rock Ridge 扩展,这允许:- 保留 Unix/Linux 风格的文件所有者和权限信息。
- 支持长文件名(最多 255 个字符)。
- 支持符号链接。
- 在 Unix、Linux 和 macOS 系统上,挂载此 ISO 时能正确显示文件属性。
-
-J, --joliet:强烈推荐使用,启用 Joliet 扩展,这允许:- 支持长文件名(最多 64 个字符,路径最多 120 个字符)。
- 确保 Windows 系统能正确显示所有文件名,即使文件名包含非 ASCII 字符(如中文、日文等)。
最佳实践:通常将
-r和-J一起使用,以确保在 Windows、macOS 和 Linux 上都有最佳兼容性。mkisofs -r -J -o my_files.iso /path/to/my/files
启动盘选项
-b, --boot-load-size <number>:指定引导映像的大小(以扇区为单位)。-b, --boot-info-table:将引导信息写入映像的引导扇区。-no-emul-boot:指示加载器不模拟软盘。-boot-load-segment <number>:指定引导加载程序的加载段。-eltorito-boot <boot_image>:指定 El Torito 引导映像文件(isolinux/isolinux.bin或boot/grub/grub2.img)。-eltorito-catalog <catalog_file>:指定引导目录的文件名(通常是boot.cat)。
制作启动盘的示例:
假设你有一个引导目录 /tmp/boot,里面包含 isolinux.bin 和 isolinux.cfg。

mkisofs -r -J -o install.iso \
-b isolinux/isolinux.bin \
-c boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
/tmp/boot /path/to/installation/files
高级和特殊选项
-
-V, --volume-id <id>:设置卷标(光盘的名称),这个名称在挂载后可以看到。mkisofs -V "My Backup Disc" -r -J -o backup.iso /path/to/backup
-
-A, --application-id <id>:设置应用程序 ID。 -
-publisher <publisher>:设置发布者信息。 -
-p, --preparer <preparer>:设置准备者信息。 -
-iso-level <level>:指定 ISO 9660 的级别。1:最严格的限制,文件名必须是大写字母、数字和下划线,且不超过 8.3 格式(8个字符主名,3个字符扩展名),目录深度不超过 8 层。2:放宽了对文件名的长度限制,但其他限制依然存在。3:最常用的级别,没有文件名长度限制,但文件名仍然必须是大写字母、数字和下划线。这是 Windows 兼容性最好的级别。4:允许小写字母,但兼容性会下降。
注意:如果你使用了
-r或-J选项,这个设置可能会被覆盖或忽略,因为 Rock Ridge 和 Joliet 扩展本身就提供了更灵活的命名规则。 -
-graft-points:允许你将 ISO 中的任意路径挂载到源文件系统上的任意位置,这对于创建非标准目录结构的 ISO 非常有用。# 将 /home/user/docs 挂载到 ISO 根目录的 "Documents" # 将 /etc/passwd 挂载到 ISO 根目录的 "system/passwd" mkisofs -o custom.iso -graft-points \ "/Documents=/home/user/docs" \ "/system/passwd=/etc/passwd"
实际示例
示例 1:创建一个简单的数据备份 ISO
假设你想将 /home/user/documents 目录备份成一个名为 backup_docs.iso 的文件,并确保在 Windows 和 Mac 上都能正常工作。
# 进入你的家目录 cd ~ # 创建 ISO mkisofs -r -J -V "My Documents Backup" -o backup_docs.iso documents/
示例 2:创建一个带有启动信息的安装 ISO
这是一个更复杂的例子,模拟创建一个 Linux 安装盘。
# 假设你的安装文件结构如下:
# /tmp/install/
# ├── isolinux/
# │ ├── isolinux.bin
# │ ├── isolinux.cfg
# │ └── initrd.img
# └── packages/
# ├── package1.rpm
# └── package2.deb
mkisofs -r -J -V "My Linux Installer" \
-o install.iso \
-b isolinux/isolinux.bin \
-c boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
/tmp/install
重要提示和常见问题
-
mkisofsvs.genisoimage:如前所述,它们本质上是同一个东西,如果你遇到 "command not found",你可能需要安装genisoimage包。- 在 Debian/Ubuntu 上:
sudo apt-get install genisoimage - 在 CentOS/RHEL/Fedora 上:
sudo yum install genisoimage或sudo dnf install genisoimage
- 在 Debian/Ubuntu 上:
-
xorriso:对于新的项目,特别是需要创建 UEFI 启动盘时,推荐使用更现代的工具xorriso(它是libburnia包的一部分)。xorriso功能更强大,支持 UEFI 引导,并且是许多现代 Linux 发行版创建官方 ISO 的首选工具。 -
空间不足:
mkisofs需要在你的硬盘上有足够的空间来临时存放将要生成的 ISO 文件的内容,创建一个 4.7GB 的 DVD ISO,你可能需要超过 4.7GB 的可用空间。 -
权限问题:运行
mkisofs的用户需要有读取源目录中所有文件的权限。
mkisofs (即 genisoimage) 是一个非常强大和灵活的工具,用于创建各种类型的 CD/DVD 映像,对于大多数用户来说,-o, -r, -J, -V 这几个核心选项就足以应对日常需求了,如果你需要制作复杂的启动盘,则需要深入研究 -eltorito-boot 等相关选项。
