標籤:
在使用Linux的過程中,難免會出現開機提示grub >而無法啟動,可能是系統中/boot/grub檔案丟失等原因造成的,當出現此問題的時候只要系統磁碟分割沒有格式化一般是可以修複的,下面就以虛擬 機為例,刪除/boot分區,在linux救援模式下重新修複:
實驗使用的系統為Centos 6.5 x86_64
1、刪除boot分區:會導致gurb和linu核心丟失,然後重啟:
此時系統重啟後已經完全無法再次啟動,如下:
2、使用光碟片鏡像引導系統,並選擇救援模式啟動:
提示將系統掛載至/mnt/sysimage:
2、將根切換至之前的系統:
3、建立光碟片掛載目錄並掛載光碟片:
4、安裝kerner包,會產生/boo目錄以及核心及initramfs
5、修複grub,首先要查看一下自己的磁碟分割情況,以確認grub安裝在那個磁碟上:
為第一塊磁碟安裝grub引導:
6、確認geub目錄已經產生:
此時系統仍然無法正常啟動,因為確認grub.conf檔案,可以嘗試重啟看一下介面:
5、在grub介面指定kernel和initramfs所在路徑啟動,可以操作的命令有:
grub>kernel 核心檔案 //設定核心檔案的路徑
grub>initrd 鏡像檔案名 //設定鏡像路徑
grub>boot //啟動指定作業系統
grub>help //擷取協助
grub>reboot //重啟系統
grub>md5-crypt //產生口令的MD5密文
grub>setup (hdx[,y]) //安裝GURB到MBR/指定分區的開機磁區中
grub>hide 分區 //隱藏式磁碟分割
grub>cat 檔案名稱 //顯示檔案內容
grub>find 檔案名稱 //尋找檔案
grub>rootnoveify (hdx,y) //設定根裝置所對應的分區,但不檢查載入點
grub>chainloader 檔案名稱 //載入指定的檔案
在此指定linux核心和initramfs檔案路徑,並啟動linux系統:
註:
grub> root (hd0,1) #是說跟分區在第一塊硬碟的第二個分區
grub> kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/sda2 #指明核心路徑和根分區
grub> initrd /boot/initramfs-2.6.32-431.el6.x86_64.img #指明initramfs路徑啟動系統載入驅動
grub> boot #啟動上面指定的系統,如果是reboot就等於重啟整個系統了,剛才的設定就失效了
此時已經可以引導系統啟動了,但是還沒有grub.conf檔案,可以在系統啟動後編寫一個grub.conf檔案即可
6、編寫grub.conf檔案:
可以看到,此時系統是沒有grub.conf檔案的,如果重啟系統後就無法正常開機了,除非在grub介面指定核心和驅動檔案的路徑:
建立grub.conf檔案:
註:kernel一行後面root=/dev/sda2是指的根分區所在的磁碟,假如boot分區和根分區沒有在一起,則grub.conf檔案要寫明boot分區和根分區,另外不推薦安裝磁碟分割的方式寫根分區的路徑,因為有可能系統重啟後磁碟好會出現變化,因此推薦使用UUID的方式表明,每個分區都有自己的UUID,是在整個系統中唯一的身份標示,可以使用命令blkid /dev/sda2擷取。
7、最後重啟系統,以硬碟直接啟動測試;
系統已經正常啟動完成!
總結:修複grub是個漫長的過程,下午用了三個多小時的時間寫部落格和修複系統,修複期間為了排錯,虛擬機器重啟了至少幾十次,因此要有耐心、認真的去做一件事,才能做的最好!
CentOS 6.5中linux grub修複