核心重編譯是進階管理員必修課,但失敗率高。本文整理實務中最常見的五大故障現象與對應解法。
徵狀:Warning: unable to open an initial console → Kernel panic: no init found. Try passing init= option to kernel
主因:/etc/lilo.conf 中 root= 參數缺少前導斜線。錯誤:root=dev/hdc5;正確:root=/dev/hdc5。核心無法定位根裝置。
標準 lilo.conf 範本:
boot=/dev/hdc5
map=/boot/map
prompt
timeout=50
image=/boot/vmlinuz-2.2.2-1
label=Linux
root=/dev/hdc5
initrd=/boot/initrd-2.2.2-1.img
read-only
other=/dev/hda1
label=dos
table=/dev/hda
主因:編譯結束時未執行 make dep clean。menuconfig/xconfig 儲存不包含此步驟,導致相依關係錯誤。解法:配置完成後務必補跑 make dep clean 再 make bzImage。
主因:menuconfig/xconfig 勾選過多不需要的驅動/選項,導致核心膨脹、記憶體浪費。解法:精簡原則,僅啟用實際硬體與必要功能,預設值往往最佳。
解法:重開機 → rpm -e kernelconfig 移除配置工具 → rpm -ivh/--Uvh kernelconfig 重裝 → 重新配置編譯。若仍失敗,檢查硬體相容性。
主因:修改核心後忘記執行 lilo 登記新映像位置。核心映像複製會改變磁碟物理扇區,舊 LILO 指標失效。解法:從軟碟/救援碟啟動,掛載根分區執行 lilo 或 lilo -r /mnt。
核心編譯三字訣:精簡、依賴、重跑 lilo。