0

0

如何在Linux中创建ISO镜像 Linux mkisofs命令使用

P粉602998670

P粉602998670

发布时间:2025-08-25 08:54:02

|

914人浏览过

|

来源于php中文网

原创

使用mkisofs或genisoimage可创建ISO镜像,基本命令为mkisofs -o 输出文件 源目录,常用参数包括-r(Rock Ridge扩展)、-J(Joliet扩展)、-V(设置卷标)等以增强兼容性;制作可启动ISO需添加-b、-c、-no-emul-boot等参数指定引导信息,并可用isohybrid生成支持USB启动的混合镜像;注意源路径、文件名编码、权限及磁盘空间问题,生成后应挂载验证内容完整性。

如何在linux中创建iso镜像 linux mkisofs命令使用

在Linux中创建ISO镜像,最直接的方法就是使用

mkisofs
命令。这个工具能够将你指定的文件和目录打包成一个符合ISO 9660标准的文件系统镜像,方便刻录到光盘或制作虚拟光驱文件。

解决方案

要使用

mkisofs
(或者在很多现代Linux发行版上,它实际上是
genisoimage
的一个软链接或别名,功能基本一致),基本命令结构非常简单。你只需要告诉它输出文件的名字,以及你想要打包的源目录或文件。

一个最基础的例子,假设你想把

/home/user/my_data
这个目录下的所有内容打包成一个ISO文件:

mkisofs -o my_data.iso /home/user/my_data

这条命令会创建一个名为

my_data.iso
的文件,其中包含了
/home/user/my_data
目录下的所有内容。但通常,我们还会加上一些参数来增强兼容性和功能性:

  • -o <文件名>
    :指定输出的ISO文件名。这是必须的。
  • -r
    -r
    :启用Rock Ridge扩展。这对于Linux系统非常重要,它允许ISO文件支持长文件名、UNIX文件权限、符号链接等特性。我个人在制作Linux系统或数据ISO时,几乎总是会加上这个,不然文件名可能会被截断或者权限丢失,挺麻烦的。
  • -J
    :启用Joliet扩展。这个主要是为了Windows系统兼容性,它也支持长文件名,但编码方式和Rock Ridge不同。如果你希望这个ISO在Windows和Linux下都能良好读取,通常
    -r
    -J
    会一起用。
  • -V <卷标>
    :设置ISO的卷标(Volume ID),也就是你在文件管理器里看到的“光盘名称”。
  • -allow-lowercase
    :允许文件名中包含小写字母。默认情况下,ISO 9660标准会把文件名转换为大写,加上这个可以保留原始大小写。
  • -U
    :允许文件名中使用任何字符,包括非标准字符。慎用,可能会导致兼容性问题。
  • -graft-points
    :这个参数非常灵活,允许你在ISO内部创建复杂的目录结构,或者从不同位置添加文件。比如:
    mkisofs -o custom.iso -r -J \
    -graft-points \
    /my_iso_root/file1=/path/to/real/file1 \
    /my_iso_root/subdir=/path/to/another/directory

    这会把

    file1
    放到ISO的根目录下的
    my_iso_root
    里,把
    another/directory
    的内容放到
    my_iso_root/subdir
    里。

所以,一个比较通用的打包命令可能是这样:

mkisofs -o my_archive.iso -r -J -V "MyDataArchive" /path/to/source_directory

执行完后,你可以用

ls -lh my_archive.iso
查看文件大小,或者用
mount -o loop my_archive.iso /mnt
来挂载它,看看里面的内容是否符合预期。这是我每次制作完ISO后必做的一步,确保万无一失。

mkisofs
genisoimage
有什么区别?

这个问题其实挺有意思的,也常常让人感到困惑。简单来说,

mkisofs
是最初由Joerg Schilling开发的
cdrtools
软件包中的一个核心工具。而
genisoimage
则是
mkisofs
的一个分支(fork),主要是由Debian项目维护的。

为什么会有分支呢?这背后有一些关于软件授权和开发理念的分歧。不过对于我们普通用户来说,最重要的区别是:

  • 功能上:在绝大多数常用功能上,
    mkisofs
    genisoimage
    是高度兼容的。它们的命令行参数和行为几乎一致。你用
    mkisofs
    能做的事情,通常用
    genisoimage
    也能做,反之亦然。
  • 可用性:在许多现代Linux发行版(特别是基于Debian的,比如Ubuntu)中,你安装的包可能默认提供的就是
    genisoimage
    ,而
    mkisofs
    可能只是一个指向
    genisoimage
    的符号链接。所以,当你键入
    mkisofs
    时,你很可能正在运行
    genisoimage
  • 维护者
    genisoimage
    通常被认为是更积极维护和更新的版本,尤其是在处理一些新的文件系统特性或bug修复方面。

我个人在使用时,不会刻意区分它们。我的习惯是直接敲

mkisofs
,因为这个名字更经典,而且反正系统会帮我找到正确的执行文件。如果你发现你的系统上没有
mkisofs
命令,但有
genisoimage
,直接用
genisoimage
替换
mkisofs
即可。

如何制作一个可启动的Linux ISO镜像?

制作可启动的ISO镜像比制作普通数据ISO要复杂得多,因为它不仅仅是打包文件那么简单,还需要包含一个引导加载程序(bootloader),让计算机知道如何从这个ISO启动。这通常涉及到特定的引导扇区和文件结构。

