Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

自製 Linux USB 啟動盤:從內核編譯到雙系統共存完整教學

編輯:Linux 教學

前言:為何需要 Linux USB 啟動盤?

USB 隨身碟以體積小、速度快、抗震耐用取代軟碟片,現代主板 BIOS 均支援 USB-HDD/USB-ZIP 啟動。廠商通常僅提供 Windows 98 啟動盤工具,但對系統維護人員而言,攜帶精簡 Linux 核心、網路工具與檔案傳輸環境的 USB 啟動盤實用性遠超 Windows PE。本文以 Red Hat 為例,使用朗科雙啟動型隨身碟完整示範製作流程。

一、核心準備:編譯支援 USB 啟動的精簡內核

硬體前提

  • 主板 BIOS 必須支援 USB-HDD 啟動模式
  • 隨身碟必須為「啟動型」產品(含主開機記錄區)

關鍵內核配置(以 2.4.20 為例)

編譯原則:極度精簡,移除聲卡等無關驅動,必選模組編入核心(非模組):

  • SCSI 子系統支援
  • USB 核心:usbcore、usb-storage
  • Loopback 裝置、RAM Disk、initrd 支援

initrd 映像檔製作與修補關鍵邏輯

為何需 initrd? USB 儲裝初始化速度慢於核心啟動,直接掛載根檔案系統會失敗。解決方案:initrd 載入記憶體後 sleep 3 等待 USB 就緒,再切換真實根裝置。

  1. 建立初始 initrd:mkinitrd /tmp/initrd.gz 2.4.20-usb
  2. 解壓掛載,注入 busybox 與 sleep 指令,修改 linuxrc:
    echo 'wait 3 seconds.....'
    /bin/sleep 3
    
  3. 重打包壓縮至 1MB 極致精簡:
    dd if=/dev/zero of=/tmp/initrdusb bs=1M count=1
    mke2fs -m 0 /tmp/initrdusb
    mount -o loop /tmp/initrdusb /mnt/initrdusb
    cp -a /mnt/initrd/* /mnt/initrdusb
    umount /mnt/initrd /mnt/initrdusb
    gzip -9 /tmp/initrdusb
    cp /tmp/initrdusb.gz /boot/initrd-2.4.20-usb.img
    
  4. 測試內核啟動,確認 dmesg 顯示 USB 儲裝偵測資訊

二、隨身碟分區與檔案系統佈建

分區規劃(fdisk 操作)

Device Boot Start End Blocks Id System
/dev/sda1 1 102 51376+ 6 FAT16    # Windows 98 啟動區
/dev/sda2 103 126 12096 83 Linux  # Linux 根分區

關鍵細節:若需相容 Windows 98 啟動,磁柱/磁頭/扇區幾何參數必須設為 63 扇區(可用 fdisk 專家模式 x 指令調整)。

建立 ext2 根檔案系統與目錄結構

mke2fs -m 0 /dev/sda2
mount /dev/sda2 /mnt/sda2
mkdir -p /mnt/sda2/{boot,bin,lib,dev,etc/init.d}

啟動載入器配置

複製編譯好的 vmlinuz、initrd.img、模組至對應目錄,部署 GRUB:

# /mnt/sda2/boot/grub/menu.lst
timeout 10
default 0
title Windows 98
rootnoverify (hd0,0)
makeactive
chainloader +1
title GNU/Linux Redhat 8.0 (2.4.20-usb)
root (hd0,1)
kernel /boot/vmlinuz-2.4.20-usb ro root=/dev/sda2
initrd /boot/initrd-2.4.20-usb.img

GRUB 安裝:grub> root (hd1,1); setup (hd1)(假設 USB 為第二顆硬碟 hd1)。

精簡用戶空間工具鏈

  • 核心工具採用 busybox 靜態連結替代(ln -s busybox cat/ifconfig/route/init...)
  • 編輯器改用極簡 e3 或重編 busybox 含 vi
  • 若保留 bash,需同步複製 /etc/termcap 與 /usr/share/terminfo/ 相關終端機定義
  • cp -a 複製 /dev 關鍵裝置節點(console, tty*, sda*, hda*)

啟動腳本與掛載表

# /etc/init.d/rcS
#!/bin/sh
PATH=/sbin:/bin
mount -n -t proc none /proc
umount /initrd
mount -n -o remount,rw /
mount -n -o remount,rw -t proc none /proc
ifconfig lo 127.0.0.1

# /etc/fstab
/dev/sda2 / ext2 defaults 1 1
none /proc proc defaults 0 0

三、實戰應用範例:跨機器檔案傳輸

場景:機器 A (192.168.100.5) 服務端,機器 B 以 USB 啟動為客戶端。

# 機器 A (發送端)
tar cf - win98 | nc -l -p 5555

# 機器 B (接收端,USB 啟動後)
mount -t vfat -o codepage=938,iocharset=cp936 /dev/hda5 /mnt/2dos
modprobe eepro100
ifconfig eth0 192.168.1.10
route add default gw 192.168.1.1
nc 192.168.100.5 5555 | tar xf -

四、進階:實現三重啟動

若 format /s 破壞 FAT16 分區幾何參數,可用 mkdosfs -F 16 重建,再用 xxd 備份/還原 Boot Record 32-35 位元組(記錄總扇區數),配合廠商工具製作 Windows 98 啟動區,最終達成:Windows 98 雙啟動 + Linux 單啟動 三模式共存。

Copyright © Windows教程網 All Rights Reserved