GRUB

GRUB

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

基本介紹

  • 外文名:GRUB
  • 全稱:GRand Unified Bootloader
  • 類別:操作程式
  • 適用範圍:計算機
基本功能,引導過程,裝載記錄,裝載Grub,裝載系統,設備名稱,檔案系統,接口,選單接口,命令接口,命令,手動啟動,例子,安裝wingrub,安裝grub,軟體使用,編輯menu.lst,

基本功能

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)來表示
裝置
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。比如:
grubgrub
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

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按鈕。
GRUB
在下拉列表框中,如果看到(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。配置啟動檔案的過程如下:
GRUB
1]先找一個FAT 32的分區,把下載下來的ISO直接放到分區的下面,不要放在任何目錄中,這個分區里也不要存放其他檔案。
2]在這個分區中,再新建一個資料夾,命名為linux,從下載的第一張Linux系統安裝ISO檔案isolinux中抽取 vmlinuz 和 initrd.img 兩個檔案,放到linux目錄中: 注意只放這兩個檔案,不要再存放其他內容,如果放進其他的內容,有可能出現安裝程式中途退出的情況。
注意:抽取檔案可以使用WinRAR軟體,另外,輸入資料夾時資料夾名是小寫;在輸入menu.lst 檔案名稱時,要用半角英文,標點之類的全是半角;title root kernel initrd 全是小寫的英文;如果資料夾或檔案名稱輸入出錯,在安裝時安裝程式會提示找不到檔案。

編輯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)+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的安裝啟動選項進行安裝。

相關詞條

熱門詞條

聯絡我們