mkisofs
(或
genisoimage
)提供了
-b
-c
参数来支持可启动ISO的创建:

  • -b <引导镜像路径>
    :指定一个引导镜像文件。这个文件通常是一个特殊的二进制文件,包含了引导加载程序的代码。例如,对于一些基于Syslinux/Isolinux的启动盘,这个文件可能是
    isolinux/isolinux.bin
  • -c <引导目录文件>
    :指定一个引导目录文件。这个文件通常是
    boot.cat
    ,由引导加载程序生成,用于描述ISO中的引导信息。
  • -no-emul-boot
    :表示引导镜像不是软盘模拟模式。对于现代的CD/DVD启动盘,通常会用这个。
  • -boot-load-size <扇区数>
    :指定引导镜像加载的扇区大小。
  • -boot-info-table
    :在引导镜像中写入一个平台信息表,这对于某些引导加载程序是必需的。

核心思想是: 你需要先有一个已经准备好的、包含引导加载器和内核等启动所需文件的目录结构。例如,一个最小化的Linux发行版或Live CD的根文件系统。在这个结构中,通常会有一个专门的目录(比如

isolinux
boot
)存放引导文件。

假设你已经准备好了一个可启动的目录结构,并且知道引导文件在哪里,命令可能看起来像这样:

Chromox
Chromox

Chromox是一款领先的AI在线生成平台,专为喜欢AI生成技术的爱好者制作的多种图像、视频生成方式的内容型工具平台。

下载
mkisofs -o bootable_linux.iso \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-r -J -V "MyBootableLinux" \
/path/to/prepared_bootable_directory

这里

isolinux/isolinux.bin
isolinux/boot.cat
是相对于
/path/to/prepared_bootable_directory
的路径。

一个重要的补充:

isohybrid

仅仅用

mkisofs
创建的ISO,通常只能从光盘启动。如果你想让这个ISO也能写入USB驱动器并从USB启动(也就是所谓的“混合ISO”),你还需要在
mkisofs
命令执行完毕后,使用
isohybrid
工具(通常是
syslinux-utils
包的一部分)对ISO文件进行后处理:

isohybrid bootable_linux.iso

这会在ISO文件中添加必要的MBR(Master Boot Record)和分区表信息,使其既可以作为光盘镜像,也可以作为可启动的USB镜像。我个人在制作任何需要USB启动的Live系统时,都会记得加上这一步,否则制作出来的U盘可能无法正常引导。

制作ISO时常见的错误和注意事项有哪些?

在我使用

mkisofs
的过程中,遇到过一些反复出现的“坑”和一些值得注意的地方:

  1. 源文件路径问题

    • 相对路径与绝对路径:如果你在
      mkisofs
      后面直接跟一个目录名,比如
      mkisofs -o my.iso my_dir
      ,那么
      my_dir
      下的内容会直接放在ISO的根目录。但如果你写成
      mkisofs -o my.iso ./my_dir
      ,效果是一样的。最容易犯错的是,如果你想把
      my_dir
      下的内容放到ISO的某个子目录下,你需要用
      -graft-points
      ,或者更简单地,直接切换到
      my_dir
      的父目录再执行命令。
    • 权限问题:确保你用来制作ISO的源文件和目录是可读的。如果某些文件权限不对,
      mkisofs
      可能会报错或者直接跳过那些文件。
  2. 文件名和编码

    • 大小写和特殊字符:ISO 9660标准对文件名有严格限制。虽然
      -r
      (Rock Ridge)和
      -J
      (Joliet)扩展解决了大部分问题,允许长文件名和更多字符,但如果你不加这些参数,或者源文件名中包含非常规的字符(比如一些非UTF-8编码的字符),可能会导致文件名被截断、乱码或者无法识别。我的习惯是,只要是给Linux或Windows用的,
      -r -J
      基本是标配。
    • Windows兼容性:即使加了
      -J
      ,某些在Linux下合法的特殊字符在Windows下可能仍然不被接受,比如文件名中包含冒号(:)。
  3. 大文件支持

    • 虽然现代的ISO文件系统扩展(如Rock Ridge和Joliet)已经支持超过2GB的文件,但早期的ISO 9660标准有2GB的文件大小限制。在极少数情况下,如果你处理的文件非常大,并且目标系统非常老旧,可能需要注意这一点。不过现在这已经不是一个普遍问题了。
  4. 输出文件大小和磁盘空间

    • 制作ISO是一个I/O密集型操作,而且输出的ISO文件大小会接近源数据的总大小。在执行命令前,务必检查你的目标分区是否有足够的空闲空间来存放生成的ISO文件。我遇到过几次因为磁盘空间不足导致命令失败的情况。
  5. 验证的重要性

    • 生成ISO后,不要直接就拿去用。最保险的做法是先验证它。
      • 挂载检查
        sudo mount -o loop your_image.iso /mnt/iso_mount_point
        ,然后进入
        /mnt/iso_mount_point
        查看文件内容是否完整、正确。
      • 校验和:计算ISO文件的MD5或SHA256校验和(
        md5sum your_image.iso
        ),这对于分发和验证文件完整性非常有用。
  6. 日志输出

    • mkisofs
      在执行过程中会输出很多信息,包括它正在处理的文件、遇到的警告等。仔细阅读这些输出,它们通常会告诉你是否有什么地方出了问题,比如文件被跳过,或者文件名被修改了。

总的来说,

mkisofs
是一个非常强大且灵活的工具,掌握了它的基本用法和一些常用参数,就能应对绝大多数ISO制作需求了。遇到问题时,查阅它的man page(
man mkisofs
)通常能找到答案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1496

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1170

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

835

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

463

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2362

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

874

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

1976

2023.08.28

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

1670

2023.08.30

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号