GRUB

一個多重操作系統啟動管理器

GNU徠 GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU項目的多操作系統啟動程序。GRUB是多啟動規範的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啟動參數。

基本功能


GNU GRUB 和GRUB是GRand Unified Bootloader的縮寫,它是一個多重操作系統啟動管理器。用來引導不同系統,如windows,linux。
X86架構的機器中,Linux、BSD 或其它Unix類的操作系統中GRUB、LILO 是大家最為常用,應該說是主流。
Windows也有類似的工具NTLOADER;比如我們在機器中安裝了Windows 98后,我們再安裝一個Windows XP ,在機器啟動的會有一個菜單讓我們選擇進入是進入Windows 98 還是進入Windows XP。NTLOADER就是一個多系統啟動引導管理器,NTLOADER 同樣也能引導Linux,只是極為麻煩罷了。
PowerPC 架構的機器中,如果安裝了Linux的Powerpc 版本,大多是用yaboot 多重引導管理器,比如Apple機用的是IBM PowerPC處理器,所以在如果想在Apple機上,安裝Macos 和Linux Powerpc 版本,大多是用yaboot來引導多個操作系統。
因為X86架構的機器仍是主流,所以目前GRUB和LILO 仍然是我們最常用的多重操作系統引導管理器。

引導過程


由硬碟啟動時,BIOS通常是轉向第一塊硬碟的第一個扇區,即主引導記錄(MBR)。
裝載GRUB和操作系統的過程,包括以下幾個操作步驟:

裝載記錄

基本引導裝載程序所做的唯一的事情就是裝載第二引導裝載程序。

裝載Grub

這第二引導裝載程序實際上是引出更高級的功能,以允許用戶裝載一個特定的操作系統。

裝載系統

如linux內核。GRUB把機器的控制權移交給操作系統。
不同的是,微軟操作系統都是使用一種稱為鏈式裝載的引導方法來啟動的,主引導記錄僅僅是簡單地指向操作系統所在分區的第一個扇區。

設備名稱

IDE硬碟用hd開始,SCSI徠硬碟用sd開頭。軟盤用fd開頭。命名和linux不大一樣。是從0算起。
(hd0,0)。表示C盤。
(hd0,4)。表示D盤。當然這裡指的是(第一個邏輯分區,如果D盤也是主分區,應該寫成hd0,1)
系統的第一個硬碟驅動器表示成(hd0),其上的第一個分區表示為(hd0,0),也就是說對於硬碟,採用(hdx,y)的形式來表示,x、y都是從0開始計數的,x表示硬碟號,y表示分區號。
由於主分區只能有四個,所以第一硬碟的四個主分區分別用(hd0,0)~(hd0,3)來表示;邏輯分區則從(hd0,4)開始算,即第一邏輯分區用(hd0,4),第二邏輯分區用(hd0,5)來表示,依次類推。
一般機子的硬碟都是一個主分區,其餘是邏輯分區。因此C盤用(hd0,0),D盤用(hd0,4)來表示。光碟用(cd)表示,第一軟碟機用(fd0)表示。
文件的表示:( , ) /path/to/file
在Linux系統中,如ubuntu,(hdx,y)中的y是從1開始計數的。第一邏輯分區用(hd0,5),第二邏輯分區用(hd0,6)來表示
裝置LiloGrub
IDE1 masterhda, hda1, hda2(hd0), (hd0,0), (hd0,1)
IDE1 slavehdb, hdb1, hdb2(hd1), (hd1,0), (hd1,1)
IDE2 masterhdc, hdc1, hdc2(hd2), (hd2,0), (hd2,1)
IDE2 slavehdd, hdd1, hdd2(hd3), (hd3,0), (hd3,1)

文件系統


一些用戶常困惑於GRUB中根文件系統(root filesystem)這一術語的用法。GRUB的根文件系統與Linux的根文件系統是沒有關係的!

