記一次grub丟失後的修復記錄
阿新 • • 發佈:2019-02-16
家裡的臺由於偶爾玩玩遊戲,安裝了win7+debian的雙系統.最近一次玩遊戲後,手賤點了win7的升級,結果系統壞了.重灌win7後,導致debian的引導丟失.由於長期是在debian下使用,所以不想重灌那麼麻煩,重點是debian系統沒有被損壞啊.所以就查資料研究了一下如何修復grub.由於/boot是獨立的分割槽,走了不少彎路.我嘗試了兩種方式修復grub,以下是兩種修復方式的記錄.
通過Debian rescue模式重建grub
- 製作debian的U盤安裝盤
- 進入debian的U盤安裝盤的 rescue模式(急救模式)
- 選擇語言/鍵盤/輸入姓名/配置網路等資訊後,進入急救模式->選擇在安裝程式環境中執行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盤安裝盤,然後通過上面介紹的救援模式進行修復.
- 在win下安裝easybcd
- 新增linux的grub,可針對不同分割槽多新增幾項,避免不斷重啟新增其他分割槽。
- 重啟後即可出現linux的grub引導項,可逐項嘗試。
- 進入grub rescue後,即可進行手動啟動引導。
- 可通過ls檢視分割槽資訊.
- 若根分割槽為(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分割槽.