genisoimage是用于把目录树转换成 ISO 9660 光盘文件系统镜像的命令行程序,属于 Unix 类系统上的光盘制作工具集 cdrkit。它由 Debian 开发者于 2006 年从 mkisofs 分支而来,改名是为了在许可证争议后与原项目脱钩[1]。该程序支持生成可引导的 El Torito 光盘镜像,以及带 Joliet、Rock Ridge、HFS 等扩展的镜像,生成的文件可再由 wodim 等程序写入 CD 或 DVD 介质。
定义
genisoimage 是一个命令行程序,作用是把指定目录树的内容打包成一个符合 ISO 9660 标准的文件系统镜像,这个镜像写入块设备后即可作为光盘的卷结构使用[2]。它属于所谓的前期制作(pre-mastering)工具,即在刻录之前先把数据组织成光盘可识别的文件系统。
该程序是 cdrkit 工具集的组成部分,cdrkit 是一组运行在 Unix 类系统上的 CD 与 DVD 制作程序,采用 GNU 通用公共许可证第 2 版发布[1]。名称 genisoimage 是 generate ISO image 的缩写,直接说明了它的用途[1]。
原理
genisoimage 读取用户指定的目录树,为该目录树建立索引与目录记录,输出一个二进制镜像文件,其结构与 ISO 9660 文件系统一致。写盘由另外的程序完成:镜像生成后交给 wodim 之类的刻录程序写入 CD 或 DVD 介质。
ISO 9660 本身对文件名和权限的限制较强,genisoimage 通过附加扩展来弥补:Rock Ridge 扩展用于保留 Unix 文件权限、长文件名和符号链接,Joliet 扩展用于在 Windows 环境下呈现较长的文件名,HFS 支持则面向 Macintosh 文件系统[3]。如果只需要知道镜像会占多大空间,可以用 $\texttt{-print-size}$ 选项在不真正生成镜像的情况下算出体积[4]。
与 tar 等归档工具相比,genisoimage 的行为有一个明显区别:它把指定父目录下的文件与子目录直接放在镜像的根目录下,而不会在外面再套一层以父目录命名的目录[4]。
发展历程
genisoimage 的前身是 mkisofs。mkisofs 最初由 Eric Youngdale 编写,后来由 Jörg Schilling 在 cdrtools 项目中维护,James Pearson 等人也参与过贡献[5]。cdrtools 项目的许可证发生变化后,Debian 开发者以当时最后一份明确以 GPL 发布的 cdrtools 版本 2.01.01a08(2006 年 5 月)为基础建立分支,这一分支被命名为 cdrkit[5]。
在分支建立过程中,Debian 一方认为 cdrtools 中部分代码采用的 CDDL 许可证与 GPL 不兼容,因而无法继续分发原软件;原维护者 Jörg Schilling 则否认存在许可证冲突,并认为这一分支在法律上不可再分发。Red Hat 的法务团队与 Schilling 看法不同,指出他未提供许可证或著作权被侵害的证据[1]。Schilling 还表示 cdrkit 重新引入了早期 cdrtools 中已经修复的缺陷,Debian 开发者则认为这些改动是解决既有问题所必需的[1]。
为与原项目脱钩并减少混淆,cdrkit 中的程序被改名,mkisofs 由此更名为 genisoimage;维护者解释说不建立旧名软链接是希望使用者采用新名称,同时便于 cdrkit 与 cdrtools 在同一系统上共存[6]。cdrkit 由 Joerg Jaspert 担任项目负责人与版本发布管理者,其稳定版本 1.1.11 于 2010 年 10 月 17 日发布[1]。
应用
genisoimage 最常见的用途是制作数据光盘镜像和可引导光盘镜像。它支持生成符合 El Torito 规范的可引导 CD,因此常用于制作系统安装盘、Live 光盘等需要在启动时加载引导程序的介质。
该程序随 cdrkit 一同被多个 Linux 发行版收录,Fedora、Gentoo Linux、Mandriva Linux、Ubuntu 等都在其列[1]。不少图形化刻录软件也把它当作后端调用,包括 GNOME 桌面环境默认的 Brasero、KDE 桌面环境默认的 K3b,以及不依赖特定桌面环境的 X-CD-Roast[1]。
cdrkit 包内还附带了若干处理 ISO 镜像的辅助工具:mkzftree 用于生成内容经过压缩的 ISO 9660 镜像,dirsplit 用于把体积较大的目录内容按预设大小拆分成多张盘,geteltorito 则可以从光盘镜像中提取 El Torito 引导镜像。
局限
genisoimage 长期处于事实上的停止维护状态。Debian 的说明指出,该程序既没有新功能,也不再获得缺陷修复,只有在需要使用其 $\texttt{-udf}$ 或 $\texttt{-hfs}$ 选项时才有首选价值[7]。2025 年 9 月,Debian 缺陷跟踪系统中仍有请求将依赖方从 genisoimage 迁移到 xorriso 的报告,理由同样是该程序多年来实质上无人维护。
由于分支后的代码线长期停滞,一些较新的用法在 genisoimage 上无法实现。例如它不支持创建大于 4 GiB 的 ISO 9660 Version 2 镜像,有项目为此改用其他工具。此外,某些旧选项在新版本中被明确标记为不再支持,使用者会遇到因选项失效而无法构建镜像的情况。
在多数使用场景中,尤其是制作可引导 ISO 9660 文件系统、归档和备份,替代方案是 xorriso;通过 xorriso 的 -as mkisofs 兼容模式可以接管 genisoimage 原有的命令行接口[7]。cdrkit 的维护者曾讨论把源代码拆分成多个独立发布包,并逐步替换掉 libschily 等支持库,但 cdrkit 整体仍停留在 2010 年的版本线上[8][1]。
参见
参考资料
- cdrkit [引用日期2026-10-14]
- genisoimage - Creates an image of an ISO9660 filesystem [引用日期2026-10-14]
- mkisofs.1 [引用日期2026-10-14]
- Genisoimage [引用日期2026-10-14]
- Tree - source-git/cdrkit [引用日期2026-10-14]
- debian.net 上的网页 [引用日期2026-10-14]
- Change Details [引用日期2026-10-14]
- debian.net 上的网页 [引用日期2026-10-14]