介面


當GRUB環境開始載入第二步引導裝載程序時,它尋找自己的配置文件(menu.lst)。當找到配置文件后,它使用這個配置文件建立一個要載入的操作系統的菜單列表,然後顯示引導菜單介面。如果配置文件沒有被找到,或者如果配置文件不能讀取,那麼GRUB將載入命令行介面。

菜單介面

在菜單介面上,按[e]鍵,對高亮菜單項中的命令進行編輯。按[c]鍵載入一個命令行介面。添加(加在當前行後面(用[o]鍵),加在當前行前(用鍵),編輯(用[e]鍵),刪除(用[d]鍵)。
在所有的改變都完成後,用[Enter]鍵來執行這些命令,並引導操作系統。[Esc]鍵來放棄
命令行介面

命令介面

以下是幾個常用命令:
boot - 引導先前已經被指定並載入的操作系統或鏈式裝載程序。
chainloader - 將指定的文件作為一個鏈式裝載程序載入。為了獲取在一個指定分區第一 扇區內的文件,使用+1作為文件名。
displaymem - 顯示當前內存的使用情況,這個信息是基於BIOS的。這個命令有助於確定系統在引導前有多少內存。
initrd - 使用戶能夠指定一個在引導時可用的初始RAM盤。當內核為了完全引導而需要某些模塊時,這是必需的。
install p - 安裝GRUB到系統的主引導記錄。這個命令允許系統重啟時出現GRUB介面。
(警告:install命令將覆蓋主引導扇區中的其他信息。如果命令被執行,那麼除了GRUB信息之外的其他用於引導其他操作系統的信息都將丟失。在執行這條命令前,確定你對它有正確的了解。)
kernel - 當使用直接載入方式引導操作系統時,kernel命令指定內核從GRUB的根文件系統中載入。
比如 kernel /vmlinuz root=/dev/hda5
Vmlinuz是內核。。它從GRUB的根文件系統載入的,如(hd0,0)。同時,後面一個選項被傳給內核。它指出當Linux內核載入時,內核的根文件系統應該是位於hda5,第一個IDE硬碟的第五個分區。

命令


color - 設定在菜單中使用的顏色,一種是作為前景色,一種作為背景色。可以簡單地使用顏色名稱,如red/black。比如:
color red/black green/blue
default - 默認項目的標題名稱。如果菜單介面超時,那它將被載入。
fallback - 當這個命令被使用時,如果第一次嘗試失敗,那麼這個項目的標題名稱將被使用。
hiddenmenu - 這個命令被使用時,它不顯示GRUB菜單介面,在超時時間過期后載入默認項。用戶通過按[Esc]鍵,可以看到標準的GRUB菜單。
timeout - 這個命令設定了在GRUB載入由default命令指定的項目的時間間隔,以秒為單位。
splashimage - 它指定在GRUB引導時所使用的屏幕圖像的位置。
title - 設定用來裝載一個操作系統的一組特定命令的標題。
GRUB 2張
GRUB
字元#用來在菜單配置文件放置註釋。

手動啟動


有時候grub出現問題,不能通過啟動選項啟動目標操作系統,以啟動一個linux為例
按c鍵切換到命令行模式
grub> root (hd0,0) 設置根目錄為第一硬碟的第一個分區
grub> kernel /boot/vmlinuz 設置內核文件,有的linux發行版會有一個名為wmlinuz的軟連接指 向真正的內核文件
grub> initrd /boot/initrd 設置initrd文件,也有可能用軟連接代替真正的文件名
grub> boot (hd0,0) 從硬碟啟動
以上命令可以用tab鍵補全 根據實際情況有所不同

例子


這是個非常基本的用於引導Red Hat Linux或Microsoft Windows 2000的GRUB菜單配置文件可能如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
default=linux
timeout=10
color=green/blacklight-gray/blue
#sectiontoloadlinux
titlelinux
root(hd0,1)這裡制定了grub的根。並且掛載。
kernel/vmlinuzroot=/dev/hda5內核是grub根下的vmlinuz。
並且內核載入后,內核的根是在/dev/hda5
boot
#sectiontoloadWindows2000
titlewindows
rootnoverify(hd0,0)rootnoverify就是指定根,但是不要掛載。
chainloader+1使用(hd0,0)的第一扇區來引導。
安裝wingrub
在安裝軟體到機器中時,就直接按它默認的安裝,下一步、下一步就好了
在安裝過程中會出現一個Base Setup的提示窗口,ChooseDrive即是grub配置文件的存放位置,一定要選一個(一般選擇第一個,提醒你注意軟體的標題欄,不同的選擇會顯 示的不一樣),如果你選擇cancel,則不會有menu.lst 文件產生(這個文件很重要),Base Setup提示窗口下面的copy stage files和keep old directory不點擊也可以,它們的區別就是前者把grub文件夾中的文件和menu.lst一起放在新產生的grub文件夾下,而後者新產生的 grub文件夾中只有menu.lst ,如果不點擊則只會產生只含menu.lst文件的grub文件夾,都點擊則是copy stage files那種情況。
安裝grub
GRUB的一個重要的特性是安裝它不需依附一個操作系統;但是,這種安裝需要一個Linux副本。由於單獨工作,GRUB實質上是一個微型系統,通過鏈式啟動的方式,它可以啟動所有安裝的主流操作系統。
與LILO不同,修改GRUB的配置文件后,不必把GRUB重新安裝到MBR或者某個分區中。
在Linux中,“grub-install”命令是用來把GRUB的步驟1安裝到MBR或者分區中的。GRUB的配置文件、步驟2以及其它文件必須安裝到某個可用的分區中。如果這些文件或者分區不可用,步驟1將把用戶留在命令行界面。
GRUB配置文件的文件名和位置隨系統的不同而不同;如在Debian和OpenSUSE中,這個文件為/boot/grub/menu.lst,而在Fedora和Gentoo中為/boot/grub/grub.conf。Fedora提供了一個從/etc/grub.conf到/boot/grub/grub.conf的符號鏈接。
除了硬碟外,GRUB也可安裝到光碟、軟盤和快閃記憶體盤等移動介質中,這樣就可以帶起一台無法從硬碟啟動的系統。
軟體使用
打開wingrub程序,選擇 tools菜單,然後點擊Install grub ,彈出一個對話框;如下圖所示:
這裡面有兩個方法供選擇;
A) 直接單擊Boot From MBR Partion ,然後單擊右邊的下拉菜單;選擇要把Linux系統安裝在哪個分區中,再單擊最下邊install按鈕。
在下拉列表框中,如果看到(hd0,0)或者(hd0,1)等,則選(hd0,0);如果只看到(hd0,1),說明計算機硬碟的第一個分區是NTFS的文件格式,如果看不到什麼下拉列表框,就使用下面的辦法,
B)選擇Systerm Device ,在右邊的下拉列表框中,選C:然後再選中BOOT FROM 下的BOOT.INI 單選按鈕,在Title 中輸入mygrub ;最後在 Time OUT 中輸入30;
單擊Install按鈕,這樣grub就安裝好了。
grub的配置文件在c:\grub\中(如果你的不是,則可以從wingrub的標題欄看出),配置文件名為menu.lst ,這個配置文件起到決定性作用;所以一定要編輯好。
A和B還是有一些區別,A的方法是開機就能看到所有在menul.lst中的系統;而B,則必須按一下剛才所填寫的mygrub ,然後才能看到在menu.lst所提到的系統。
【個人首選B項,因為A安裝的grub會覆蓋掉原有的啟動引導程序,即重寫了MBR,而B則是把原有的引導程序修改了,加了一個啟動項。如果你想安 裝兩個系統,Windows為主,Linux為副,那麼B就可以更好的實現。當然,在安裝Linux時也要注意安裝程序中有一個“配置高級引導裝載程序選 項”就是對grub的安裝位置進行設置。
▲▲▲配置啟動文件▲▲▲
運行wingrub,單擊菜單中的tools菜單選擇Partition List(分區列表),在這裡能了解到硬碟的分區情況,比如可能看到 FAT32的分區是(hd0,1)等,要把Linux的光碟映像文件保存在fat32分區中;通過這個能知道把光碟ISO存放到(hdX,Y)了,也能知 道(hdX,Y)所對應的Windows分區是C,是D,還是E。配置啟動文件的過程如下:
1]先找一個FAT 32的分區,把下載下來的ISO直接放到分區的下面,不要放在任何目錄中,這個分區里也不要存放其他文件。
2]在這個分區中,再新建一個文件夾,命名為linux,從下載的第一張Linux系統安裝ISO文件isolinux中抽取 vmlinuz 和 initrd.img 兩個文件,放到linux目錄中:注意只放這兩個文件,不要再存放其他內容,如果放進其他的內容,有可能出現安裝程序中途退出的情況。
注意:抽取文件可以使用WinRAR軟體,另外,輸入文件夾時文件夾名是小寫;在輸入menu.lst 文件名時,要用半形英文,標點之類的全是半形;title root kernel initrd 全是小寫的英文;如果文件夾或文件名輸入出錯,在安裝時安裝程序會提示找不到文件。
編輯menul.lst
當打開menul.lst 時,可能裡面已經有內容了,比如有個 timeout 10 ,如果沒有則可以自己寫上(這是開機等待進入系統的時間,為時10秒)。
root [開機根目錄 / 所在的磁碟代號]
kernel [開機檔案的所在地完整檔名] [root=/dev/硬碟代號]
範例:
設定上面就是這樣而已!所以,開機完畢之後,請將您的 kernel 文件名稱(完整檔名)與開機的根目錄所在的磁碟代號記憶一下,那麼下次就可以手動設定開機設定項目呢!但如果是 windows 方面的設定時,那就直接使用 chainloader 這個項目即可,有點像這樣:
chainloader [硬碟代號] +1
範例:
menu.lst 文件的配置引導說明,通過menu.lst ,可以配置 Linux的啟動和引導:也可以引導已經安裝好的Linux系統。語法結構有以下的四條,舉例如下:總共有兩個書寫格式,任選其一;
格式一:最簡單:
title 行是在在開機時所看到的菜單,顯示的就是 fc4install ,它要加在 title 的後面。title是必須保留的,它是grub的語法的標籤,可以在title 後面寫入想要添加的東西,這是可以自己定義的,比如 title fc4setup也是可以的。
root (hd0,1) 行使用 root開頭,然後加一個空格,至於用戶把vmlinuz和initrd.img 放在哪個分區了,可以打開 wingrub,單擊tools菜單選擇partioinlist (分區列表),在打開的對話框中查到。
kernel 命令行以kernel 開頭,然後加一個空格,並在其後給定vmlinuz文件存放路徑,這個命令行的作用是告訴計算機將使用(hd0,1)分區下的linux目錄中的kernel 內核來啟動;
initrd 行和 kernel 行類似;主要用於指明安裝的文件放在哪個分區和哪個目錄中,即在該命令后指定文件的安裝目錄。
基本的說明已經在上表當中了,這裡需要在說明的是關於 default 開機檔的計算。如果今天我有四個開機設定檔,那麼 default 算的是什麼呢?就是『排序』啦!假如我底下依序出現的設定檔 title 分別是 linux, linux-test, windows, failsafe 的話,那麼開機的時候, grub 的選單就會顯示:
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要調整開機時后的選單順序,就在 /boot/grub/menu.lst 修改一下他們的順序即可!
格式二:比較麻煩一點:理解著看吧;
title 這行就是我們在開機時,所看到的菜單,顯示的就是 FC4install ,要加在 title 的後面,title是必須保留的,是grub的語法的標籤,我們可以在title 後面寫我們想要加的東西,這是自己可以定義的,比如 title fc4setup也是可以的;
root 這行,在本例中是 root (hd0,1),這行就是我們打開 wingrub,點tools =》partioinlist (分區列表)中查到的;我們通過這個知道我們把解壓出來的 vmlinuz和initrd.img 所處的分區和路徑;比如我的機器,我查到的是 (hd0,1),對應的Windows FAT 32分區是D,事實上,我的確把四個光碟映象都放在了 (hd0,1),也就是win中所看到的D盤;並且我同樣也把提取出來
vmlinuz 和initrd.img 放在了(hd0,1)中的linux目錄中;不知道自己存放提取出來的內容放在哪個分區了,就用 打開 wingrub,點tools =》partioinlist (分區列表)中查看;
kernel 這行;注意在 kernel後面有個空格,接著寫 vmlinuz所處的位置,在哪裡呢?在 /dev/hda2,這個/dev/hda2是怎麼來的?是由(hd0,1)而來的,如果您的顯示的是 (hd0,2),那root=/dev/hda3,明白了吧,就是(hdX,Y)中的Y+1=Z,就是/dev/hdaZ ,再舉一例:比如我們把提出來的vmlinuz 和initrd.img 放在了 (hd0,5)的linux 目錄中,這時應該寫 root=/dev/hda6 ;
有可能有的弟兄說,我放在了 (hd1,6)的分區,這怎麼辦?這個也不難,我們這裡面的所提到的 (hdX,Y),中的X可能是0 、1、2等,所以對應的是 hdaZ ,hdbZ,hdcZ ,如果您看到的是(hd1,6) ,所以對應的是/dev/hdb7 。
initrd 這行,原樣搬上就好;
完整menul.lst 應該如下:在這之中,引導Linux的,有兩種寫法,都在裡面,哪種都是可以啟動引導安裝的;
這是第一種寫法
這是第二種格式的寫法
編輯好后,就可以進入引導安裝,此時,如果系統仍然產生錯誤,例如出現找不到文件之類的提示。就需要查看文件存放路徑是否正確,如果能夠引導進入安裝,則 需要選擇ISO映像所存放的FAT32磁碟的分區,然後按Enter鍵執行安裝。
在安裝過程中,以下的幾個情況是要注意的:
1、在FC4的安裝過程,安裝分區時要自定義,不要讓系統自動分區;要自己指定Linux 安裝到哪個分區。我們可以在用windows分區工具,分出兩個空白區,一個要大一點,最好是10G 以上,另外一個是內存的兩倍(對於小內存的機器來說,大內存的機器分上512M 就行了;在安裝時,我們要把大的分區用來裝系統,點一下那個分區,出現掛載點,選擇/ ,然後格式化成 ext3或者 reiserfs 等文件系統;把小一點的分區格式化成swap ,這是Linux的交換區;
當然如果您有未用過的空白區,不用windows分區工具來分也行,在安裝過程中,可以用linux的分區工具來劃分,點幾下滑鼠就行了;這是對RH 和/FC 或者 的安裝來說的,Madrake 也一樣;
2、對於有些系統版本要把ISO抽取出來都放在一個目錄中才能進行,比如Slackware 發行版;
3、看到大家反饋的情況,有的弟兄說中途退出與放ISO的分區的下有中文目錄或者中文文件有關;如果找不出問題所在,就把ISO放在一個FAT32的空白分區上。
【安裝成功后,只用保留文件名為GRLDR的文件,即可實現用Windows引導程序引導Linux。】
▲▲▲安裝Fedora▲▲▲
重新啟動電腦,就可以啟動菜單,選擇Fedora的安裝啟動選項進行安裝。