萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux Boot/Root 開機磁碟製作核心技術:核心精簡與根檔案系統壓縮實作

Boot/Root 磁碟將核心與完整根檔案系統壓縮置入 1.44MB 軟碟,是獨立微型 Linux 系統的經典實作。核心在 RAMDISK 中解壓根檔案系統並掛載為真實根目錄,實現無硬碟開機。本文聚焦根檔案系統壓縮包的生成流程與關鍵組件裁剪技巧。

核心編譯前提:必選支援項目

  • CONFIG_BLK_DEV_RAM:RAMDISK 支援
  • CONFIG_BLK_DEV_RAM_SIZE=4096:預設 4MB RAMDISK(/dev/ram0)
  • CONFIG_EXT2_FS:ext2 檔案系統支援(不可為模組)
  • 移除網路、音效、多餘檔案系統等非必要驅動,壓縮核心體積

最小根檔案系統必要組件清單

目錄/檔案必要內容說明
/binsh, ls, cp, mv, mount, umount, insmod, rmmod基本維護指令,優先選用 busybox 縮減體積
/sbininit, fdisk, mke2fs, fsck, route, ifconfig系統管理工具
/etcinittab, fstab, rc.sysinit, passwd, group最小啟動設定檔
/libld-linux.so.*, libc.so.*, libm.so.*動態連結器與 C 函式庫,用 ldd 檢查相依
/devconsole, tty*, null, zero, ram0, hd*, fd0關鍵裝置節點,用 mknod 或 MAKEDEV 建立
/proc, /sys, /tmp, /mnt掛載點目錄空目錄即可

根檔案系統壓縮生成流程

  1. 建立臨時目錄樹:mkdir -p /tmp/rootfs/{bin,sbin,etc,lib,dev,proc,sys,tmp,mnt}
  2. 複製並裁剪檔案:使用 cp -a 保留屬性,strip 去除二進位符號表
  3. 建立裝置節點:cd /tmp/rootfs/dev && MAKEDEV console tty0 tty1 null zero ram0 hda1 hda2 fd0
  4. 生成壓縮映像:
    cd /tmp/rootfs
    find . | cpio -o -H newc | gzip -9 > /tmp/rootfs.gz
    # 或使用 ext2 映像檔
    dd if=/dev/zero of=/tmp/rootfs.ext2 bs=1k count=4096
    mke2fs -F /tmp/rootfs.ext2
    mount -o loop /tmp/rootfs.ext2 /mnt
    cp -a /tmp/rootfs/* /mnt/
    umount /mnt
    gzip -9 /tmp/rootfs.ext2
  5. 寫入軟碟:
    dd if=/boot/vmlinuz of=/dev/fd0 bs=1k seek=0
    dd if=/tmp/rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
  6. 設定核心參數:rdev -r /dev/fd0 4096(設定 RAMDISK 大小),rdev /dev/fd0 /dev/fd0(設定根裝置)

實戰優化技巧

  • 採用 BusyBox 單一二進位替代 /bin、/sbin 多數工具,節省 60%+ 空間
  • 使用 uClibc 或 musl libc 替代 glibc,大幅減小 /lib 體積
  • 核心啟動參數 root=/dev/ram0 initrd=rootfs.gz 可由 LILO/GRUB 傳遞
  • 現代系統建議改用 initramfs(cpio 封存直接內嵌核心),取代傳統 initrd
copyright © 萬盛學電腦網 all rights reserved