身為 Linux 管理員,你是否在新增外部存儲、遷移系統或重裝後重啟時,遇到 「cannot mount rootfs」 隨後觸發 Kernel Panic** 的絕望畫面?根文件系統是 Linux 運行的基石,包含所有程式、配置、設備節點與數據。一旦內核在啟動階段 (Boot Process Step 5) 無法掛載它,系統便徹底凍結。本文梳理 x86 平台啟動流程,揭示設備命名漂移的本質,並提供四大實戰技巧快速定位修復。
root= 指定的設備。失敗 → Kernel Panic。/etc/inittab、執行 rc.sysinit、進入預設 Runlevel。Linux 按驅動程序初始化順序、總線掃描順序動態分配 /dev/sd* 設備節點:
/dev/sda/dev/sdb,以此類推 (後續 sdaa、sdzz...)典型場景:系統盤原本在 /dev/sda。新增一張 RAID 卡或 HBA 卡,其驅動比系統盤控制器驅動更早載入 → 新卡掛載的陣列搶佔 /dev/sda → 原系統盤被推至 /dev/sdb → 內核在 /dev/sda 找不到 rootfs → Panic。
文件系統格式化時會生成唯一 UUID,與設備順序無關。修改 /boot/grub/grub.conf (或 grub.cfg) 與 /etc/fstab:
# GRUB 內核參數
kernel /vmlinuz-... root=UUID=xxxx-xxxx-xxxx-xxxx ro quiet
# /etc/fstab
UUID=xxxx-xxxx-xxxx-xxxx / ext4 defaults 1 1
查看 UUID:blkid 或 ls -l /dev/disk/by-uuid/。
若新增控制器 (如 RAID、NVMe、USB3.0) 但其驅動未包含在 initramfs 中,內核無法識別設備。重建:
dracut -f 或 mkinitrdupdate-initramfs -u -k all確認驅動已包含:lsinitrd /boot/initramfs-$(uname -r).img | grep -i nvme。
在 GRUB 內核行追加:
rootdelay=30:給慢速設備 (USB、iSCSI) 30 秒偵測時間。rootwait:無限期等待 root 設備出現 (適用於非同步探測)。scsi_mod.scan=sync:強制同步掃描 SCSI 總線,避免競態。mount /dev/sdb2 /mnt/sysimage (視實際設備而定)。/mnt/sysimage/etc/fstab 與 /mnt/sysimage/boot/grub/grub.conf 中的設備路徑為 UUID。chroot /mnt/sysimage → 重新安裝 GRUB:grub2-install /dev/sda。rootfs 掛載失敗 90% 歸因於設備節點漂移或initramfs 缺驅動。養成「全鏈路使用 UUID、重大硬體變更必重建 initramfs」的習慣,能從根源杜絕此類故障。