1 一個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的位置,也可以splash /boot/logo/800x600x8.img) 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 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)的windows。啟動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的/根分區所在的位置 。 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, 現在已安裝了 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文件 簡化: 1.安裝盤啟動 2.進入linux rescue模式 3.一系列鍵盤以及幾項簡單的配制,過後就[繼續]了。。。這個過程,我不說了,比較簡單。 4.然後會出現這樣的字符 sh# 5. sh#grub 會出現這樣的字符:grub>我們就可以在這樣的字符後面,輸入:grub>root (hdX,Y) grub>setup (hd0) 如果成功會有一個sUCcessful...... 這裡的X,如果是一個盤,就是0,如果你所安裝的linux的根分區在第二個硬盤上,那X就是1了;Y,就是裝有linux系統所在的根分區。 setup (hd0)就是把GRUB寫到硬盤的MBR上。 其他: grub菜單項丟失,只有字符grub>時的處理方法: grub>cat (hd0,0) /root/grub/grub.conf(為了看參數。) grub>root (hd0,1) grub>kernel (hd0,0) /boot/vmlinuz-2.4.18-11 ro root=/dev/hda2 grub>initrd (hd0,0) /boot/initrd-2.4.18-11.img grub>boot 如果看不明白,可以參考後面的命令慢慢看,這裡不做注釋,促使大家學習,哈哈 98先裝,用的是單獨的硬盤,4.3G,那時候,LINUX8還沒有到我手中 後來到了,在家中安裝好了,選擇GRUB,就會有DOS的一個菜單,我的是在主分區 到了公司,把LINUX掛在第一個盤的位置,那個盤掛在第四個盤的位置(這個無所謂) 然後GRUB配置如下 default=0 timeout=10 splashimage=(hd0,0)/grub/splash.xpm.gz title Red Hat Linux (2.4.18-14) root (hd0,0) kernel /vmlinuz-2.4.18-14 ro root=LABEL=/ initrd /initrd-2.4.18-14.img title DOS rootnoverify (hd1,0) makeactive chainloader (hd1,0)+1 map (hd0) (hd1) map (hd1) (hd0) boot 下面是GRUB的可用命令列表: #大部分命令我們不常用,而且我也沒有每個都試驗! 關於下面將要用到的三種模式的解釋: GRUB的用戶界面有三種:命令行模式,菜單模式和菜單編輯模式 (a) 命令行模式: 進入命令行模式後GRUB會給出一個命令提示符`grub>`,此時就可以鍵入命令,按回車執行。此模式下可執行的命令是在menu.lst中可執行的命令的一個子集。此模式下允許類似於Bash shell的命令行編輯功能: 或 光標右移一個字符 或 光標左移一個字符 到這一行的開頭 或 到行尾 或 刪除光標處的字符 或 刪除光標左邊的字符 刪除光標右邊的所有字符(包括光標處的字符) 刪除光標左邊的所有字符(包括光標處的字符) 恢復上次刪除的字符串到光標位置 或 歷史記錄中的上一條命令 或 歷史記錄中的下一條命令 在命令行模式下鍵有補全命令的功能,如果你敲入了命令的前一部分,鍵入系統將列出所有可能以你給出的字符串開頭的命令。如果你給出了命令,在命令參數的位置按下鍵,系統將給出這條命令的可能的參數列表,具體的可用命令集將在後面給出。 (b) 菜單模式 當存在文件/boot/grub/menu.lst文件時系統啟動自動進入此模式。菜單模式下用戶只需要用上下箭頭來選擇他所想啟動的系統或者執行某個命令塊,菜單的定義在menu.lst文件中,你也可以從菜單模式按鍵進入命令行模式,並且可以按鍵從命令行模式返回菜單模式。菜單模式下按鍵將進入菜單編輯模式。 (c) 菜單編輯模式 菜單編輯模式用來對菜單項進行編輯改變,其界面和菜單模式的界面十分類似,不同的是菜單中顯示的是對應某個菜單項的命令列表。如果在編輯模式下按下,則取消所有當前對菜單的編輯並回到菜單模式下。在編輯模式下選中一個命令行,就可以對這條指令進行修改,修改完畢後按下,GRUB將提示你確認並完成修改。如果你想在當前命令列表中增加一條命令,按在當前命令的下面增加一條指令,按在當前命令前處增加一條指令。按刪除一條指令。 僅用於菜單的命令(不包括菜單項內部的啟動命令) default num 設置菜單中的默認選項為num(默認為0,即第一個選項),超時將啟動這個選項 fallback num 如果默認菜單項啟動失敗,將啟動這個num後援選項。 password passwd new-config-file 關閉命令行模式和菜單編輯模式,要求輸入口令,如果口令輸入正確,將使用new-config-file 作為新的配置文件代替menu.lst,並繼續引導。 timeout sec 設置超時,將在sec秒後自動啟動默認選項。 title name ... 開始一個新的菜單項,並以title後的字串作為顯示的菜單名。 在菜單(不包括菜單項內部的命令)和命令行方式下都可用的命令 bootp 以BOOTP協議初始化網絡設備 color normal [highlight] 改變菜單的顏色,normal是用於指定菜單中非當前選項的行的顏色,highlight是用於指定當前菜單選項的顏色。如果不指定highlight,GRUB將使用normal的反色來作為highlight顏色。指定顏色的格式是“前景色/背景色”,前景色和背景色的可選列表如下: * black * blue * green * cyan * red * magenta * brown * light-gray 下面的顏色只能用於背景色 * dark-gray * light-blue * light-green * light-cyan * light-red * light-magenta * yellow * white 你可以在前景色前加上前綴"blink-",產生閃爍效果,你可以在menu.lst中加上下面這個選項來改變顏色效果: title OS-BS like color magenta/blue black/magenta device drive file 在GRUB命令行中,把BIOS中的一個驅動器drive映射到一個文件file。你可以用這條命令創建一個磁盤映象或者當GRUB不能真確地判斷驅動器時進行糾正。如下 grub> device (fd0) /floppy-image grub> device (hd0) /dev/sd0 這條命令只能在命令行方式下使用, 是個例外。 dhcp 用DHCP協議初始化網絡設備。目前而言,這條指令其實就是bootp的別名,效果和bootp一樣。 hide partition 這條指令僅僅對DOS和WINDOWS有用,當在一個硬盤上存在多個DOS/WIN的主分區時,有時需要這條指令隱藏其中的一個或幾個分區,即在分區表中設置“隱藏”位。 rarp 用RARP協議初始化網絡設備。 setkey to_key from_key 改變鍵盤的映射表,將from_key映射到to_key,注意這條指令並不是交換鍵映射,如果你要交換兩個鍵的映射,需要用兩次setkey指令,如下: grub> setkey capslock control grub> setkey control capslock 其中的鍵必須是字母,數字或者下面的一些代表某一鍵的字符串: `escape, `exclam, `at, `numbersign, `dollar, `percent, `caret, `ampersand, `asterisk, `parenleft, `parenright, `minus, `underscore, `equal, `plus, `backspace, `tab, `bracketleft, `braceleft, `bracketright, `braceright, `enter, `control, `semicolon, `colon, `quote, `doublequote, `backquote, `tilde, `shift, `backslash, `bar, `comma, `less, `period, `greater, `slash, `question, `alt, `space, `capslock, `FX (`X is a digit), and `delete. 下面給出了它們和鍵盤上的鍵的對應關系: `exclam=`! `at=`@ `numbersign=`# `dollar=`$ `percent=`% `caret=`^ `ampersand=`& `asterisk=`* `parenleft=`( `parenright=`) `minus=`- `underscore=`_ `equal=`= `plus=`+ `bracketleft=`[ `braceleft=`{ `bracketright=`] `braceright=`} `semicolon=`; `colon=`: `quote=` `doublequote=`" `backquote=`` `tilde=`~ `backslash=` `bar=` `comma=`, `less=` `slash=`/ `question=`? `space=` unhide partition 僅僅對DOS/WIN分區有效,清除分區表中的“隱藏”位。 僅用於命令行方式或者菜單項內部的命令 blocklist file 顯示文件file在所占磁盤塊的列表。 boot 僅在命令行模式下需要,當參數都設定完成後,用這條指令啟動操作系統 cat file 顯示文件file的內容,可以用來得到某個操作系統的根文件系統所在的分區,如下: grub> cat /etc/fstab chainloader [`--force] file 把file裝入內存進行chainload,除了能夠通過文件系統得到文件外,這條指令也可以用磁盤塊列表的方式讀入磁盤中的數據塊,如+1`指定從當前分區讀出第一個扇區進行引導。如果指定了`--force`參數,則無論文件是否有合法的簽名都強迫讀入,當你在引導SCO UnixWare時需要用這個參數。 cmp file1 file2 比較文件的內容,如果文件大小不一致,則輸出兩個文件的大小,如下: Differ in size: 0x1234 [foo], 0x4321 [bar] 如果兩個文件的大小一致但是在某個位置上的字節不同,則打印出不同的字節和他們的位移: Differ at the offset 777: 0xbe [foo], 0xef [bar] 如果兩個文件完全一致,則什麼都不輸出。 configfile FILE 將FILE作為配置文件替代menu.lst。 embed stage1_5 device 如果device是一個磁盤設備的話,將Stage1_5裝入緊靠MBR的扇區內。如果device是一個FFS文件系統分區的話,則將Stage1_5裝入此分區的第一扇區。如果裝入成功的話,輸出寫入的扇區數。 displaymem 顯示出系統所有內存的地址空間分布圖。 find filename 在所有的分區中尋找指定的文件filename,輸出所有包含這個文件的分區名。參數filename應該給出絕對路徑。 fstest 啟動文件系統測試模式。打開這個模式後,每當有讀設備請求時,輸出向底層例程讀請求的參數和所有讀出的數據。輸出格式如下: 先是由高層程序發出的分區內的讀請求,輸出:之後由底層程序發出的扇區讀請求,輸出:[磁盤絕對扇區偏移] 可以用install或者testload命令關閉文件系統測試模式。 geometry drive [cylinder head sector [total_sector]] 輸出驅動器drive的信息。 help [pattern ...] 在線命令幫助,列出符合pattern的命令列表,如果不給出參數,則將顯示所有的命令列表。 impsprobe 檢測Intel多處理器,啟動並配置找到的所有CPU。 initrd file ... 為Linux格式的啟動映象裝載初始化的ramdisk,並且在內存中的Linux setup area中設置適當的參數。 install stage1_file [`d] dest_dev stage2_file [addr] [`p] [config_file] [real_config_file] 這是用來完全安裝GRUB啟動塊的命令,一般很少用到。 ioprobe drive 探測驅動器drive所使用的I/O口,這條命令將會列出所有dirve使用的I/O口。 kernel file ... 裝載內核映象文件(如符合Multiboot的a.out,ELF,Linux zImage或bzImage,FreeBSD a.out,NetBSD a.out等等)。文件名file後可跟內核啟動時所需要的參數。如果使用了這條指令所有以前裝載的模塊都要重新裝載。 makeactive 使當前的分區成為活躍分區,這條指令的對象只能是PC上的主分區,不能是擴展分區。 map to_drive from_drive 映射驅動器from_drive到to_drive。這條指令當你在chainload一些操作系統的時候可能是必須的,這些操作系統如果不是在第一個硬盤上可能不能正常啟動,所以需要進行映射。如下: grub> map (hd0) (hd1) grub> map (hd1) (hd0) 這個就用來對付雙硬盤最過瘾!!!哈哈 module file ... 對於符合Multiboot規范的操作系統可以用這條指令來裝載模塊文件file,file後可以跟這個module所需要的參數。注意,必須先裝載內核,再裝載模塊,否則裝載的模塊無效。 modulenounzip file ... 同module命令幾乎一樣,唯一的區別是不對module文件進行自動解壓。 pause message ... 輸出字符串message,等待用戶按任意鍵繼續。你可以用(ASCII碼007)使PC喇叭發聲提醒用戶注意。 quit 退出GRUB shell,GRUB shell類似於啟動時的命令行模式,只是它是在用戶啟動系統後執行/sbin/grub才 進入,兩者差別不大。 read addr 從內存的地址addr處讀出32位的值並以十六進制顯示出來。 root device [hdbias] 將當前根設備設為device,並且試圖mount這個根設備得到分區大小。hdbias參數是用來告訴BSD內核在當前分區所在磁盤的前面還有多少個BIOS磁盤編號。例如,系統有一個IDE硬盤和一個SCSI硬盤,而你的BSD安裝在IDE硬盤上,此時,你就需要指定hdbias參數為1。 rootnoverify device [hdbias] 和root類似,但是不mount該設備。這個命令用在當GRUB不能識別某個硬盤文件系統,但是仍然必須指定根設備。 setup install_device [image_device] 安裝GRUB引導在install_device上。這條指令實際上調用的是更加靈活但是復雜的install指令。如果 image_device也指定了的話,則將在image_device中尋找GRUB的文件映象,否則在當前根設備中查找。 testload file 這條指令是用來測試文件系統代碼的,它以不同的方式讀取文件file的內容,並將得到的結果進行比較,如果正確的話,輸出的`i=X,filepos=Y`中的X,Y的值應該相等,否則就說明有錯誤。通常這條指令正確執行的話,之後我們就可以正確無誤地裝載內核。 uppermem kbytes 強迫GRBU認為高端內存只有kbytes千字節的內存,GRUB自動探測到的結果將變得無效。這條指令很少使用,可能只在一些古老的機器上才有必要。通常GRUB都能夠正確地得到系統的內存數量。 其中大部分命令我們不常用,建議在試驗的時候,做好相應的准備和備份工作。