基本介紹
- 外文名:GRUB
- 全稱:GRand Unified Bootloader
- 類別:操作程式
- 適用範圍:計算機
- 性質:是多啟動規範的實現
- 作用:選擇作業系統分區上的不同核心,也可用於向這些核心傳遞啟動參數
基本功能,引導過程,裝載記錄,裝載Grub,裝載系統,設備名稱,檔案系統,接口,選單接口,命令接口,命令,手動啟動,例子,安裝wingrub,安裝grub,軟體使用,編輯menu.lst,
基本功能
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來引導多個作業系統。
引導過程
裝載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糟。
在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中根檔案系統(root filesystem)這一術語的用法。GRUB的根檔案系統與Linux的根檔案系統是沒有關係的!
接口
當GRUB環境開始載入第二步引導裝載程式時,它尋找自己的配置檔案(menu.lst)。當找到配置檔案後,它使用這個配置檔案建立一個要載入的作業系統的選單列表, 然後顯示引導選單接口。 如果配置檔案沒有被找到,或者如果配置檔案不能讀取,那么GRUB將載入命令行接口。
選單接口
在選單接口上,按[e]鍵,對高亮選單項中的命令進行編輯。按[c]鍵載入一個命令行接口。 添加(加在當前行後面(用[o]鍵),加在當前行前(用[0]鍵),編輯(用[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。比如:
grub

color red/black green/blue
default - 默認項目的標題名稱。如果選單接口逾時,那它將被載入。
fallback - 當這個命令被使用時,如果第一次嘗試失敗,那么這個項目的標題名稱將被使用。
hiddenmenu - 這個命令被使用時,它不顯示GRUB選單接口,在逾時時間過期後載入默認項。用戶通過按[Esc]鍵,可以看到標準的GRUB選單。
timeout - 這個命令設定了在GRUB載入由default命令指定的項目的時間間隔,以秒為單位。
splashimage - 它指定在GRUB引導時所使用的螢幕圖像的位置。
title - 設定用來裝載一個作業系統的一組特定命令的標題。
字元#用來在選單配置檔案放置注釋。
手動啟動
有時候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選單配置檔案可能如下所示:
default=linuxtimeout=10color=green/blacklight-gray/blue#sectiontoloadlinuxtitlelinuxroot(hd0,1)這裡制定了grub的根。並且掛載。kernel/vmlinuzroot=/dev/hda5核心是grub根下的vmlinuz。並且核心載入後,核心的根是在/dev/hda5boot#sectiontoloadWindows2000titlewindowsrootnoverify(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
與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 全是小寫的英文;如果資料夾或檔案名稱輸入出錯,在安裝時安裝程式會提示找不到檔案。
編輯menu.lst

當打開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)+1titleWindowsXP#計算機中已經安裝了windows系統,用來啟動windows的,這四行代碼如下所示。titleWindowsXProot(hd0,0)makeactivechainloader+1
menu.lst 檔案的配置引導說明,通過menu.lst ,可以配置 Linux的啟動和引導:也可以引導已經安裝好的Linux系統。語法結構有以下的四條,舉例如下:總共有兩個書寫格式,任選其一;
格式一:最簡單:
titlefc4installroot(hd0,1)kernel(hd0,1)/linux/vmlinuzinitrd(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 的選單就會顯示:
linuxlinux-testwindowsfailsafe
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要調整開機時後的選單順序,就在 /boot/grub/menu.lst 修改一下他們的順序即可!
格式二:比較麻煩一點:理解著看吧;
titlefc4installroot(hd0,1)kernel/linux/vmlinuzroroot=/dev/hda2initrd/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的,有兩種寫法,都在裡面,哪種都是可以啟動引導安裝的;
這是第一種寫法
timeout10titleWindowsXProot(hd0,0)makeactivechainloader+1titlefc4installroot(hd0,1)kernel(hd0,1)/linux/vmlinuzinitrd(hd0,1)/linux/initrd.img
這是第二種格式的寫法
timeout10titleWindowsXProot(hd0,0)makeactivechainloader+1titlefc4installroot(hd0,1)kernel/linux/vmlinuzroroot=/dev/hda2initrd/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的安裝啟動選項進行安裝。