用grub命令行啓動系統

  前些天fedora的啓動菜單grub.conf丟失,無法進入系統。不過,grub啓動管理器還好好的,只好通過grub命令行來手動引導啓動系統了。
  在“從硬盤安裝fedora 8 ”中曾經稍微提到過,grub是一個多系統的啓動管理器,不但有linux版本的grub,也有windows版本的grub。上次從硬盤安裝系統用的就是windows版本的grub。可以說,grub是一個非常強大的多系統啓動管理器,具有多重系統引導,交互式操作,可設置grub啓動密碼,可映射硬盤,可以定製開機畫面等等特點。通過命令行啓動系統就是交互式操作的一個應用,至於其它應用,這裏就不再一一列出。想要深入瞭解它的話,可以看一下grub的手冊: http://www.linuxsir.org/main/doc/grub/grubmanual/index.html 。說來慚愧,我還沒完全看過。。哈哈。。
  閒話少說,先把通過命令行啓動系統的過程列出來。爲了解釋方便,特標上行號:
1 root (hd0,2)
2 kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
3 initrd /initrd-2.6.26.5-28.fc8.img
4 boot
  怎麼樣?linux的啓動命令行是不是很簡潔啊?下面就一一解釋這幾命令。
  第1行命令:指定/boot所在的分區。
  要是不知道自己的/boot分區在哪裏,沒關係,先輸入root (hd0,然後按Tab鍵,它會顯示可能的分區,然後根據分區類型判斷/boot分區。我就是這麼做的......所以Tab鍵是linux裏很好用的一個鍵。這裏指定/boot分區並不是必須的,在這裏省略的話要在kernel以及initrd中指定,即:kernel (hd0,2)/vmlinuz-2.6......和initrd (hd0,2)/initrd-2.6......
  關於"hd0,2”,是指第一塊硬盤的第三個分區,這是一個主分區。linux裏的分區表示方法有兩種:一是像"hd0,2"這種純數字表示法,它是以"hd0,0"開始,意思是第一塊硬盤的第一個分區;第二塊硬盤就是hd1。還有一種是hda1這一種,它也表示第一塊硬盤的第一個分區;第二塊硬盤就是hdb。兩種表示法用在不同的場合,純數字表示法一般用在grub中指定/boot分區;第二種方法是日常使用的表示法,硬盤掛載等都用這種表示法。關於主分區與擴展分區,這裏稍微提一點:擴展分區是從hdx5或hdx,4開始的,其中x代表硬盤號。要更加詳細的瞭解linux的分區表示法,Google一下。

  第2行命令:指定內核映像及根分區。
  輸入kernel /vmlinuz,然後按Tab鍵補全內核映像全名;補全以後可以看到我的fedora內核映像是vmlinuz-2.6.26.5-28.fc8。如果有一個以上的內核,它會全部顯示出來讓你選擇(這種情況遇到過,從8升級到9以後,我的啓動菜單裏就有了兩個映像)。還有就是,我的/boot分區不是在根分區中,而是一個獨立的分區;如果/boot分區不是一個獨立分區,而是位於根分區中,就要這樣寫: kernel /boot/vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet,下面的initrd要寫成:initrd /boot/initrd-2.6.26.5-28.fc8.img。映像後面的部分是用來指定根分區的,要手動輸入。ro的意思是read only,root=/dev/VolGroup00/LogVol00是根分區位置,rhgb意思是圖形化啓動過程,quiet意思是不要顯示啓動信息。在實際操作中,我發現內核映像以後的部分其實不是必須的;也就是說,即使不輸入這部分內容,不指定根分區,不指定圖形化啓動過程,不省略啓動信息,也可以正確啓動。對於不必指定根分區,是否跟我的系統是單內核有關係?
  這行命令要多理解一下。首先,vmlinuz中,vm是指vritual memery,linuz的意思是說,這一個經過壓縮的內核映像。還有,這一行命令中的root跟第一行命令中的root表達的不是同一意思。第一行命令中的root指的是系統的啓動分區,即/boot分區;第二行命令中的root指的是系統的根分區,即/分區。要詳細理解兩者的區別,就牽涉到linux文件系統及目錄結構,它是linux中關鍵性的概念之一,我會找個時間寫一些關於它東西,淺談一下我對它的理解。"root="後面的"/dev/VolGroup00/LogVol00"就是根分區的位置;看起來是不是怪怪的?因爲我的根分區用的不是普通的硬盤分區,而是邏輯卷,術語叫LVM(logical volume manager)。這個也是linux裏一個很重要的東西。LVM要結合linux硬盤分區及目錄結構來理解,這裏就不談了,否則會越扯越遠,偏離正題。

  第3行命令:指定initrd.img
  initrd即initial ramdisk,字面上理解是初始化RAM磁盤。它實際上是一個臨時的文件系統,而且是與內核綁定在一起的。一般用來加載必須的系統文件、驅動程序和存儲設備等,系統啓動以後它立刻被釋放。據說,在沒有其它存儲設備的情況下,它就是永久的系統。我不是太瞭解,也寫不出更多的東西來。總之,initrd.img是一個與內核綁定在一起的,用來加載必須的系統文件的臨時文件系統。

  第4行命令:啓動系統。輸入boot,敲回車鍵即可啓動系統。
  系統啓動以後,再想一下這個手動啓動的過程,如果瞭解grub的話,手動啓動系統並不複雜。而啓動菜單呢,很像是根據我們手動輸入的內容編寫而成的一個腳本。這個“腳本”讓你在啓動系統時不必每次都手動輸入,所以這個“腳本”還是很有用的,我們還是手動編寫一個吧。
  若瞭解linux目錄結構的話,就會知道啓動菜單在根分區的boot文件夾下的grub文件夾中。grub文件夾中還有一個menu.lst,它是grub.conf的鏈接文件。你可能有點疑問:你的/boot分區不是一個獨立的分區,不在根分區中麼?其實這就是linux與windows不同的地方之一,它是通過掛載的方式與根分區產生關係的,這牽涉到文件系統和目錄結構方面的東西,這裏不詳談。找到並打開grub文件夾,創建一個grub.conf,你需要root權限!

  grub.conf該怎麼寫呢?和上面輸入的命令基本相似。下面是我虛擬機中fedora的grub.conf的內容:

其中,加#號的都是註釋文字,啓動時是被忽略的。核心部分如下:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu title Fedora (2.6.26.5-28.fc8)
  root (hd0,0)
  kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
  initrd /initrd-2.6.26.5-28.fc8.img
  第一行,default項,表示默認啓動的系統。0代表按照grub中的順序默認啓動第一個系統,改爲1,則是默認啓動第二個系統。以此類推。第二行,timeout項,表示選擇菜單等待時間爲5秒。這個可以自己設定選擇菜單等待的時間。第三行,splashimage項,表示開機啓動時出現的背景畫面。若不想讓畫面顯示,可以在前面加#號以忽略。第四行,hiddenmenu項,表示隱藏選擇菜單,加#號表示不隱藏。若裝了雙系統又不想讓它出現選擇菜單,可以把前面的#號去掉。第五行,title項,選擇菜單上出現的系統標題。下面的就不用再解釋了。。。
  仿照這個grub.conf另外寫一個啓動菜單,注意我實際電腦中的/boot分區是(hd0,2),其它的完全照搬。然後把它放在/boot/grub中,就可以正常啓動fedora了。但是我的實際的電腦中裝的是xp和fedora雙系統,按照那個啓動菜單雖然可以正常啓動fedora,卻不能正常啓動xp,仍然需要手動輸入。所還需要在剛纔的啓動菜單尾部加上一部分:
title windows xp
  rootnoverify (hd0,0) #我實際電腦中xp系統是放在第一個分區中的
  chainloader +1
  若想讓xp系統默認啓動,把default項改爲1。xp這一部分的啓動菜單用了鏈式裝入器,也不必理會什麼意思,照搬就可以了。
  現在一份新的啓動菜單就弄好了!
  這篇日記算是勉強寫完了。一方面,我也不是特別瞭解grub,無法作更深入的挖掘;另一方面,這篇日記牽涉到很多linux文件系統、目錄結構、硬盤分區等知識。既要談一點這方面的知識,否則讀起來會很吃力;又不能談的過多,否則會偏離正題。但是不管怎麼說,用命令行啓動fedora是沒什麼問題了......


轉載自http://bbs.51cto.com/thread-526095-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章