grub 配置引導程序

Gentoo Logo

[ << ] [ < ] [ 主頁 ] [ > ] [ >> ]


10. 配置引導程序

內容:

10.a. 做出您的選擇

介紹

現在,您已經配置並編譯好了內核,必需的一些系統配置文件也已經就位,是時候安裝一個叫做引導程序的程序來“引燃”您的內核並啓動系統了。

對於x86,Gentoo Linux提供了GRUBLILO

但在安裝bootloader之前,我們要告訴您如何配置framebuffer(前提當然是您想使用它)。在framebuffer的幫助下,您系統的Linux命令行將擁有(有限的)圖形特性(例如使用Gentoo提供的漂亮的bootsplash圖片)。

可選:Framebuffer

如果您已經爲您的內核加上了framebuffer支持(或者您使用genkernel的默認內核配置),您就可以在bootloader配置文件中加入一個vga和/或一個video內核參數來啓用它。

首先,您需要知道您使用的是什麼類型的framebuffer設備。如果您用的是加過Gentoo補丁的內核源代碼(例如gentoo-sources),您將可以選擇uvesafb作爲VESA驅動。這樣的話,您使用的就是uvesafb驅動,您將不需要設置vga參數。否則您使用的就是vesafb驅動,您將需要設置vga參數。

vga參數用來控制您的vesafb framebuffer屏幕的分辨率和顏色深度。正如/usr/src/linux/Documentation/fb/vesafb.txt(您安裝內核源碼包的同時就會安裝這一文件)裏說明的那樣,您需要將與您想使用的分辨率和色深相對應的VESA數值傳遞給此參數。

下表列出了可用的分辨率和對應的顏色深度,您在裏面可以找到需要傳遞給vga參數的值。


640x480 800x600 1024x768 1280x1024
256 0x301 0x303 0x305 0x307
32k 0x310 0x313 0x316 0x319
64k 0x311 0x314 0x317 0x31A
16M 0x312 0x315 0x318 0x31B

video語句用來控制framebuffer的顯示參數。此語句中需指定欲使用的framebuffer驅動以及你想啓用的控制語句。/usr/src/linux/Documentation/fb/vesafb.txt文件裏列出了所有變量。最常用的選項是:

控制選項 描述
ywrap 假設顯卡支持顯存回捲操作(也就是說顯存裏的數據填充到盡頭的時候會接着從起始處繼續)
mtrr:n 設置MTRR寄存器. n 可以是:
0 - 禁用
1 - 不使用cache
2 - write-back
3 - write-combining
4 - write-through
模式 (只針對uvesafb)
設定分辨率,顏色深度和刷新率。 例如,1024x768-32@85對應的分辨率是1024x768,32位色深和85Hz的刷新率。

最後這兩個參數的內容可能類似這樣vga=0x318 video=vesafb:mtrr:3,ywrap或者video=uvesafb:mtrr:3,ywrap,1024x768-32@85。將它們記下來;很快您將用到它們。

接下來要繼續安裝GRUBLILO

10.b. 默認:使用GRUB

瞭解GRUB的術語

理解GRUB最重要的在於熟悉它如何表述硬盤驅動器和分區。在GRUB中,您的Linux分區/dev/sda1將很可能都被稱爲(hd0,0)。請注意hd0,0兩邊的括號——它們是必須加上的。

硬盤是從0而不是從“a”開始,分區從0而不是1開始。要明確的是,hd設備只指硬盤,而不包括atapi-ide設備,例如cdrom播放器和刻錄機。同樣的標識構造方式也適用於SCSI驅動器。(正常情況下,除非BIOS被配置爲從SCSI驅動器引導,否則SCSI硬盤的標識數字會比IDE的高。)當您要求BIOS從一個不同的硬盤引導時(例如您的主IDE接口上的從盤),那個硬盤就會被視爲hd0

假設您有一個硬盤是/dev/sda,還有兩個分別是/dev/sdb/dev/sdc,那麼/dev/hdd7將會被GRUB標識爲(hd1,6)。聽起來這有些不合常理,確實如此。但正如我們即將見到的,GRUB爲您提供了一個tab補全機制,這將大大方便您的操作。即使您擁有許多的硬盤和分區,而且對GRUB的數字標識方案不甚瞭解,也不用怕。

我們已經有了一些感覺了,是時候安裝GRUB了。

安裝GRUB

要安裝GRUB,首先讓我們emerge它:

代碼 2.1: 安裝GRUB

# emerge grub

儘管現在已經安裝完GRUB,我們仍需要爲其寫一個配置文件,並將其安置到硬盤的主引導記錄中,使它能自動引導您新創建的內核。您可以使用nano(或其他可用的編輯器)來創建配置文件/boot/grub/grub.conf

