资讯动态

从零打造自己的Linux LiveCD:原理、实操与避坑指南

发布时间:2026/9/17 7:57:46 来源:尧图企业网站定制
凌晨两点被电话叫醒说生产环境一台机器起不来数据倒是没丢可系统卡在内核 panic。等我远程上去一看手头既没有安装盘也没有现成的维护系统那一刻是真的体会到什么叫“书到用时方恨少”。后来我养成了一个习惯每配置好一台 Linux 环境就顺手把它做成 LiveCD/LiveUSB 镜像。这个习惯救过我很多次——系统密碼忘了、引导坏了、内核升级翻车、甚至要给好几台配置完全相同的机器批量装机一张自制的 Live 系统就能全部搞定。这篇文章就以“把 Linux 系统做成 Livecd”为主线从原理到实操再到避坑把整条路走一遍。不管你是运维、嵌入式工程师还是喜欢折腾系统的玩家看完都能按步骤做出一个属于你自己的可启动镜像。1. LiveCD 到底能拿来干什么值得不值得自己动手做很多人一听到 LiveCD 就觉得是远古产物毕竟现在装系统都用 U 盘、用网络 PXE光盘早就退环境了。但 LiveCD 这个词在技术圈里其实已经泛指“可启动的 Live 镜像”载体是光盘还是 U 盘根本不重要关键在“Live”两个字不安装在硬盘上插上就能跑跑完不留下痕迹。我自己用下来Live 镜像最核心的几个使用场景是这样的系统救援root 密码忘了、grub 引导坏了、fstab 写错导致开机失败这些情况都可以用 Live 系统启动后挂载硬盘修复。我清理过不少忘记密码的机器流程就是 Live 起来、chroot 进原系统、passwd 重置十分钟搞定。批量部署给十几台配置一样的设备装系统不用一台一台按安装向导点到底。提前定制好一个 Live 镜像里面装好全部软件、配好网络和优化项开机后自动执行部署脚本即可。硬件测试与演示在不确定目标机器硬件环境的情况下Live 系统是最安全的试金石。比如给客户演示软件、测试某台机器的内存和硬盘健康状况都不会污染本机系统。嵌入式与离线环境很多嵌入式设备没有固定硬盘或者需要在产线上快速刷写系统Live 镜像加一个自动化脚本就是一套轻量产线工具。保留当前“顺手”的环境这是我最常做的一件事。把某个阶段配置得非常顺手的系统打包成镜像哪怕后面把系统搞崩了也能随时找回那个“顺手”的状态。这就是自己动手做 LiveCD 的意义所在。官方发行版给的安装镜像里面除了基础系统啥也没有但是你自己做出来的 Live 系统包含的是你需要的驱动、软件、配置、脚本和习惯。换句话说官方镜像是“毛坯房”自己做的是“拎包入住”。在动手之前还有几个概念需要分清否则后面很容易绕晕LiveCD / LiveUSB只读介质上运行的完整操作系统关掉之后所有改动消失。Live 系统持久化允许把改动保存到一个独立分区重启后仍在这是 Live 系统的一个重要变体后面定制章节会专门讲。救援模式某些发行版安装盘里带的一个最小化维护环境功能比 Live 系统轻量得多本质上是安装程序的一个附属工具。可引导镜像泛指任何能启动的镜像文件包括安装镜像、Live 镜像、救援镜像。搞清楚这些之后下面就要进入真正的核心了一个 Live 系统到底是怎么被引导起来的。2. Live 系统的启动链路从固件到根文件系统的完整流程这一节我尽量讲得仔细一点。因为网上很多教程直接就给命令照着敲能出结果但一旦遇到问题就完全不知道从哪里排查。理解了启动链路出问题你才能自己定位。2.1 内核、initramfs 与根文件系统的三角关系任何 Linux 系统启动内核和根文件系统是缺一不可的。正常硬盘安装的系统里内核在/boot/vmlinuz-*根文件系统在一个真实分区上比如/dev/sda2。开机时引导加载器把内核读进内存内核挂载这个分区作为根目录启动接管。Live 系统不一样它没有“真实”的根分区需要先加载 initramfs也叫 initrd在内存里搭一个临时的根环境再由这个临时环境去找到 Live 介质、加载必要的驱动、挂载压缩的根文件系统最后才切到真正的系统根目录。initramfs 在 Live 启动中承担的角色相当于一个“中转站”。内核只负责最基本的硬件初始化和把 initramfs 解压到内存剩下所有和“找到 Live 系统”相关的活都是 initramfs 里的脚本干的。所以 Live 制作的关键之一就是你的 initramfs 里必须包含正确的启动钩子脚本这也是后面用现成工具而不是完全手搓的一个重要原因。2.2 squashfs、overlayfs 和 tmpfsLive 系统的三大支柱先看三个组件的分工squashfs一个只读、高压缩的 Linux 文件系统。Live 系统把整个根文件系统打成一个.squashfs文件放在介质上启动时挂载它。tmpfs基于内存的临时文件系统。Live 系统启动后需要一个可写的目录让程序创建临时文件这个目录通常就是 tmpfs。overlayfs一个联合文件系统可以把一个只读层和一个可写层合并成一个看起来可读写的目录。Live 系统把 squashfs 作为 lowerdirtmpfs 作为 upperdir合起来就是完整的根目录。用一个生活化的类比来解释squashfs 就像一本印刷好的书内容固定、不能涂改tmpfs 像一沓便利贴想写什么写什么但关机就没了overlayfs 则像一块透明玻璃板压在书页上你用笔在玻璃板上写字看起来字就在书页上但书本身一点没变。Live 系统运行过程中所有的“写入”其实都写在了便利贴tmpfs上关机直接扔掉所以 Live 系统能保持每次启动都是原始状态。这个设计有两个很明显的优点体积小整个系统经过压缩一个几个 GB 的安装系统压缩成镜像后可能只有一半大小适合放在 U 盘或光盘上。稳定性高只读层不会因为异常断电被写坏所以 Live 介质寿命很长。2.3 引导加载器与 BIOS/UEFI 双模式现在的新机器基本都是 UEFI 启动但存量设备里还有大量 BIOS 老机器。自己制作 Live 镜像时如果只做了一种引导方式换台机器就可能启动不了。所以成品镜像最好同时支持两种模式BIOS 模式用 ISOLINUX/SYSLINUX 引导读取 isolinux.cfg 配置启动参数。UEFI 模式用 GRUB2 引导读取 grub.cfg 配置启动参数。一个 ISO 镜像里同时放两套引导文件刻录或写入 U 盘后固件会自动选择对应的模式。这也是我推荐用xorriso或grub-mkrescue这类工具生成镜像的原因它们能一次性处理双引导。自己手动拼镜像的话很容易漏掉某个架构的引导文件而且很难排查。启动参数kernel command line也是 Live 系统的灵魂。常见的有rootlive:LABELxxx指定 Live 介质的位置其中 xxx 是卷标。toram把整个 Live 系统加载进内存再运行跑起来之后介质可以拔掉速度也快很多代价是内存占用大。persistence启用持久化把改动保存到持久化分区。到这里Live 系统的基本原理已经清楚了。下面进入选型环节聊聊用哪种姿势把它做出来。3. 方案选型四种常见路线哪种适合你做 Live 镜像的路线没有标准答案关键看你的目标和动手能力。我按从“省事”到“硬核”排一个序你们可以自己对号入座。3.1 路线一直接改造发行版官方 Live 镜像很多主流发行版本来就有官方 Live 镜像比如 Ubuntu、Kali、Debian 的 Live 版本。你不需要从头做只需要把官方镜像里的.squashfs文件解包、加入自己的软件和配置、再重新打包。这个路线的优点在于省事底层的引导配置都已经弄好了你只需要动根文件系统。缺点是官方 Live 镜像的软件集是固定的加太多东西很容易超过介质容量限制而且解包重打包过程中容易出现权限和链接文件问题。适合场景只需要往 Kali 或 Ubuntu Live 里塞几个工具脚本不想折腾底层的人。3.2 路线二用 linux-live 工具包把当前系统压成镜像这条路线是我个人最常用的也是下面实操重点讲的。核心思路很简单在当前正在运行的 Linux 系统上执行一个脚本它会把除了/proc、/sys、/dev等虚拟文件系统之外的整个根目录打包成 squashfs然后配合预设的 initramfs 和引导文件生成 ISO。优点非常明显打包出来的就是当前这个系统的完整状态包括你装过的软件、做过的配置、创建的用户全都原样保留。脚本已经处理好 initramfs 和引导配置出错几率低。适合“环境复制”场景比如我把某个配置好的工作环境保留成镜像随时恢复。缺点也有打包过程会占用大量临时磁盘空间生成大镜像后引导时间相对长而且它是“通用方案”对特殊硬件比如各种显卡、网卡固件不会自动针对性地做优化。但总体而言这是性价比最高的方案。3.3 路线三用发行版构建工具从零定制Debian/Ubuntu 系有 live-buildArch 系有 archiso。这类工具理论上可以定制出一个完全干净的 Live 系统想加什么包就加什么包最终产物是标准的发行版 Live 镜像。这条路线适合要做成“一个自定义发行版”的人或者嵌入式产品。但学习曲线非常陡需要深刻理解 apt 源、依赖关系、引导配置、hooks 脚本等等。我见过不少人用 live-build 折腾了一周最后做出来的镜像还不如直接用路线二省心。3.4 路线四基于 debootstrap/arch-chroot 手工构建完全不依赖现成工具用手工命令把根文件系统 chroot 出来然后手动配置引导、打包 squashfs 文件。这是最硬核的方式也是理解 Linux 系统结构的最快路径但对新手非常不友好。我总结了一个对比表方便选择维度改造官方 Livelinux-live 打包当前系统live-build/archiso手工构建上手难度低低高很高可定制性中等中等偏上高最高是否能保留当前环境否是否否适合场景快速工具盘环境备份/批量克隆定制发行版学习/嵌入式出错风险低低中等高如果你问我的推荐我会说80% 的场景用路线二就够了剩下的用路线一或者路线三。下面我就把路线二的完整实操过程展开讲。4. 动手实操把当前 Linux 系统打包成可启动 ISO开始之前先交代我的实验环境方便你对照发行版Debian 12 / Ubuntu 22.04 均可下面命令通用内核版本5.15磁盘剩余空间至少 10GB这个数字后面解释怎么算出来的目标介质4GB 以上 U 盘4.1 前期准备装工具、算空间、关掉干扰项先安装制作过程中需要的工具sudo apt update sudo apt install -y squashfs-tools rsync mkisofs xorriso isolinux syslinux-common整理一下每个工具的用途squashfs-tools提供mksquashfs命令用来压缩根文件系统。rsync打包时同步根目录文件保留权限、链接、属主。mkisofs或xorriso把打包好的文件和引导文件制作成 ISO。syslinux提供 BIOS 引导所需的 isolinux.bin。isolinux包提供 isolinuxcfg 模板。空间的估算有个公式根目录实际使用量加上 1.5GB 左右的余量就是打包过程中需要的临时空间。比如根目录用了 6GB你最好留出 8–10GB 的剩余空间因为脚本要把文件先复制成中间结构再压缩成 squashfs中间那一步占用的是原始大小。另外一个容易被忽略的准备工作关掉会影响打包的服务和进程。比如 Docker 容器数据量大的话/var/lib/docker会被原样打包进去体积直接爆炸某些数据库服务运行中的缓存也会被复制。我的习惯是制作镜像前先停掉不必要的服务并清理包管理器的缓存sudo apt clean sudo journalctl --vacuum-size50M sudo rm -rf /var/tmp/*这些操作能显著减小镜像体积也能减少打包时因文件不断变化导致的不一致问题。4.2 下载并运行 linux-live 脚本linux-live 是一个开源工具包本质是一个 shell 脚本集合。下载后解压到/opt下sudo git clone https://github.com/Tomas-M/linux-live.git /opt/linux-live不需要安装直接进目录运行cd /opt/linux-live sudo ./build脚本会做以下几件事收集当前内核版本准备对应的 vmlinuz 和 initramfs。用 rsync 把根目录排除虚拟文件系统、临时目录等同步到工作目录。用 mksquashfs 把同步好的根目录压缩成rootfs.squashfs。在指定输出目录生成完整的可引导目录结构。这个过程会比较久取决于你的根目录大小和 CPU 性能。如果根目录有 10GB机械硬盘环境下可能要二三十分钟SSD 会快很多。看到类似下面的输出说明打包进行中Copying /etc ... Copying /usr ... Copying /var ... ... Creating squashfs image...整个过程中不要中断否则工作目录里会有残留需要清理后重新来。4.3 生成 ISO 镜像脚本跑完后在/opt/linux-live/output不同版本路径可能有差异下能看到类似linux-live.iso的成品。很多时候版本号在文件名里比如linux-live-6.5.7.iso直接重命名成你自己方便记的名字就行。cd /opt/linux-live/output sudo mv linux-live-*.iso my-custom-live.iso如果你在前面步骤没有自动生成 ISO也可以手动执行生成命令。下面是一个典型的命令示例sudo xorriso -as mkisofs \ -o my-custom-live.iso \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -c isolinux/boot.cat \ -b isolinux/isolinux.bin \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -eltorito-alt-boot \ -e boot/grub/efi.img \ -no-emul-boot \ -isohybrid-gpt-basdat \ -V MYLIVE \ /opt/linux-live/iso-root这里多解释一下几个关键参数-isohybrid-mbr让 ISO 同时具备硬盘引导能力这样写进 U 盘后既能当光盘也能当硬盘启动。-b isolinux/isolinux.bin指定 BIOS 模式的引导文件。-eltorito-alt-boot -e boot/grub/efi.img指定 UEFI 模式的引导镜像。-V MYLIVE设置卷标。这个卷标必须和引导配置里的卷标一致否则会找不到 Live 介质。4.4 虚拟机先验证再写 U 盘生成 ISO 后我强烈建议先在虚拟机里验证不要直接拿实机试。虚拟机验证通过至少能排除 90% 的镜像制作问题。目前我用得最多的是 VirtualBox 和 QEMU。QEMU 一条命令就能测qemu-system-x86_64 -cdrom my-custom-live.iso -m 2048 -boot d注意内存要分配得足够Live 系统启动时要把 squashfs 挂载上内存太小会直接启动失败建议至少给 2GB。验证通过后写入 U 盘。U 盘数据会被清空提前确认盘中没有重要文件sudo dd ifmy-custom-live.iso of/dev/sdX bs4M statusprogress oflagsync/dev/sdX替换成你的 U 盘设备名注意千万不要写错/dev/sda写错就是灾难。用lsblk先看清楚设备名lsblk写完后就可以插到目标机器上启动。如果启动不了优先检查启动顺序和固件引导模式这两项是实机测试最常见的坑。5. 成品定制引导菜单、默认账号、自动配置和持久化基础的 Live 镜像已经能跑了但光能跑还不够。我实际使用中几乎每次都要对成品做进一步定制下面这几个方向是最高频的定制需求。5.1 修改引导菜单加入多个启动项默认的引导菜单通常只有“启动 Live 系统”一个选项。我习惯再加两三项正常启动启用 toram全部加载进内存启用持久化如果插了持久化分区内存测试修改位置根据引导方式区分BIOS 模式编辑/opt/linux-live/iso-root/isolinux/isolinux.cfgUEFI 模式编辑/opt/linux-live/iso-root/boot/grub/grub.cfg比如 isolinux.cfg 里添加一个 toram 启动项LABEL toram MENU LABEL Live System (toram) KERNEL /boot/vmlinuz INITRD /boot/initramfs APPEND rootlive:LABELMYLIVE toram quiet注意两套配置文件里的卷标必须一致这就是前面说的-V MYLIVE里的值。如果这里写错启动时会卡在等待 Live 介质的地方。我踩过这个坑排查了很久才发现是大小写不一致。5.2 预设默认账号和开机自启脚本由于 Live 系统每次启动都是全新的直接改/etc/passwd里用户密码重启后又会回到初始状态。所以正确的做法是在打包之前把系统中的用户配置改好再执行打包。这样打包进 squashfs 里面的就是配置好的状态。我的习惯是创建一个专用账号用于日常使用sudo useradd -m -s /bin/bash liveuser echo liveuser:livepassword | sudo chpasswd打包完成后这个账号和默认密码就是 Live 系统的“出厂设置”。如果你需要在 Live 启动后自动执行脚本有两个位置可以放/etc/rc.local经典的启动后脚本适合简单的命令。systemd service适合管理需要等待网络就绪等复杂场景。比如我想让 Live 系统开机后自动获取 IP 并打印到屏幕可以写一个 systemd 服务让它Afternetwork-online.target然后执行ip addr show。这类定制在批量部署场景中特别有用。5.3 持久化让 Live 系统“记住”你的改动Live 系统每次重启还原这是特性也是缺点。有些场景你希望它能保存配置、日志或者新增的软件持久化就是干这个用的。持久化的实现原理还是 overlayfs把可写层从内存 tmpfs 换成 U 盘上的一个分区。启动时系统会查找标记为persistence的分区把它作为 upperdir 使用。配置步骤U 盘分出一个独立分区不用太大4GB 足够日常用。给该分区设置卷标sudo e2label /dev/sdX2 persistence在引导配置里给内核添加persistence参数。这样启动后你在系统里的/home、/etc等目录的改动会保存到持久化分区的 overlay 层里。要注意的是不是所有目录都被持久化通常默认只覆盖整个根目录的改动但每次关机前必须通过正常方式关机让 overlay 正确落盘直接拔电有损坏分区的风险。5.4 压缩率与镜像体积的取舍制作 Live 镜像时压缩算法的选择直接影响体积和启动速度。常见的几个选项压缩算法压缩比解压速度适用场景gzip中等快老机器、追求启动速度xz高慢追求最小体积、机器性能较好zstd高很快现代 CPU兼顾体积和速度我在 mksquashfs 阶段手工重压时常用 zstdsudo mksquashfs /source/path rootfs.squashfs -comp zstd -Xcompression-level 19zstd 级别越高压缩率越好但打包时间也越长。我实测下来level 19 和 level 15 的压缩比差距大概在 2%–3%而压缩时间差了近一倍所以日常用 level 15 就够了。6. 制作和启动过程中最容易翻车的几个环节最后这部分我把这些年做 Live 镜像过程中踩过的坑整理出来。每一个我都给出了完整的排查思路不是直接甩给你一个“改这里”的结论而是希望你学会定位问题的方法。6.1 启动后卡在 “waiting for device”如何定位这个错误是最常见的也是最让人恼火的因为屏幕上没有任何有效提示。我的排查链路是先确认卷标。在引导菜单按 Tab 或 e 编辑启动参数核对rootlive:LABELxxx是否和 ISO 实际卷标完全一致包括大小写。在按 Enter 启动前把quiet参数去掉让内核输出详细信息。看到/dev/disk/by-label/xxx找不到时基本就能确定是卷标问题。如果卷标没问题考虑是不是 U 盘识别慢。某些老机器的 USB 控制器初始化晚于内核挂载根文件系统的动作可以在启动参数里加rootdelay10强制等待几秒再挂载。经验之谈90% 的“waiting for device”都是卷标大小写问题剩下 10% 是 U 盘主控兼容性。先抓卷标别急着怀疑硬件。6.2 实机启动黑屏虚拟机却一切正常镜像在虚拟机里跑得好好的一到真机就黑屏或者花屏。这个问题的根源通常是内核缺少对应硬件的固件或显存管理驱动。排查思路按下面走确认/lib/firmware目录是否完整。如果你的系统之前正常运行在这台机器上那打包前应该是完整的但如果你是从别的机器打包的就很可能缺少当前机器需要的固件。检查 initramfs 中是否包含了对应硬件的内核模块。可以用lsinitramfs查看lsinitramfs /boot/initramfs-*.img | grep -i amdgpu如果模块缺失需要在源系统中先加载对应驱动再重新打包或者在 initramfs 配置里添加模块。一个实用技巧是打包前在源系统里执行sudo update-initramfs -u确保 initramfs 和当前内核模块状态一致然后再跑打包脚本。6.3 FAT32 的 4GB 限制与 U 盘格式选择如果你把镜像写到 FAT32 格式的 U 盘单个文件超过 4GB 就无法存储而制作出来的 Live 镜像经常超过这个数。解决方案有三个把 ISO 写入 U 盘用 dd 或写盘工具——这种方式不做分区直接把镜像写进整块盘不存在 FAT32 限制。使用 U 盘分区方案第一个分区保持 FAT32 用于存储文件第二个分区是持久化分区。这时应确保 rootfs.squashfs 单独存储在可支持大文件的分区中或者拆分 squashfs 文件。不用 FAT32直接用 ext4 或 exFAT 格式 U 盘配合引导加载器正确识别。我自己后来基本都用 dd 整盘写入虽然 U 盘上不能再随意存文件但稳定性最好兼容性也最高。6.4 文件权限和符号链接被破坏如果你在打包过程中用了不恰当的命令比如直接复制而不是用 rsync容易出现符号链接变成普通文本文件、可执行权限丢失、suid 位被清除等问题。这些往往不会在启动时立刻暴露而是在运行某个程序时突然报“permission denied”或“cannot execute binary file”。我踩过一次大坑打包时用了cp -r同步系统根目录结果/bin/busybox变成了普通文件Live 系统起来后一堆命令不可用。从那以后我坚持两点所有文件同步都必须用支持保留属性的工具首推 rsync。打包完成后对比原始系统的符号链接数量验证完整性find / -type l | wc -l如果在 Live 系统里也有同样命令做个数量对比就能发现异常。6.5 UEFI 安全启动与引导失败新机器默认开启 Secure Boot自制镜像一般没有有效的签名会被拒之门外。有些人一上来就禁用 Secure Boot在部分设备上是可以的但有些企业管理和产线环境不允许。我现在的处理方式是先把 Secure Boot 在 BIOS 里临时关掉验证镜像没问题后再考虑是否需要加入签名。如果只是内部使用关闭 Secure Boot 是一个并不违法违规的技术选择纯属技术操作如果需要正式发布再研究 MOK 签名流程。实测下来90% 的自制镜像并不涉及签名需求内部工具盘没必要和自己过不去。做了一遍完整的流程之后我自己最大的体会就是做 LiveCD 其实不是“把系统做成一个文件”这么简单它背后是对 Linux 启动机制、文件系统、引导加载和硬件兼容性的全面理解。第一次成功做出能启动的镜像那种成就感确实不错但更实用的价值是你从此拥有了一张能救命的“万能钥匙盘”。最后再说一个长期使用的小建议不要只在系统好的时候想起做 Live 镜像定期在系统配置稳定后更新一份。我给自己定的节奏是每完成一个大版本升级、每部署完一套重要环境就重新打一次包顺手把镜像传到安全的存储位置。多花十几分钟关键时刻可能为你省下一个通宵。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价