GRUB學習筆記(轉自http://www.cnblogs.com/evilzy/archive/2008/03/30/1130173.html)

来源:http://www.cnblogs.com/renshengbuduanxuexi/archive/2016/01/13/5126254.html
-Advertisement-
Play Games

grub學習筆記1 首先要瞭解的幾個概念1.1 啟動管理器啟動管理器是存儲在磁碟開始扇區中的一段程式,例如,硬碟的MBR(Master Boot Record),在系統完成啟動測試後,如果系統是從MBR啟動,則BIOS(Basic Input/Output System)將控制傳送給MBR。然後存儲...


grub學習筆記
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 
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.配置需要啟動的分區的第一個扇區 
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/下麵看到一個sysimage這麼目錄,進去以後,就是你安裝linux的/分區. 
使用命令將根分區變為當前目錄的根分區:chroot /mnt/sysimage 
然後轉到/sbin/這個目錄中. 
使用fdisk -l 顯示當前分區情況,然後使用#grub-install /dev/hdx(x為你使用的是那塊硬碟安裝的,一般情況下是hda) 
使用exit推出chroot,再使用exit退出linux rescue模式,系統將重新啟動!取出光碟,應該可以看到grub安裝好了. 
在具體的環境中,編輯/boot/grub/grub.conf文件和menu.lst文件.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Web大前端時代之:HTML5+CSS3入門系列:http://www.cnblogs.com/dunitian/p/5121725.html文檔申明 字元編碼(UTF-8) 版本相容 1.省略引號:當屬性值不包括 、=、單引號、雙引號、空字元串時,屬性兩邊的引號可以省略: 2.省略屬性值具有...
  • 最近項目用到ini文件,讀取ini文件,方法如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections.Specialized;using ...
  • 在前面的系列博客中,我曾經介紹過,MongoDB資料庫的C#驅動已經全面支持非同步的處理介面,並且介面的定義幾乎是重寫了。本篇主要介紹MongoDB資料庫的C#驅動的最新介面使用,介紹基於新介面如何實現基礎的增刪改查及分頁等處理,以及如何利用非同步介面實現基類相關的非同步操作。
  • 報錯原因:與別的表有主外鍵關係解決方案:(1)db.Configuration.ProxyCreationEnabled = false;//加這個就不報錯了。 (2)只select需要的數據,把有關係的數據過濾掉。1 public List GetPosition()2 ...
  • 哈希表的使用Hashtable hashtable = new Hashtable();hashtable.ContainsValue(tmp);//判斷哈希表中有沒有tmphashtable.add(tmp,tmp);//加入哈希表DataSet的使用SqlDataAdapter sda = ne...
  • Icinga是Nagios的一個變種,配置,使用方式幾乎一樣,而且完全相容Nagios的插件。所以下麵的部署方案對Nagios同樣使用。它還推出了兩個中文版本,icinga-cn原版和icinga-pnp4nagios-cn,前者和Nagios幾乎一模一樣,只不過界面是中文的,而後者則集成了php4...
  • 環境的操作系統為 CentOS 6。1 進入終端2 執行 yum -y install python-setuptools 安裝python的包管理工具3 執行 yum -yeasy_install pip 安裝python的包管理工具 接著,創建一個Shadowsocks配置文件,放在哪裡都可以4...
  • 本系統是10月5日最新完整版本的Windows10安裝版鏡像,win10正式版,更新了重要補丁,提升應用載入速度,微軟和百度今天宣佈達成合作,百度成為win10Edge瀏覽器中國預設主頁和搜索引擎,系統增加了搜狗輸入法,安裝過程需要用戶手動創建個人賬戶等步驟,為保證系統的穩定性,win10為未激活版...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...