代碼 2.2: 創建/boot/grub/grub.conf

# nano -w /boot/grub/grub.conf

現在我們將詳細地寫一個grub.conf。您在下面的內容中可以找到兩個可能的針對本指南中前面章節給出的分區方式例子的grub.conf。我們只詳細地評述第一個grub.conf。確保您使用您自己的內核鏡像文件名,以及如果有的話,您自己的的initrd鏡像文件名。

  • 第一個grub.conf是爲未使用genkernel來構建內核的用戶準備的
  • 第二個grub.conf則是爲使用genkernel來構建內核的用戶準備的

注意: Grub根據BIOS來決定設備名。如果你改變了你的BIOS設定,你的設備字母和序號也會改變。比如如果你改變了你的設備的啓動順序,你就需要改變你的grub配置。

注意: 如果您使用JFS來作爲root文件系統,您就必須kernel那行添加上“ro”參數,因爲JFS文件系統在其允許被加載爲可讀寫狀態前需要使用這個參數來重放它的日誌。

代碼 2.3: 不使用genkernel的用戶的grub.conf

# 默認選擇哪個列表來引導。0表示第一個, 1表示第二個,以此類推。
default 0
# 引導默認列表前等待多少秒
timeout 30
# 使用漂亮、“臃腫”的spalsh圖像來增加一點趣味:)
# 如果您沒有安裝顯卡,請將這行註釋掉

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 2.6.24-r5
# 內核鏡像(或者操作系統)所在分區
root (hd0,0)
kernel /boot/kernel-2.6.24-gentoo-r5 root=/dev/sda3

title Gentoo Linux 2.6.24-r5 (rescue)
# 內核鏡像(或者操作系統)所在分區
root (hd0,0)
kernel /boot/kernel-2.6.24-gentoo-r5 root=/dev/sda3 init=/bin/bb

# 接下來的四行只有在您與Windows系統進行雙啓動的情況下才需要。
# 本例中,windows系統位於/dev/sda6。
title Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

代碼 2.4: 使用genkernel的用戶的grub.conf

default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 2.6.24-r5
root (hd0,0)
kernel /boot/kernel-genkernel-x86-2.6.24-gentoo-r5 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/sda3
initrd /boot/initramfs-genkernel-x86-2.6.24-gentoo-r5

# 只有在雙啓動的情況下才需要以下內容
title Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

如果您使用與此不同的分區方案和/或內核鏡像,請相應地進行調整。無論怎樣,請確保緊跟在GRUB設備(例如(hd0,0))後面的是相對於掛載點的路徑,而不是根目錄。換句話說,(hd0,0)/grub/splash.xpm.gz的實際目標是/boot/grub/splash.xpm.gz,因爲(hd0,0)就是/boot分區。

另外,如果您選擇使用不同的分區方案並且沒有將/boot置於一個獨立的分區,上述示例代碼中/boot前綴實際上是必需的。如果您使用我們所建議的分區方案,則不一定非要使用/boot前綴,但即便加了它,由於/boot分區裏有一個boot符號鏈接指向當前目錄,也可以正常工作。簡單的說,無論您是否定義了一個獨立的/boot分區,上述例子應該都能正常工作。

如果您需要傳遞任何其他的參數給內核,簡單地在內核命令後面加上它們就可以了。我們已經傳遞了一個參數(root=/dev/sda3real_root=/dev/sda3),但您也可以加上其他的,例如我們前面討論過的爲framebuffer加上video和/或vga參數等等。

如果您使用的是2.6.7或更高版本的內核,並且您使用硬盤跳線來使主板的BIOS能正確處理大硬盤,那麼在啓動內核時您還需要附加sda=stroke的參數。請把sda替換成需要這個參數的設備。

genkernel用戶需知道他們的內核使用與安裝光盤相同的啓動參數。例如,若您有SCSI設備時,您就需要添加doscsi這個內核啓動參數。

現在請保存grub.conf文件並退出。您仍需要將GRUB安裝到MBR(主引導記錄),以便重啓時GRUB能自動執行。

GRUB的開發者推薦使用grub-install。儘管如此,如果在某些情況下grub-install無法正常工作,您依然可以選擇進行手動安裝GRUB。

默認:使用grub-install安裝GRUB或者備選:使用手動指令安裝GRUB繼續。

默認:使用grub-install安裝GRUB

爲了安裝GRUB,您將需要執行grub-install命令。儘管如此,當我們處於chroot的環境時,grub-install並不能正常的工作。我們還需要創建一個/etc/mtab,在裏面列出所有已加載的文件系統。幸運的是,有一個簡單的方法來完成這個任務——將/proc/mounts拷貝成/etc/mtab,如果您沒有創建一個獨立的boot分區,請排除rootfs行。下面的命令在兩種情況下都可以正常工作:

代碼 2.5: 創建/etc/mtab

# grep -v rootfs /proc/mounts > /etc/mtab

現在我們就可以用grub-install來安裝GRUB了:

代碼 2.6: 執行grub-install

# grub-install --no-floppy /dev/sda

如果您還有更多與GRUB相關的問題,請查閱GRUB FAQ或者GRUB手冊

重啓系統章節繼續。

備選:使用手動指令安裝GRUB

您可以通過輸入grub來開始配置GRUB。呈現在您面前的將是grub命令提示符grub>。現在,您需要輸入正確的命令來將GRUB引導記錄安裝到您的硬盤中。

代碼 2.7: 啓動GRUB shell

# grub --no-floppy

注意: 如果您的系統中沒有任何的軟盤驅動器,在上面的命令後面加上--no-floppy選項,防止grub檢測(實際上不存在的)軟驅。

在此示例配置中,我們想讓我們安裝的GRUB可以從boot分區/dev/sda1讀取信息,同時我們將GRUB引導記錄安裝到硬盤的MBR(主引導記錄)中,這樣當打開電腦時您首先可以看到的就是GRUB引導的界面。當然,如果您安裝時沒有按照示例配置來做,請相應的更改一些命令。

GRUB的tab自動補全機制可以在GRUB中使用。例如,如果您輸入“root (”之後按下TAB鍵,一個設備列表就會呈現在您面前(例如hd0)。如果您輸入“root (hd0,”之後按下TAB鍵,系統又將返回一個已有的分區列表,以便您選擇(例如hd0,0)。

利用tab補全,設置GRUB將不會那麼困難。現在我們繼續設置GRUB,如何? :-)

代碼 2.8: 將GRUB安裝到硬盤主引導記錄中

grub> root (hd0,0)    (指定您的/boot目錄所在分區)
grub> setup (hd0) (將GRUB安裝到硬盤主引導記錄)
grub> quit (退出GRUB shell)

注意: 如果您想將GRUB安裝到某一個分區而不是硬盤主引導記錄中,您需要調整setup命令,使其指向正確的分區。例如,如果您要將GRUB安裝到/dev/sda3,對應的命令應該是setup (hd0,2)。但是隻有少數用戶需要這麼做。

如果您還有更多與GRUB相關的問題,請查閱GRUB FAQ或者GRUB手冊

重啓系統章節繼續。

10.c. 備選:使用LILO

安裝LILO

LILO,是LInuxLoader的簡稱,它是一個可靠且確實能擔當重任的Linux的bootloader。儘管如此,它缺少一些GRUB具有的特性(這正是目前GRUB之所以流行的原因)。LILO仍被人們使用的原因在於:在一些系統中,GRUB不能工作而LILO可以。當然,也有一些用戶是因爲熟悉它而仍堅持使用它。無論是什麼原因,Gentoo對兩個bootloader都提供了支持,看到這裏顯然您已經選擇了使用LILO。

安裝LILO是件輕而易舉的事;只需emerge就好了。

代碼 3.1: 安裝LILO

# emerge lilo

配置LILO

要配置LILO,您必須創建/etc/lilo.conf文件。打開一個您喜歡的編輯器(爲保持一致性,在本手冊中我們使用nano)然後創建它。

代碼 3.2: 創建/etc/lilo.conf

# nano -w /etc/lilo.conf

前面章節中我們已經提醒您記下您所創建的內核鏡像文件名。在接下來的示例lilo.conf中,我們使用的是示例的分區方案。這裏有兩個獨立的部分:

  • 一個是爲那些不使用genkernel建立內核的用戶準備的
  • 另一個是爲那些使用genkernel建立內核的用戶準備的

請確保您使用的是您自己的內核鏡像的文件名,以及(如果用到的話)您自己的initrd鏡像的文件名。

注意: 如果您使用JFS來作爲root文件系統,您就必須在每個引導項目的後面添加上形如append="ro"的一行內容,因爲JFS文件系統在其允許被加載爲可讀寫狀態前需要使用這個參數來重放它的日誌。

代碼 3.3: 示例/etc/lilo.conf

boot=/dev/sda             # 將LILO安裝到硬盤主引導扇區
prompt # 給用戶選擇其他引導項目的機會
timeout=50 # 引導默認引導項目前等待5秒鐘
default=gentoo # 當等待結束後引導“gentoo”項目

# 給不使用genkernel的用戶的
image=/boot/kernel-2.6.24-gentoo-r5
label=gentoo # 我們爲此引導項目起的名字
read-only # 以只讀root狀態開始。此處不要改變!
root=/dev/sda3 # 定位root文件系統

image=/boot/kernel-2.6.24-gentoo-r5
label=gentoo.rescue # 我們爲此引導項目起的名字
read-only # 以只讀root狀態開始。此處不要改變!
root=/dev/sda3 # 定位root文件系統
append="init=/bin/bb" # 啓動Gentoo的靜態急救shell

# 給使用genkernel的用戶的
image=/boot/kernel-genkernel-x86-2.6.24-gentoo-r5
label=gentoo
read-only
root=/dev/ram0
append="init=/linuxrc ramdisk=8192 real_root=/dev/sda3"
initrd=/boot/initramfs-genkernel-x86-2.6.24-gentoo-r5

# 下邊的兩行只有在您與Windows系統進行雙啓動的情況下才需要
# 在本例中,Windows位於/dev/sda6
other=/dev/sda6
label=windows

注意: 如果您使用了與此不同的分區方案和/或者內核鏡像,請進行相應的調整。

如果您需要爲內核傳遞任何額外的參數,可以在相應的啓動項目裏添加一個append語句。例如,我們加上video參數來啓用framebuffer:

代碼 3.4: 使用append來添加內核參數

image=/boot/kernel-2.6.24-gentoo-r5
label=gentoo
read-only
root=/dev/sda3
append="video=vesafb:mtrr,ywrap,1024x768-32@85"

如果您使用的是2.6.7或更高版本的內核,並且您使用硬盤跳線來使主板的BIOS能正確處理大硬盤,那麼在啓動內核時您還需要附加sda=stroke的參數。請把sda替換成需要這個參數的設備。

genkernel用戶需知道他們的內核使用與安裝光盤相同的啓動參數。例如,若您有SCSI設備時,您需添加doscsi這個內核啓動參數。

現在讓我們保存文件並退出。要最終完成,您還得運行/sbin/lilo,這樣LILO才能將/etc/lilo.conf應用到您的系統(也就是將其自身安裝到硬盤中)。請記住每當你安裝了一個新內核或改變了菜單的任何內容時,您也需要再運行一次/sbin/lilo

代碼 3.5: 完成LILO的安裝

# /sbin/lilo

如果您還有更多與LILO有關的問題,請參閱它的wikipedia頁面

現在請繼續閱讀重啓系統

10.d. 重啓系統

退出chroot的環境,卸載所有已掛載的分區。然後輸入您已經等待多時的那個魔術般的命令:reboot

代碼 4.1: 卸載所有分區和重啓

# exit
cdimage ~# cd
cdimage ~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot

當然您別忘了取出可引導的光盤盤,否則重啓後引導的將是這張光盤而不是您的新Gentoo系統。

當重啓進入到您新裝的Gentoo系統之後,請閱讀結束Gentoo的安裝來完成剩下的工作。


[ << ] [ < ] [ 主頁 ] [ > ] [ >> ]


打印

查看全部

更新於2008年 9月 16日

總結: x86架構存在幾種引導程序。它們中的每一種都有自己的配置方法。我們會一步步來告訴你怎樣根據你的需求配置一個引導程序。

Sven Vermeulen
作者

Grant Goodyear
作者

Roy Marples
作者

Daniel Robbins
作者

Chris Houser
作者

Jerry Alexandratos
作者

Seemant Kulleen
Gentoo x86開發人員

Tavis Ormandy
Gentoo Alpha開發人員

Jason Huebel
Gentoo AMD64開發人員

Guy Martin
Gentoo HPPA開發人員

Pieter Van den Abeele
Gentoo PPC開發人員

Joe Kallar
Gentoo SPARC開發人員

John P. Davis
編輯

Pierre-Henri Jondot
編輯

Eric Stockbridge
編輯

Rajiv Manglani
編輯

Jungmin Seo
編輯

Stoyan Zhekov
編輯

Jared Hudson
編輯

Colin Morey
編輯

Jorge Paulo
編輯

Carl Anderson
編輯

Jon Portnoy
編輯

Zack Gilburd
編輯

Jack Morgan
編輯

Benny Chuang
編輯

Erwin
編輯

Joshua Kinard
編輯

Tobias Scherbaum
編輯

Xavier Neys
編輯

Joshua Saddler
編輯

Gerald J. Normandin Jr.
審校

Donnie Berkholz
審校

Ken Nowack
審校

Lars Weiler
投稿

Hans Joanphan
譯者

吳傳文
譯者

楊珂
譯者

陳永驥
譯者

婁東斌
譯者

餘雷
譯者

葉寶泰
譯者

楊小廣
譯者

vivian.ye
譯者

王國輝
譯者

賈震
譯者

餘鈺煒
譯者

陳代焱
譯者

範華
譯者

張樂
譯者

沈辰俊
譯者

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark


Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章