2010年11月7日 星期日

解決Linux下 Grub 開機的問題

(1)問題描述:
    最近,在一台已經裝有Ubuntu 的機器上,由於測試的需求要再安裝另一個作業系統
    CentOS。在CentOS安裝完畢之後,重新開機,進入CentOS的開機選單,選擇要進入
    Ubuntu時卻出現錯誤 訊息進不去,但相反的卻可以進去到CentOS。


(2)Try and Error:
    
    此時選擇進入CentOS,在命令列模式下執行以下指令: 
   (一):
   
 [root@CentOS5 /]# sudo  grub
 

  (二):此指令會在各個分割區去尋找是否有 kernel  為 2.6.28-19-generic 的檔案,也就是
           Ubuntu的Kernel
    
[root@CentOS5 /]#find /boot/vmlinuz-2.6.28-19-generic


(三):執行 find 命令的結果卻是:
[root@CentOS5 /]#Error 15: File not found

說明:
由於在CentOS上找不到 vmlinuz-2.6.28-19-generic 這個檔案,所 以,也就無法透過menu.lst 去 增加Ubunutu 的開機 選項。因為就算添加,在CentOS的開機選單上仍然是無法正常執行

(3)問題發生原因:
原因在於一CentOS 和 Ubuntu的 檔案系統的 Inodes 大小是不同的
CentOS檔案系統的Inodes是128KB,而Ubuntu是256k,所以CentOS
的Grub 辨識不了 Ubutu。但是相反的,Ubuntu的 Grub 卻能辨識CentOS

祥細的討論可參考以下這一篇文章:
Grub開機問題

(4)解決方法:
 即然CentOS的Grub辨識不了 Ubutu,那麼我們只好使用Ubuntu的Grub了。
而這也是不更改現在分割區的indoes大小的唯一辦法了。
使用 Ubuntu 的 live cd 去更改 Grub,把Grub設成是Ubuntu。
祥細可以參考以下這一篇文章:
Ubuntu設定Grub

步驟如下:

(一)
使用 live cd 進入 ubuntu,並開啟命令列模式

(二)
sudo  grup

(三) :此步驟必須明確知道Ubuntu是裝在那顆硬碟的那個分割區。本例是第1顆硬碟的第1個分割區。
root (hd0,0)

(四)
setup (hd0)

(五)
exit

以上步驟完成之後,grub就由原本的centos改成是ubuntu了。開機即可進入ubuntu。在進入ubuntu後,開啟命令列模式,進行以下操作:


(一)
sudo grub

(二)
find  /boot/vmlinuz-2.6.18-194.el5PAE (查centos 的 kernel 檔案)

(三)
執行結果如下:
(hd0,2)
發現找到了,沒有出現錯誤訊息出來。 此時,我們可以把centos的選項 增加到 ubuntu 的 menu.list 內。

(四)
sudo vim /boot/grub/menu.lst

(五)
title CentOS 5 (2.6.18-194.el5PAE)
root (hd0,2)
kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.18-194.el5PAE.img

(六)
存檔重新開機