掃盲行動之四:GRUB三步通

掃盲行動之四:GRUB三步通

朋友,你裝好linux後是不是每次啓動後系統就默認進入到linux,想讓它變成windows嗎?請修改你的引導裝入器吧(當然它不止這個功能)!由於現在的linux都喜歡用GRUB來引導,LILO已越來越少用了,所以我在這裏主要給大家講講GRUB這個東東!!

##################
# GRUB
的優點 #
##################
GRUB
是引導裝入器(boot loader) -- 它負責裝入內核並引導 Linux 系統。GRUB 還可以引導其它操作系統,如 FreeBSDNetBSDOpenBSDGNU HURD DOS,以及 Windows 9598NT 2000。儘管引導操作系統看上去是件平凡且瑣碎的任務,但它實際上很重要。如果引導裝入器不能很好地完成工作或者不具有彈性,那麼就可能鎖住系統,而無法引導計算機。另外,好的引導裝入器可以給您靈活性,讓您可以在計算機上安裝多個操作系統,而不必處理不必要的麻煩。
GRUB
是一個很棒的boot loader。它有許多功能,可以使引導過程變得非常可靠。例如,它可以直接從 FATminixFFSext2 ReiserFS 分區讀取 Linux 內核。這就意味着無論怎樣它總能找到內核。另外,GRUB 有一個特殊的交互式控制檯方式,可以讓您手工裝入內核並選擇引導分區。這個功能是無價的:假設 GRUB 菜單配置不正確,但仍可以引導系統。哦,對了 -- GRUB 還有一個彩色引導菜單。

更令人驚訝的是,這是一個自由軟件!!!

##################
# GRUB
菜單 #
##################
先來看一個例子,這是位於/boot/grub/目錄下的menu.lst文件。
此文件將在開機是產生一個菜單,包含有Debian linux,Windows2000,RedHat linux Mandrake linux,共四個選擇項。我一共分了8個區,一個fat160x6),一個ntfs0x7),三個ext2fs分區(0x83),一個swap分區(0x82)。ntfs用來裝win2000,三個ext2fs裝了三個linuxcfat16分區沒有裝任何東西。
#例子由此開始

######################

一個GRUB configure 的例子

######################

timeout 10
default 2

# --> Debian linux <--

title Debian linux
root (hd0,2)
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
initrd /boot/initrd-2.2.18.gz

# --> Debian END <--

# --> Windows
菜單選項 <--

title Windows2000
root (hd0,0)
chainloader +1

# --> Winddows
結束 <--

# --> RedHat linux
菜單選項 <--

title RedHat linux
root (hd0,8)
chainloader +1 #
在硬盤主引導分區裝了lilo,所以也用了chainloader

# --> RedHat linux
結束 <--

# --> Mandrake linux
菜單選項 <--

title Mandrake linux
root (hd0,5)
kernel /boot/vmlinuz-2.4.3-20mdk root=/dev/hda6 ro
initrd /boot/initrd-2.4.3-20mdk.img

# --> Mandrake linux
結束 <--

#例子到此結束

以符號井"#"開頭的行表示被註釋掉,沒有任何意義。

timeout
表示默認等待的時間,這兒是10秒鐘。超過10秒,用戶還沒有作出選擇的話,系統將自動選擇默認的操作系統。

默認的操作系統就是由default控制的。default後加一個數字n,表明是第n1個。需要注意的是,GRUB中,計數是從0開始的,第一個硬盤是hd0,第一個軟驅是fd0,等等。所以,default 2 表示默認的操作系統在這兒是 Redhat linux

接下來,正如你所想象的,title表示的是“Debian linux”菜單項。root (hd0,2)表示第一個硬盤,第三個分區。這兒的root linuxroot分區及其不同,此root非彼root也!

Linux 中,當談到 "root" 文件系統時,通常是指主 Linux 分區。但是,GRUB 有它自己的 root 分區定義。GRUB root 分區是保存 Linux 內核的分區。這可能是您的正式 root 文件系統,也可能不是。我們討論的是 GRUB,需要指定 GRUB root 分區。進入 root 分區時,GRUB 將把這個分區安裝成只讀型,這樣就可以從該分區中裝入 Linux 內核。GRUB 的一個很“酷”的功能是它可以讀取本機的 FATFFSminixext2 ReiserFS 分區。

到目前爲止,您可能會感到一點疑惑,因爲 GRUB 所使用的硬盤/分區命名約定與 Linux 使用的命名約定不同。在 Linux 中,第一個硬盤的第五個分區稱作 "hda5"。而 GRUB 把這個分區稱作 "(hd0,4)"GRUB 對硬盤和分區的編號都是從 0 開始計算。另外,硬盤和分區都用逗號分隔,整個表達式用括號括起。現在,可以發現如果要引導 Linux 硬盤 hda5,應輸入 "root (hd0,4)"

知道了內核在哪兒,還要具體指出哪個文件是內核文件,這就是kernel的工作。
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
說明/boot/vmlinuz-2.2.18 就是要載入的內核。後面的都是傳遞給內核的參數。root=/dev/hda3就是linux的硬盤分區表示法,ro是以readonly的意思。
initrd
用來初始的linux image,並設置相應的參數。

是不是感覺很簡單啊!再來看一看windows的定義段吧。
這裏,我添加了一項來引導 Windows2000。要完成此操作,GRUB 使用了“鏈式裝入器”(chainloader)。鏈式裝入器從分區 (hd0,0) 的引導記錄中裝入 win2000 自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS Windows

我的RedHat linux在硬盤主引導分區裝了lilo,所以也用了chainloader

GRUB
的配置文件要簡單就這麼簡單,如果你要更個性化一點,試一試把“color light-gray/blue ”加在default語句的下面,下一次啓動GRUB時,看看有什麼變化,再試一試“color light-blue/red",驚喜嗎? 有趣吧!

######################
# 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啊,GRUBmenu.lst更像一個linux下的腳本程序。

#####################
# 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 的一部分。例如,可以使用 GRUB 來執行網絡引導,引導 BSD 文件系統,或更多操作。另外,GRUB 有許多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,請閱讀 GRUB 出色的 GNU 文檔。只要在 bash 提示中輸入 "info grub" 就可以閱讀該文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章