1. 程式人生 > >記一次grub丟失後的修復記錄

記一次grub丟失後的修復記錄

家裡的臺由於偶爾玩玩遊戲,安裝了win7+debian的雙系統.最近一次玩遊戲後,手賤點了win7的升級,結果系統壞了.重灌win7後,導致debian的引導丟失.由於長期是在debian下使用,所以不想重灌那麼麻煩,重點是debian系統沒有被損壞啊.所以就查資料研究了一下如何修復grub.由於/boot是獨立的分割槽,走了不少彎路.我嘗試了兩種方式修復grub,以下是兩種修復方式的記錄.

通過Debian rescue模式重建grub

  1. 製作debian的U盤安裝盤
  2. 進入debian的U盤安裝盤的 rescue模式(急救模式)
  3. 選擇語言/鍵盤/輸入姓名/配置網路等資訊後,進入急救模式->選擇在安裝程式環境中執行shell->選擇請不要使用根檔案系統(方便手動掛載已有系統檔案系統)。
# 由於/ /boot /home都是獨立的分割槽,所以需要分別進行掛載
mount /dev/sda11 /mnt
mount /dev/sda8 /mnt/boot
mount /dev/sda12 /mnt/home
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt /bin/bash
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

cd /
umount -a
exit
cd /
umount -a
reboot
# 重啟後即可出現引導選單介面
# 若有辦法進入系統(如手動啟動引導),則可進入系統後直接採用如下方式安裝grub sudo grub-install /dev/sda sudo grub-mkconfig -o /boot/grub/grub.cfg reboot

手動啟動引導

從win的啟動引導中進行手動啟動引導.此方式需要在win下通過easybcd安裝grub,所以需要能進入win系統.既然能進入win,當然也可以在win下製作對應linux系統的U盤安裝盤,然後通過上面介紹的救援模式進行修復.

  1. 在win下安裝easybcd
  2. 新增linux的grub,可針對不同分割槽多新增幾項,避免不斷重啟新增其他分割槽。
  3. 重啟後即可出現linux的grub引導項,可逐項嘗試。
  4. 進入grub rescue後,即可進行手動啟動引導。
  5. 可通過ls檢視分割槽資訊.
  6. 若根分割槽為(hd0,10),輸入如下命令(注:root和prefix後到末尾都沒有輸入空格)
set root=(hd0,10)
set prefix=(hd0,10)/boot/grub
insmod normal
normal
# 最後的normal命令輸入後即可進入引導選單。
# 進入系統後即可直接安裝grub

# 若未能進入grub2引導選單,而是進入了另一個grub2命令介面.可在此進行如下操作.

set root=(hd0,msdos8)               # (hd0,msdos8)      為/boot分割槽
linux /vmlinuz* ro root=/dev/sda11       # *指具體的核心版本,可通過tab鍵補全, sda11為根目錄的分割槽.
initrd /initrd.img*
boot

# 至次已經成功啟動系統.
# set root=(hd0,msdos8)               (hd0,msdos8)      為/boot分割槽
# linux /vmlinuz* ro root=/dev/sda11    *指具體的核心版本,可通過tab鍵補全, sda11為根目錄的分割槽.   注:若/boot為獨立分割槽時:  /vmlinuz*   若/boot不是獨立分割槽時:  /boot/vmlinuz*
# initrd /initrd.img*    *指具體的核心版本,可通過tab鍵補全
# set root後,可通過ls命令檢視該分割槽指定路徑下的檔案資訊.比如:不記得分割槽資訊了,可依次設定分割槽,然後通過ls檢視/或/boot下是否包含核心檔案及根分割槽相應的目錄,從而確定/分割槽和/boot分割槽.