文章出處http://www.linuxsir.org/bbs/showthread.php?t=21818
GRUB學習筆記
聲明:本筆記並不是原創,只是我我的的學習筆記!
不少的內容來自www.linuxsir.com www.linuxfans.org www.linuxAID.com
很是感謝以上網站對個人學習提供的莫大的幫助,本着學習和分享的原則我貼出個人學習筆記,更但願兄弟們能給我指出其中錯誤的地方.謝謝!!!
學習這部分知識,首先要學到問題的思路,其次你還要記住一些東西,是死記硬背下來!你會發現這點東東的確是頗有用的!
儘管如此,本文檔歸屬linuxsir-probing!轉載請註明出處!更不能被用到商業用途上!
1 首先要了解的幾個概念
1.1 啓動管理器
啓 動管理器是存儲在磁盤開始扇區中的一段程序,例如,硬盤的MBR(Master Boot Record),在系統完成啓動測試後,若是系統是從MBR啓動,則BIOS(Basic Input/Output System)將控制傳送給MBR。而後存儲在MBR中的這段程序將運行。這段程序被稱爲啓動管理器。它的任務就是將控制傳送給操做系統,完成啓動過程》 有許多可用的啓動管理器,包括GNU GRUB (Grand Unified Boot Loader),Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等等.
1.2 什麼是GRUB?
grub 是一個多重啓動管理器。grub是GRand Unified Bootloader的縮寫,它能夠在多個操做系統共存時選擇引導哪一個系統。它能夠引導的操做系統包括:
Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000,WinXP。它能夠載入操做系統的內核和初始化操做系統(如Linux,FreeBSD),或者把引導權交給操做系統(如 Windows 98)來完成引導。
1.3 GRUB的特色
特別適用於linux與其它操做系統共存狀況。
支持大硬盤如今大多 數Linux發行版本的lilo都有一樣的一個問題:根分區(/boot分區)不能分在超過1024柱面的地方,通常是在8.4G左右的地方,不然 lilo不能安裝,或者安裝後不能正確引導系統。而grub就不會出現這種狀況,只要安裝時你的大硬盤是在LBA模式下,grub就能夠引導根分區在 8G之外的操做系統。
支持開機畫面 grub支持在引導開機的同時顯示一個開機畫面。對於玩家來講,這樣能夠製做本身的個性化開機畫面;對於PC廠商,這樣能夠在開機時顯示電腦的一些信息和 廠商的標誌等。grub支持640x480,800x600,1024x768各類模式的開機畫面,並且能夠自動偵測選擇最佳模式,與Windows那 320x400的開機畫面不可同日而語。
兩種執行模式 grub不但能夠經過配置文件進行例行的引導,還能夠在選擇引導前動態改變引導時的參數,還能夠動態加載各類設備。例如你在Linux下編譯了一個新的核 心,但不能肯定它能不能工做,你就能夠在引導時動態改變grub的參數,嘗試裝載這個新的核心進行使用。Grub的命令行有很是強大的功能,並且支持如 bash或doskey同樣的歷史功能,你能夠用上下鍵來尋找之前的命令。
菜單式選擇 grub使用一個菜單來選擇不一樣的系統進行引導。你還能夠本身配置各類參數,如延遲時間,默認操做系統等。
分區大小改變後沒必要從新配置 grub是經過文件系統直接把核心讀取到內存,所以只要操做系統核心的路徑沒有改變,grub就能夠引導系統。
除此以外,Grub還有許多很是強大的功能。例如支持多種外部設備,動態裝載操做系統內核,甚至能夠經過網絡裝載操做系統核心。Grub支持多種文件系統,支持多種可執行文件格式,支持自動解壓,能夠引導不支持多重引導的操做系統,支持網絡啓動等。
1.4 MBR和第一扇區
你能夠簡單的理解爲MBR是整個硬盤的物理第一位置,而第一扇區是硬盤的物理第二位置.
1.5 一個GRUB配置文件
基於本例的分區以下:
hda 15G
hda1 8G / RED HAT LINUX8.0
hda5 7G /home
hdc 20G
hdc1 6.4G WinXP
hdc5 6.4G
hdc6 6.4G
hdc7 6.4G
#fdisk -l
# Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdc1 * 1 894 7181023+ b Win95 FAT32
/dev/hdc2 895 2434 12370050 f Win95 Ext'd (LBA)
/dev/hdc5 895 1787 7172991 b Win95 FAT32
/dev/hdc6 1788 2434 5196996 b Win95 FAT32
Disk /dev/hda: 255 heads, 63 sectors, 1867 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1020 8193118+ 83 Linux
/dev/hda2 1021 1802 6281415 83 Linux
/dev/hda3 1803 1867 522112+ 82 Linux swap
grub.conf,這個文件位於;/boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=3
splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
title Microsoft Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
chainloader (hd1,0)+1
makeactive
boot
2 解讀grub.conf文件
咱們未來看看grub.conf文件內語句,(注:...)內的東西是咱們的解讀內容.
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda (注:以上以符號井"#"開頭的行表示被註釋掉,沒有任何意義)
default=0 (注:默認的操做系統就是由default控制的。default後加一個數字n,代表是第 n+1個。須要注意的是,GRUB中,計數是從0開始的,第一個硬盤是hd0,第一 個軟驅是fd0,等等。因此,default 0 表示默認的操做系統在這兒是 Red Hat Linux (2.4.18-14)若是你修改爲1就是WinXP了)
timeout=3 (注:timeout表示默認等待的時間,這兒是3秒鐘。超過3秒,用戶尚未做出選 擇的話,系統將自動選擇默認的操做系統;固然你能夠改爲任何你樂意的時間)
splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz (注:指定開機畫面文件splash.xpm.gz的位置)
title Red Hat Linux (2.4.18-14) (注:表示Red Hat Linux的菜單項)
root (hd0,0) (注:表示第一個硬盤第一個分區,這裏的root和系 統內的root不是一碼事!詳細以下說明)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ (注:指定內核的位置,詳細說明以下 文)
initrd /boot/initrd-2.4.18-14.img (注:初始化)
title Microsoft Windows XP (注:表示Microsoft Windows XP的菜單項)
map (hd0) (hd1) (注:map是命令,詳細以下)
map (hd1) (hd0)
root (hd1,0) (注:這是指第二個硬盤(從硬盤)上第一個分區)
chainloader (hd1,0)+1 (注:鏈式裝入器,裝入一個扇區的數據而後把引導 權交給它。詳細說明以下)
makeactive
boot
(注: 在 Linux 中,當談到 "root" 文件系統時,一般是指主 Linux 分區。可是,GRUB 有它本身的 root 分區定義。GRUB 的 root 分區是保存 Linux 內核的分區。這多是您的正式 root 文件系統,也可能不是。咱們討論的是 GRUB,須要指定 GRUB 的 root 分區。進入 root 分區時,GRUB 將把這個分區安裝成只讀型,這樣就能夠從該分區中裝入 Linux 內核。GRUB 的一個很「酷」的功能是它能夠讀取本機的 FAT、FFS、minix、ext2 和 ReiserFS 分區.到目前爲止,您可能會感到一點疑惑,由於 GRUB 所使用的硬盤/分區命名約定與 Linux 使用的命名約定不一樣。在Linux 中,第一個硬盤的第五個分區稱做 "hda5"。而 GRUB 把這個分區稱做 "(hd0,4)"。GRUB 對硬盤和分區的編號都是從 0 開始計算。另外,硬盤和分區都用逗號分隔,整個表達式用括號括起。如今,能夠發現若是要引導 Linux 硬盤 hda5,應輸入 "root (hd0,4)"。
知道了內核在哪兒,還要具體指出哪一個文件是內核文件,這就是kernel的工做。
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/說明/boot/vmlinuz-2.4.18-14就是要載入的內核。後面的都是傳遞給內核的參數。root=LABEL=/ 就是linux的硬盤分區表示法,ro是readonly的意思。initrd用來初始的linux p_w_picpath,並設置相應的參數。
命令map:當你有兩塊硬盤,一個沒法從第二塊硬盤啓動的操做系統,例如Windowsxp,就可使用map命令.你可以將hd0映射爲hd1,將hd1映射爲hd0。換句話說,你能夠虛擬的交換兩個硬盤而啓動所須要的操做系統 。命令形式以下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
GRUB 使用了「鏈式裝入器」(chainloader)。鏈式裝入器從分區 (hd1,0) 的引導記錄中裝入winxp本身的引導裝入器,而後引導它。這就是這種技術叫作鏈式裝入的緣由 -- 它建立了一個從引導裝入器到另外一個的鏈。這種鏈式裝入技術能夠用於引導任何版本的 DOS 或 Windows。
GRUB的配置文件要簡單就這麼 簡單,若是你要更個性化一點,試一試把「color light-gray/blue 」加在default語句的下面,下一次啓動GRUB時,看看有什麼變化,再試一試「color light-blue/red",驚喜嗎? 有趣吧! )
3 如何使用grub?
3.1 安裝
你能夠從ftp://alpha.gnu.org/pub/gnu/grub 下載GRUB的源代碼。
獲得文件grub-0.5.96.1.tar.gz,因此這樣作:
# tar -xvzf grub-0.5.96.1.tar.gz
這個命令將解開的文件和目錄放在一個名爲grub-0.5.96.1的目錄中。如今運行如
下命令:
php
- #cd grub-0.5.96.1
- # ./configure
若是你想定製GRUB,使之包含流行的文件系統和對網卡的支持,或者刪除你不須要的網卡,能夠運行以下命令:
# ./configure --help
這個命令將輸出全部的命令選項。如今可使用—enable和—disable選項增長或
刪除對特定網卡的支持。(注意:GRUB支持網絡啓動)
爲了開始編譯過程,鍵入以下命令:
# make
# make install
至此你已經爲安裝GRUB真正作好了準備。
將GRUB的相關文件保存在諸如/boot/grub的目錄中是一個好主意。爲此,按以下步驟:
1.默認狀態下,GRUB全部文件將安裝在/usr/share/grub/i386-pc(或者在
/usr/local/share/grub/i386-pc目錄下,這隻取決於你的shell變量的設置。)
2.創建一個叫作/boot/grub的目錄,而後拷貝下列文件到這個目錄:
stage1 stage2 * stage1 5
稍候將解釋這些文件。同時也要把GRUB(可能在/usr/sbin或者/usr/local/sbin
目錄下)拷貝到/boot/grub目錄下。
安裝GRUB能夠分爲三個單獨的步驟:
1.將「stage1」安裝到MBR中。
2.設置「stage2」的地址或者位置。
3.設置一個菜單或選項,用來決定啓動哪個操做系統。
使用下面的命令開始安裝GRUB。
#cd /boot/grub
# ./grub
這個命令根據BIOS的設置檢測硬件設備,同時產生一些輸出信息。這會花較長的時間。
end_request: I/O error, dev 02:00 (floppy), sector 0
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
TAB鍵可列出可能的命令列表。其它狀況下TAB會列出設備或文件名。相似下面的提示會出現:
grub>
如今,假設你將Linux安裝在了第一塊硬盤的第一個分區中或者/dev/hda1中。記住GRUB的命名規則,將上面的名字改成(hd0,0)。鍵入下面的命令:
grub> install (hd0,0)/boot/grub/stage1 (hd0) (hd0,0)/boot/grub/stage2
p (hd0,0)/boot/grub/menu.conf
如今分析一下這個命令的細節。
install
一個內置的命令,它告訴GRUB將(hd0,0)/boot/grub/stage1安裝到hd0的主引導紀錄中。
(hd0,0)/boot/grub/stage2
告訴GRUB stage2映象的位置。
p with the the following options: (hd0,0)/boot/grub/menu.conf
爲菜單的顯示設置配置文件。
下面是對這個命令用法的總結:
1.install
2.ource_of_stage1
3.where_to_install
4.source_of_stage2
5.p source_of_configuration_file
如今,你完成了硬盤上的基本安裝工做。
在軟盤上的安裝:
爲了在軟盤上安裝GRUB,你要會用「dd」命令,而且瞭解它是如何工做的。爲了作一張GRUB啓動盤,你要將stage1和stage2文件放到軟盤的開始扇區中。
安裝stage1到軟盤上:
插入一張已格式化的軟盤,鍵入命令:
# dd if=stage1 of=/dev/fd0 bs=512 count=1
命令的詳細說明以下:
if=input file
i.e., stage1
of=output file
i.e., floppy drive (this may be different on your computer)
bs=bytes to read and write
Here it is 512 bytes.
count=how many times to perform this operation
每次拷貝「bs」數目的塊到目標地址。
安裝stage2到軟盤
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
這裏的步驟同stage1的相同,除了一個seek選項外。Seek選項將調過一個「bs」。例如,在上面的命令中bs的值是512,這樣seek=1意味着將跳過軟盤上前512個字節 ,從513字節開始。這將使得第一步操做不會覆蓋stage1的前512字節。
如今你完成了基本的軟盤驅動器安裝。
若是已經安裝了grub要把grub從新安裝到主引導扇區上,只須要簡單打入makebootable命令就能夠了。
3.2 配置grub
grub啓動時會在/boot/grub/中尋找一個名字爲menu.lst的配置文件,若是找不到此文件則不進入菜單模式而直接進入命令行模式。
如今,咱們來看一下如何在啓動後進入各類操做系統,如何創建menu.conf文件。咱們就從GRUB支持的啓動過程開始。能夠有兩種方法來完成啓動過程:
·A.經過調用內核本地啓動
·B.連續啓動或者將控制轉給另外一個引導器
A模式啓動過程
1.配置跟設備或者告訴GRUB你的根文件系統。
2.告訴GRUB你的內核影像的位置,而後將參數傳送給內核。
3.從新啓動,試一下。
爲了啓動Linux,將內核以bzImage的文件名放在/boot/目錄中,跟文件系統是
/dev/hda1,或者GRUB中的(hd0,0)。啓動過程以下:
1.root (hd0,0) [This sets the root partition]
2.kernel /boot/bzImage root=/dev/hda1 [This sets the kernel]
B模式啓動過程(這種模式假設當前的分區中安裝了另外一個啓動管理器,例如LILO
或者NTLDR):
1.設置根分區但不要安裝它
2.激活這個分區
3.配置須要啓動的分區的第一個扇區
4.從新啓動,看一下效果。
咱們在試試啓動安裝在/dev/hdc1或者(hd1,0)的widows。啓動windows的過程以下:
1.rootnoverify (hd1,0)
2.makeactive
3.chainloader +1 [+1 sets the first sector of the current root
partition]
4.boot [transfers the control and quits GRUB]
menu.conf文件:它用於創建啓動多操做系統時的菜單。創建menu.conf並不難。它使用簡單的英語,就象你在這一節看到的那樣。
全部的菜單項目都以沒有逗號分隔的「title TITLENAME」開頭。你能夠隨意設置
TITLENAME。
設置Linux啓動菜單步驟以下:
1.設置標題
2.設置根分區
3.設置內核的相應參數
4.啓動
一個菜單例子:
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
前面有#的行是一個註釋。
創建啓動Windows 或者 DOS的菜單:
title Windoze
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
又或者:
title Microsoft Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
chainloader (hd1,0)+1
makeactive
boot
----
注 意:root和rootnoverify都是同樣的,把rootnoverify改爲root也行。不過通過實踐來看。有時引導win時,系統安裝好後, 是rootnoverify (hdX.Y)這樣形式的,這樣會出現windows起不來,出現什麼windows什麼文件損壞的狀況。這時,咱們就要把在grub中,引導 windows的那段中的rootnoverify改成root
root英文的意思就是根的意思,在這裏是讓linux知道本身所處的位置,也就是咱們所安裝linux的/根分區所在的位置 。
----
若是你安裝了兩個版本的Windows—一個是你本身用的,另外一個給你的家人用的—這樣第二個就沒法安裝,由於有提示說Windows已經安裝了。
有 一種簡單的方法能夠安裝兩個版本的Windows,即在啓動時隱藏一個分區而使用另外一個。你甚至能夠爲你的分區設置密碼保護,這樣能夠避免別人錯誤的加載 你的分區。下面介紹如何完成兩個Windows的安裝,hda1和hda2 或者 (hd0,0) 和(hd0,1),用到的命令有lock, password, hide 和 unhide。
創建windows 項目"My Entry":
title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
爲了更好的使用lock命令,你須要在配置文件開頭使用password命令。Password命令的語法以下:password secret(「secret」就是密碼)。任什麼時候候你均可以經過按p鍵兒輸入密碼。
創建Windows 項目"Family Entry"
title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
任何人均可以啓動這個項目,而無須輸入密碼。
這有一個使用password命令的有趣的竅門。爲了在缺省菜單列表或配置文件中隱藏某些項目,你可使用下面的命令加載一個定製的列表:
password secret
在這個命令中,「secret」是密碼,而/boot/grub/secret-list.conf是密碼文件。這樣作以前,你要先進入到根目錄或者給出全路徑名。例如:
password secret (hd0,4)/boot/grub/secret-list.conf
還 有一個更重要的命令是「map」。當你有兩塊硬盤,一個沒法從第二塊硬盤啓動的操做系統,例如Windows,就可使用map命令。例如,你可以將 hd0映射爲hd1,將hd1映射爲hd0。換句話說,你能夠虛擬的交換兩個硬盤而啓動所須要的操做系統 。命令形式以下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
啓動FreeBSD:
title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#----
這裏咱們調用了FreeBSD的啓動管理器。Root (hd0,4,a)由四個參數,是由於
FreeBSD對一個單獨分區進行了虛擬分割。咱們稱根分區爲「a」。若是FreeBSD佔
據了整個第二塊硬盤,這裏就應該是root (hd0,a)。這樣,就不是調用內核而是調用FreeBSD的啓動管理器,它要比調用內核更易使用。
(注意:推薦在使用OpenBSD和GNU/Hurd以前,要先試一下鏈式加載。)
如今你已經完成了基本的GRUB編譯、安裝和配置。你對GRUB瞭解的越多,就越會發現GRUB是一種控制啓動的易用和高效的方法。
各類GRUB命令:
default xx
代表xx是缺省的啓動項目
timeout yy
代表在yy秒後缺省啓動項目將啓動
fallback zz
在第一個啓動項目失敗後,過了timeout時間後,就將啓動zz項目。
color
這個命令將生成彩色菜單。它的語法是:color normal current_selection。這兩個域均可以有兩個值,形如foreground/background。例如:
color green/black or light-gray/blue
你也可使用相關的數字。
記住:全部的值都是從0開始,因此0是第一個
3.3 GRUB啓動盤
要製做引導盤,需執行一些簡單的步驟。首先,在新的軟盤上建立 ext2 文件系統。而後,將其安裝,並將一些 GRUB 文件複製到該文件系統,最後運行 "grub" 程序,它將負責設置軟盤的引導扇區。
將一張空盤插入 1.44MB 軟驅,輸入:
# mke2fs /dev/fd0
建立了 ext2 文件系統後,須要安裝該文件系統:
# mount /dev/fd0 /mnt/floppy
如今,須要建立一些目錄,並將一些關鍵文件(原先安裝 GRUB 時已安裝了這些文件)複製到軟盤:
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一個步驟,就能獲得可用的引導盤。
在linux bash中,從 root 用戶運行「grub」,該程序很是有趣並值得注意,由於它其實是GRUB 引導裝入器的半功能性版本。儘管 Linux 已經啓動並正在運行,您仍能夠運行 GRUB 並執行某些任務,並且其界面與使用 GRUB 引導盤或將 GRUB 安裝到硬盤 MBR 時看到的界面(即GRUB控制檯)徹底相同。
在 grub> 提示符處,輸入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
如今,引導盤完成了。
如 果要把GRUB裝到硬盤上,也很容易。這個過程幾乎與引導盤安裝過程同樣。首先,須要決定哪一個硬盤分區將成爲 root GRUB 分區。在這個分區上,建立 /boot/grub 目錄,並將 stage1 和 stage2 文件複製到該目錄中,能夠經過從新引導系統並使用引導盤,或者使用駐留版本的 GRUB 來執行後一步操做。在這兩種狀況下,啓動 GRUB,並用 root 命令指定 root 分區。例如,若是將 stage1 和 stage2 文件複製到 hda5 的 /boot/grub 目錄中,應輸入 "root (hd0,4)"。接着,決定在哪裏安裝 GRUB -- 在硬盤的 MBR,或者若是與 GRUB 一塊兒使用另外一個「主」引導裝入器,則安裝在特定分區的引導記錄中。若是安裝到 MBR,則能夠指定整個磁盤而沒必要指定分區,以下(對於 hda):
grub> setup (hd0)
若是要將 GRUB 安裝到 /dev/hda5 的引導記錄中,應輸入:
grub> setup (hd0,4)
如今,已安裝 GRUB。引導系統時,應該當即以 GRUB 的控制檯方式結束(若是安裝到 MBR)。如今,應建立引導菜單,這樣就沒必要在每次引導系統時都輸入那些命令。
從軟盤啓動grub
製做啓動盤後能夠用軟盤啓動引導硬盤上的操做系統, 插入製做好的啓動軟盤,進入BIOS設定軟盤啓動。軟盤啓動成功後就會進入grub的命令行模式
grub>
要啓動一個操做系統,首先指定引導哪一個分區上的系統,例如要引導指第一個硬盤上的第一個分區的操做系統,先鍵入
grub>root (hd0,0)
接着若是要啓動的是Windows系統,鍵入
grub>chainloader (hd0,0)+1
注意(hd0,0)要隨着硬盤和分區的不一樣而改變數字。
若是要引導Linux或其餘系統,應鍵入
grub>kernel (hd0,0)/boot/vmlinuz root=/dev/hda1
注意hda1參數也要隨着硬盤和分區的不一樣而改變,如從第二個硬盤的第一個分區引導則用hdb1。
最後敲入boot就能夠啓動系統了。
在任什麼時候候不能肯定命令或者命令的參數均可以按Tab得到相關的幫助。用上下鍵能夠得到命令的歷史記錄。其實這些命令就是menu.lst的啓動描述,您也能夠根據那些描述來本身鍵入啓動命令,最後敲入boot就能夠引導系統了。
4 GRUB的交互性
GRUB 最好的優勢之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。若是更新內核或更改它在磁盤上的位置,沒必要從新安裝 GRUB。事實上,若有必要,只要更新 menu.lst 文件便可,一切將保持正常。
只 有少數狀況下,才須要將 GRUB 引導裝入器從新安裝到引導記錄。首先,若是更改 GRUB root 分區的分區類型(例如,從 ext2 改爲 ReiserFS),則須要從新安裝。或者,若是更新 /boot/grub 中的 stage1 和 stage2 文件,因爲它們來自更新版本的 GRUB,頗有可能要從新安裝引導裝入器。其它狀況下,能夠沒必要理睬!
GRUB的最大的特色就是交互性特別強。在開機時,按一下「c」,將進入GRUB 控制檯。顯示以下:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
歡迎使用 GRUB 控制檯。如今,再研究命令:
將經過GRUB 控制檯繞過lilo來啓動RedHat linux,
grub> root (h
現 在,按一次 Tab 鍵。若是系統中有多個硬盤,GRUB 將顯示可能完成的列表,從 "hd0" 開始。若是隻有一個硬盤,GRUB 將插入 "hd0,"。若是有多個硬盤,繼續進行,在 ("hd2") 中輸入名稱並在名稱後緊跟着輸入逗號,但不要按 Enter 鍵。部分完成的 root 命令看起來以下:
grub> root (hd0,
如今,繼續操做,再按一次 Tab 鍵。GRUB 將顯示特定硬盤上全部分區的列表,以及它們的文件系統類型。在個人系統中,按 Tab 鍵時獲得如下列表:
grub> root (hd0, (tab,按tab一下鍵)
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0x6
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x7
Partition num: 5, Filesystem type is ext2fs, partition type 0x83
Partition num: 6, Filesystem type is fat, partition type 0xb
Partition num: 7, Filesystem type is fat, partition type 0xb
Partition num: 8, Filesystem type is ext2fs, partition type 0x83
Partition num: 9, Filesystem type unknown, partition type 0x82
如您所見,GRUB 的交互式硬盤和分區名稱實現功能很是有條理。這些,只須要好好理解 GRUB 新奇的硬盤和分區命名語法,而後就能夠繼續操做了
grub> root (hd0,8)
如今已安裝了 root 文件系統,到裝入內核的時候了
grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
[Linux-bzImage, setup=0x1200, size=0xe1a30]
您已經安裝了 root 文件系統並裝入了內核。如今,能夠引導了。只要輸入 "boot",Linux 引導過程就將開始。是否是很cool啊,GRUB的menu.lst更像一個linux下的腳本程序。
5 常見grub除錯方法的思路
首先進去Linux的rescue模式!
用軟盤或光盤啓動,而後在啓動的提示符輸入:linux rescue
按照提示進入一個Shell狀態,你能夠到/mnt/下面看到一個sysp_w_picpath這麼目錄,進去之後,就是你安裝linux的/分區.
使用命令將根分區變爲當前目錄的根分區:chroot /mnt/sysp_w_picpath
而後轉到/sbin/這個目錄中.
使用fdisk -l 顯示當前分區狀況,而後使用#grub-install /dev/hdx(x爲你使用的是那塊硬盤安裝的,通常狀況下是hda)
使用exit推出chroot,再使用exit退出linux rescue模式,系統將從新啓動!取出光盤,應該能夠看到grub安裝好了.
在具體的環境中,編輯/boot/grub/grub.conf文件和menu.lst文件.linux