理解 Linux 啟動流程,手工制作 U 盤啟動盤不再依賴一鍵工具,能靈活定制內核參數、預置 Kickstart、修復損壞系統。本文以 CentOS 7 ISO 為例,詳解 isolinux 引導鏈、配置文件編輯、鏡像生成與 UltraISO 寫入全過程。
initrd=initrd.img 參數 → 解壓 initrd.img 到內存作為臨時根文件系統。/init 腳本 → 掛載真實根設備(如 inst.stage2=hd:LABEL=CENTOS 指定 ISO 所在分區卷標)→ 切換根文件系統 → 啟動 systemd / 安裝程序。關鍵點:initrd.img 解決「內核不含所有硬件驅動」問題,通過參數動態指定根設備,實現同一內核適配多種硬件。
# 掛載 ISO
mount -o loop CentOS-7-x86_64-DVD.iso /mnt/iso
# 複製 isolinux 目錄所有文件到工作目錄
cp -r /mnt/iso/isolinux /work/bootusb/
# 關鍵文件清單:
# isolinux.bin 引導加載器
# vesamenu.c32 圖形菜單模塊
# vmlinuz 內核
# initrd.img 初始內存盤
# isolinux.cfg 菜單配置(將重命名為 syslinux.cfg)
# libcom32.c32, libutil.c32, ... 菜單依賴模塊
# splash.png 背景圖(可選)
# memtest 內存測試工具
# ldlinux.c32 SYSLINUX 核心模塊(部分版本需)

# 重命名
mv isolinux.cfg syslinux.cfg
# 編輯要點
default vesamenu.c32 # 默認進入圖形菜單;改為 default linux 可直接啟動第一項
timeout 600 # 等待 60 秒(單位 0.1 秒)自動啟動默認項
# 菜單項定義語法
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CENTOS quiet
label check
menu label Test this ^media & install CentOS 7
menu default # 高亮默認項
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CENTOS rd.live.check quiet
# 子菜單:Troubleshooting
menu begin ^Troubleshooting
menu title Troubleshooting
label vesa
menu indent count 5
menu label Install CentOS 7 in ^basic graphics mode
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CENTOS xdriver=vesa nomodeset quiet
label rescue
menu indent count 5
menu label ^Rescue a CentOS system
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CENTOS rescue quiet
label memtest
menu label Run a ^memory test
kernel memtest
label local
menu label Boot from ^local drive
localboot 0xffff
label returntomain
menu label Return to ^main menu
menu exit
menu end
關鍵參數解釋:
inst.stage2=hd:LABEL=CENTOS:告訴安裝程序「第二階段文件(完整安裝環境)在卷標為 CENTOS 的磁盤分區上」。**U 盤卷標必須設置為 CENTOS**,或改為 UUID=xxxx、/dev/sdX。quiet:隱藏內核啟動日志,顯示 Plymouth 啟動畫面。rd.live.check:安裝前校驗介質完整性。/work/bootusb(或直接新建)。syslinux.cfg、vmlinuz、initrd.img、isolinux.bin、vesamenu.c32、ldlinux.c32、splash.png、memtest 等)拖入。ldlinux.sys(啟動信息表)、syslinux.cfg、ldlinux.c32 等。CENTOS(右鍵屬性 → 重命名)。CentOS-7-x86_64-DVD.iso)直接複製到 U 盤根目錄(或解壓內容到 U 盤,視 inst.stage2 指定方式)。

cd /work/bootusb
# 生成混合模式 ISO(可直接 dd 寫入 U 盤)
mkisofs -o /work/CENTOS_BOOT.iso \
-b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
-V "CENTOS" -R -J -T .
# 寫入 U 盤(假設 U 盤為 /dev/sdb,謹慎確認!)
dd if=/work/CENTOS_BOOT.iso of=/dev/sdb bs=4M status=progress && sync
修改 syslinux.cfg 開頭:
default linux
# 刪除或註釋 default vesamenu.c32
timeout 10
插入 U 盤直接進入安裝流程,適合批量無人值守部署(配合 Kickstart inst.ks=hd:LABEL=CENTOS:/ks.cfg)。
grub2-efi 或 systemd-boot,制作 EFI/BOOT/BOOTX64.EFI,分區表為 GPT,EFI 系統分區 FAT32。inst.stage2=hd:LABEL=CENTOS 找不到介質。檢查 U 盤卷標、分區格式(FAT32/NTFS/exFAT 均可,需內核支持)。initrd.img 缺少驅動(如 USB3.0 控制器、NVMe)。需重新構建 initrd(dracut --add-drivers="xhci_pci nvme" --force)。-boot-info-table。結語: 掌握 isolinux → syslinux.cfg → vmlinuz/initrd → 卷標/設備指定 這條鏈路,你就擁有了定制任意 Linux 啟動介質的能力:救援盤、無人值守安裝盤、內核參數測試盤、簽名啟動盤……工具只是加速器,原理才是通行證。