?? grub學習筆記.txt
字號:
grub學習筆記2007-04-29 22:511 首先要了解的幾個概念
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 Extd (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
splashimage=(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秒,用戶還沒有作出選 擇的話,系統將自動選擇默認的操作系統;當然你可以改成任何你樂意的時間)
splashimage=(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 image,并設置相應的參數。
命令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的目錄中。現在運行如
下命令:
#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.配置需要啟動的分區的第一個扇區
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -