萬盛學電腦網

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

Linux 修復 GRUB 引導失敗「not read correctly」完整教學:Live CD 掛載、chroot 重裝、分區配置修正

錯誤現象與成因分析

開機時出現 Error: not read correctly 或 The file /boot/grub/stage1 not read correctly,通常由以下原因導致:

  • GRUB Stage 1/1.5/2 檔案損壞或遺失。
  • 分區表變更 (調整大小、移動、重建) 導致 GRUB 記錄的扇區地址失效。
  • /etc/fstab 或 /etc/mtab 中根分區裝置名稱錯誤 (如 /dev/sda7 變 /dev/sda6)。
  • BIOS/UEFI 啟動順序錯誤、磁碟模式變更 (AHCI/RAID/IDE)。

修復環境準備:Ubuntu Live CD/USB

  1. 下載 Ubuntu Desktop ISO (與安裝系統架構一致:64 位元用 amd64)。
  2. 製作啟動 USB:sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress && sync (或 Rufus/Ventoy/BalenaEtcher)。
  3. 啟動目標機器,選擇「Try Ubuntu」進入 Live 環境。
  4. 開啟終端機 (Ctrl+Alt+T),切換 root:sudo -i。

步驟一:識別並掛載根分區


# 列出所有分區
lsblk -f
# 或
fdisk -l

# 假設根分區為 /dev/sda7 (ext4)
mkdir -p /mnt/root
mount /dev/sda7 /mnt/root

# 掛載虛擬檔案系統 (chroot 環境必須)
mount -t proc none /mnt/root/proc
mount -o bind /dev /mnt/root/dev
mount -o bind /sys /mnt/root/sys
mount -o bind /run /mnt/root/run

# 若有獨立 /boot 分區 (如 /dev/sda6)
mount /dev/sda6 /mnt/root/boot

# 若有獨立 /home、/var 等,同樣掛載對應分區

步驟二:進入 chroot 環境


chroot /mnt/root /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"  # 提示符區分

現在你已在目標系統環境中操作,所有命令效果等同於在原系統內執行。

步驟三:重新安裝 GRUB


# BIOS/Legacy 模式 (MBR)
grub-install --no-floppy /dev/sda
# 或明確指定
grub-install --target=i386-pc --no-floppy /dev/sda

# UEFI 模式
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu /dev/sda
# --efi-directory: ESP 分區掛載點 (通常 /boot/efi)
# --bootloader-id: NVRAM 啟動項目名稱

若報錯 The file /boot/grub/stage1 not read correctly,進入步驟四。

步驟四:修正 /etc/mtab 與 /etc/fstab 裝置名稱不一致


# 檢查當前掛載情況
cat /proc/mounts
# 對比 /etc/mtab 與 /etc/fstab
cat /etc/mtab
cat /etc/fstab

# 常見問題:/etc/mtab 記錄舊裝置名 (如 /dev/sda7),實際為 /dev/sda6
# 修正 /etc/mtab (符號連結指向 /proc/self/mounts 現代系統無需手改)
# 若為舊系統實體檔案:
vi /etc/mtab
# 將根分區裝置名修正為正確值 (如 /dev/sda6)

# 同步修正 /etc/fstab (永久生效)
vi /etc/fstab
# UUID=xxxx-xxxx  /  ext4  defaults  0  1  <-- 強烈建議使用 UUID
# 獲取 UUID: blkid /dev/sda6

最佳實務:/etc/fstab 全面改用 UUID 識別分區,免除裝置名稱漂移導致開機失敗。

步驟五:再次安裝 GRUB 並更新配置


grub-install --no-floppy /dev/sda
update-grub
# 或 grub-mkconfig -o /boot/grub/grub.cfg

步驟六:修正 GRUB 選單啟動參數 (若重啟仍報錯)

  1. 重啟進入 GRUB 選單,選擇目標項目按 e 編輯。
  2. 找到 linux /vmlinuz... root=/dev/sda7 或 root=UUID=... 行。
  3. 修正 root= 參數為正確根分區裝置或 UUID。
  4. 按 Ctrl+x 或 F10 啟動。
  5. 進入系統後,永久修正 /boot/grub/grub.cfg (或 /etc/grub.d/ 腳本再 update-grub)。

GRUB 2 配置檔結構說明

  • /boot/grub/grub.cfg:自動生成,勿手動編輯。
  • /etc/default/grub:全域參數 (預設啟動項、超時、核心參數、解析度)。
  • /etc/grub.d/:生成腳本 (00_header, 10_linux, 20_linux_xen, 30_os-prober, 40_custom...)。
  • 自訂條目:編輯 /etc/grub.d/40_custom,執行 update-grub。

預防措施總結

  1. 分區操作前備份 GRUB:dd if=/dev/sda of=/backup/grub.mbr bs=512 count=1 (MBR) 或備份 ESP 分區。
  2. 使用 UUID:/etc/fstab、/boot/grub/grub.cfg (透過 /etc/default/grub GRUB_DISABLE_LINUX_UUID=false)。
  3. 定期測試備份還原:確保 GRUB 備份可用。
  4. UEFI 系統:備份 NVRAM 啟動項 (efibootmgr -v),會議 ESP 分區完整性。

掌握 Live CD + chroot + GRUB 重裝流程,是 Linux 系統管理員必備的「急救技能」。冷靜分析錯誤訊息、精準掛載分區、修正配置不一致、驗證啟動參數,即可讓無法開機的系統重獲新生。

copyright © 萬盛學電腦網 all rights reserved