複製鏈接
請複製以下鏈接發送給好友

GRUB

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

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 仍然是我們最常用的多重操作系統引導管理器。

GRUB引導過程

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

GRUB裝載記錄

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

GRUB裝載Grub

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

GRUB裝載系統

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

GRUB設備名稱

GRUB不區分IDE硬盤和SCSI硬盤,統一使用hdx來標識。軟盤使用fdx來標識,x為硬盤號,x從0開始計數。
GRUB使用(hdx,y)標識某個硬盤中的某個分區,x表示硬盤號,y表示分區號,x和y都從0開始計數。
在windows中,系統的第一個硬盤驅動器表示為(hd0),其中的第一個分區表示為(hd0,0),以此類推。
(hd0,0)。表示C盤。
(hd0,4)。表示D盤。當然這裏指的是(第一個邏輯分區,如果D盤也是主分區,應該寫成hd0,1)
由於主分區只能有四個,所以第一硬盤的四個主分區分別用(hd0,0)~(hd0,3)來表示;邏輯分區則從(hd0,4)開始算,即第一邏輯分區用(hd0,4),第二邏輯分區用(hd0,5)來表示,依次類推。
一般windwos的分區都是一個主分區,其餘是邏輯分區。因此C盤用(hd0,0),D盤用(hd0,4)來表示。 光盤用(fd)標識,第一個軟驅用(fd0)表示。
在Linux系統中,如ubuntu,(hdx,y)中的y是從1開始計數的。第一邏輯分區用(hd0,5),第二邏輯分區用(hd0,6)來表示
裝置
Lilo
Grub
IDE1 master
hda, hda1, hda2
(hd0), (hd0,0), (hd0,1)
IDE1 slave
hdb, hdb1, hdb2
(hd1), (hd1,0), (hd1,1)
IDE2 master
hdc, hdc1, hdc2
(hd2), (hd2,0), (hd2,1)
IDE2 slave
hdd, hdd1, hdd2
(hd3), (hd3,0), (hd3,1)

GRUB文件系統

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

GRUB接口

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

GRUB菜單接口

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

GRUB命令接口

以下是幾個常用命令:
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硬盤的第五個分區。

GRUB命令

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

GRUB手動啓動

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

GRUB例子

這是個非常基本的用於引導Red Hat Linux或Microsoft Windows 2000的GRUB菜單配置文件可能如下所示:
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)的第一扇區來引導。

GRUB安裝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

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也可安裝到光盤、軟盤和閃存盤等移動介質中,這樣就可以帶起一台無法從硬盤啓動的系統。

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 全是小寫的英文;如果文件夾或文件名輸入出錯,在安裝時安裝程序會提示找不到文件。

GRUB編輯menu.lst

Menu説明 Menu説明
當打開menul.lst 時,可能裏面已經有內容了,比如有個 timeout 10 ,如果沒有則可以自己寫上(這是開機等待進入系統的時間,為時10秒)。
root [開機根目錄 / 所在的磁盤代號]
kernel [開機檔案的所在地完整檔名] [root=/dev/硬盤代號]
範例:
root(hd0,0)
kernel/boot/vmlinuz-2.4.19-16mdkroot=/dev/hda1
設定上面就是這樣而已!所以,開機完畢之後,請將您的 kernel 文件名稱(完整檔名)與開機的根目錄所在的磁盤代號記憶一下,那麼下次就可以手動設定開機設定項目呢!但如果是 windows 方面的設定時,那就直接使用 chainloader 這個項目即可,有點像這樣:
chainloader [硬盤代號] +1
範例:
chainloader(hd1,0)+1
titleWindowsXP#計算機中已經安裝了windows系統,用來啓動windows的,這四行代碼如下所示。
titleWindowsXP
root(hd0,0)
makeactive
chainloader+1
menu.lst 文件的配置引導説明,通過menu.lst ,可以配置 Linux的啓動和引導:也可以引導已經安裝好的Linux系統。語法結構有以下的四條,舉例如下:總共有兩個書寫格式,任選其一;
格式一:最簡單:
titlefc4install
root(hd0,1)
kernel(hd0,1)/linux/vmlinuz
initrd(hd0,1)/linux/initrd.img
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
linux-test
windows
failsafe
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要調整開機時後的選單順序,就在 /boot/grub/menu.lst 修改一下他們的順序即可!
格式二:比較麻煩一點:理解着看吧;
titlefc4install
root(hd0,1)

kernel/linux/vmlinuzroroot=/dev/hda2
initrd/linux/initrd.img
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的,有兩種寫法,都在裏面,哪種都是可以啓動引導安裝的;
這是第一種寫法
timeout10
titleWindowsXP
root(hd0,0)
makeactive
chainloader+1
titlefc4install
root(hd0,1)
kernel(hd0,1)/linux/vmlinuz
initrd(hd0,1)/linux/initrd.img
這是第二種格式的寫法
timeout10
titleWindowsXP
root(hd0,0)
makeactive
chainloader+1
titlefc4install
root(hd0,1)

kernel/linux/vmlinuzroroot=/dev/hda2
initrd/linux/initrd.img
編輯好後,就可以進入引導安裝,此時,如果系統仍然產生錯誤,例如出現找不到文件之類的提示。就需要查看文件存放路徑是否正確,如果能夠引導進入安裝,則 需要選擇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的安裝啓動選項進行安裝。
參考資料