本文轉載自 “陳小賤。” 博客:http://chenxiaojian.blog.51cto.com/9345444/1619924
此次實驗目的: 在工作中, 難免會遇到grub損壞, 現在來模擬grub損壞後修復過程。
一、 第一階段修復MBR扇區故障;
1. 我們利用一條命令來把MBR的前446字節覆蓋的方法來模擬第一階段
[root@Centos1 ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
if=文件名: 輸入文件名, 缺省爲標準輸入. 即指定源文件。
of=文件名: 輸出文件名, 缺省爲標準輸出. 即指定目的文件。
ibs=bytes: 一次讀入bytes個字節, 即指定一個塊大小爲bytes個字節。
bs=bytes: 同時設置讀入/輸出的塊大小爲bytes文件。
count=blocks: 僅拷貝blocks個塊,塊大小等於ibs指定的字節數。
[root@Centos1 ~]# init 6 #重啓完後進不了系統
2. 掛載系統光盤, 進入救援模式;
①. 進入bios, 找到boot選項, 將CD-ROM調整爲第一系統項;
②. 選擇Rescue installed system, 進入救援模式;
③. 選擇語言.默認即可, 按tab鍵移動到OK選項;
④. 選擇鍵盤, 默認即可, 按tab鍵移動到OK選項;
⑤. 因爲我們放入了本地光盤,所以這裏也保持默認即可, 按tab鍵移動到OK選項;
⑥. 根據自己的實際需求是否開機網絡, 本人選擇no, 按tab鍵移動到OK選項;
⑦. 選擇默認即可,默認將Rescue環境掛載到/mnt/sysp_w_picpath, 按tab鍵移動到OK選項;
⑧. 選擇進入模式, 這裏本人選擇shell模式, 按tab鍵移動OK選項;
⑨. 進入root環境, 安裝grub;
bash-4.1# chroot /mnt/sysp_w_picpath #進入到root環境
sh-4.1# grub-install /dev/sda #安裝grub到第一塊硬盤
sh-4.1# exit
⑩. 將光盤彈出, 重啓操作系統, 便能進入系統;
bash-4.1# reboot #重啓操作系統
二、 第二階段模擬/etc/grub.conf丟失;
1. 刪除grub.conf配置文件;
[root@Centos1 ~]# rm -rf /boot/grub/grub.conf #刪除grub.conf配置文件
疑問: 很多人會問什麼不刪除/etc/grub.conf, 經過本人推測/boot/grub/grub.conf做軟連接到/ect/grub.conf, 所以說刪除/etc/grub.conf後系統會到/boot/grub目錄下找grub.conf文件;
[root@Centos1 ~]# init 6 #重啓操作系統
2. 開機後, 無法進入系統, 會提示grub>字樣;
3. 設置grub的根設備爲linux內核所在分區, 因爲我的/boot分區安裝在第一塊的第一個分區, 所以設置爲(hd0,0), 注意這裏不分IDC硬盤和SCSI硬盤;
假設你不知道包含內核文件等引導文件的/boot分區所在位置, 可以通過嘗試進行, 先輸入“root (hd0,”然後按tab鍵, 其中後面寫的0X83都是分區都有可能是/root分區, (0X82的swap分區, 那就不用試了)
grub> root (hd0,1)
4. 補全內核文件之後, 還需要在後面設置內核加載權限爲只讀ro, 並通過"root="指定根分區設置文件的位置;
grub> kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2
5. 加載內核鏡像文件
grub> initrd /initramfs-2.6.32-358.el6.x86_64.img #可以按tab鍵補全
6. 引導系統
grub> boot
解釋: 上圖選擇的分區不對, 關閉電源繼續. 重複以上操作.
grub> root (hd0,1)
grub> kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root #因爲我的是LVM卷。
grub> initrd /initramfs-2.6.32-358.el6.x86_64.img #可以按tab鍵補全
grub> boot
7. 編寫grub.conf文件, 不然下次還會進入到grub>模式;
[root@Centos1 ~]# vim /boot/grub/grub.conf #編輯grub.conf配置文件
[root@Centos1 ~]# cat /boot/grub/grub.cof
default=0 #默認啓動第一個引導
timeout=5 #在菜單到啓動系統停留時間,5秒。
title kernel-2.6.32 #啓動項目名稱
root (hd0,1) #boot所在位置
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/UUID="51e646df-c73b-4d07-a639-ba010bc02e4d" TYPE="ext4" #內核版本及目標位置
initrd /initramfs-2.6.32-358.el6.x86_64.img #加載內核文件路徑
[root@Centos1 ~]# init 6 #重啓系統