四、GRUB 接口
GRUB 除了菜單模式,還提供了一個命令模式和 grub shell 。當系統啟動并顯示菜單時,按 c 鍵就可以進入命令模式。提示符是 grub> 。
如果你已經成功引導操作系統并登錄,可以在 shell 提示符下執行 grub ,這會啟動一個 grub shell。提示符也是 grub> 。
GRUB 能夠象 bash 一樣使用上下鍵來訪問 command history ,ctrl-u、ctrl-k、ctrl-l 等快捷鍵也可以使用。想要編輯菜單,可以按下 e 鍵;
想要新增一空白行,可以按下 o 鍵(當前行之后)或者 O 鍵(當前行之前)。想要刪除當前行,按下 d 鍵;ESC 鍵放棄當次修改并返回上級菜單。
有些命令只能在命令模式下,有些命令只能用于配置文件(菜單模式),有些命令在兩個模式下都可以使用。下面我們就介紹 GRUB 常用的命令。
五、GRUB 常用命令
5.1 只能用于配置文件的命令
下面這5個命令只能出現于配置文件中,分別是 :
a)default :定義默認引導的操作系統。0 表示第一個操作系統,1表示第2個,依此類推
b)fallback :如果 default 所指定的操作系統引導失敗,則默認引導由 fallback 指定的操作系統
c) hiddenmenu :用于啟動時隱藏菜單,除非在 timeout 之前按下 ESC 才能看到菜單。
d)timeout :定義多少秒內如果用戶沒有按下鍵盤上的某個按鍵,就自動引導 default 所指定的操作系統。
e)title :定義引導項目的名稱。
f)password :用于定義進入 GRUB 命令模式的密碼。你還可以為每個操作系統都定義一個密碼,方法是把 password 命令放在 title行之后。
而且每個操作系統的引導密碼可以不同,也可以和進入命令模式的那個密碼不同,最大程度的保證 GRUB 的安全。
5.2 只能用于命令模式或者 grub shell 的命令
a)device :用于定義 BIOS 中的磁盤設備和操作系統的磁盤設備之間的映射關系。
例如 device (hd0)/dev/hdb 把 BIOS 中的第一個硬盤相當于 Linux 的 /dev/hdb
b)serial :用于初始化一個串口設備。
例如 :serial –-unit=0 –-speed=9600 表示初始化 COM1(--unit=0),速率為 9600 Baud
不過 grub shell 下執行該命令會顯示 “無法識別的命令”
c)terminal :用于切換顯示輸出。有兩這個值可選 :console 和 serial 。當你把筆記本接到一個沒有顯示器/鍵盤的主機上時,執行
terminal serial 就可以在你的筆記本上操作這臺主機的 GRUB 了。執行 terminal console 把顯示輸出還原到該主機。
不過 grub shell 下執行該命令會顯示“無法識別的命令”
d)splashimage :用于定義啟動時的背景圖片。例如 splashimage /grub/splash.xpm.gz
經過測試,發現用 tarball 安裝的不支持該命令,這似乎是 redhat grub rpm 專有的。
e)blocklist :用于顯示某個文件在文件系統中的位置,以 block list 的形式顯示。例如 blocklist /vmlinuz
f)ca :用于顯示文件內容。由于 GRUB 可以直接訪問多種文件系統,所以可以用 cat (hd0,1)/etc/passwd 來在 GRUB 命令模式下查看 /etc/passwd 文件
g)root :用于指定含有 stage 文件的分區。如果有 /boot 分區,則 root device 就是 /boot 分區,否則
就是 / 分區。
h)rootnoverify :和 root 類似,但不會嘗試掛載該分區。例如用于指定 windows 操作系統所在的分區。
i)chainloader :用于加載另外一個 boot loader ,通常是用于加載 windows 的 boot loader 。它的參數是一個 block list ,
例如 chainloader (hd0,0)0+1 表示加載第一個磁盤的第一個分區的第1塊,0 是開始位置(block 從0開始編號),+1 表示總共讀取多少個 block。
所以 chainloader 2+0 表示讀取第3個block (編號為2)
j)find :可以用于在所有分區上搜索文件。注意,是所有分區,而不是某個分區。例如 find /vmlinuz 將會在所有分區上查找位于該分區的頂級目錄下的
vmlinuz文件,如果找到就打印該分區名,例如 (hd0,1)。
k)geometry :用于顯示或者設置某個硬盤的 CHS 參數,同時還顯示分區信息。例如 geometry (hd0)
l)halt :關機
m)reboot :重啟機器
n)kernel :指定操作系統內核文件,還可以在內核文件名后加上參數。例如
kernel /vmlinuz ro root=LABEL=/
表示以只讀的方式掛載 / 分區,且根分區設備是 label 為 / 的那個設備;也可以直接給出設備名。
o)initrd :用于指定 RAM Disk 文件,例如 initrd /initrd-2.xx.img 。
p)boot :引導 kernel 所指定的內核,對于 linux 來說,必須先加載了 kernel 和 initrd 才能執行 boot 。
q)setup :用于安裝 stage1 到磁盤的 MBR 或者某個分區的引導扇區。
六、保護 GRUB 設置
下面是一個例子
[Copy to clipboard]CODE:
password –-md5 <密碼1>
timeout=30
default=0
title “redhat AS 4”
password –-md5 <密碼2>
root (hd0,1)
kernel /vmlinuz ro root=LABEL=/
initrd /initrd-xxx.img
title “windows”
password –-md5 <密碼3>
rootnoverify (hd0,0)
chainloader +1
當出現 GRUB 菜單時,必須按下 p 并輸入 <密碼1> 才能進入命令模式,如果選擇 “redhat AS 4”并按下回車,會出現提示信息,要求輸入密碼,
這時應該輸入 <密碼2>。同樣只有輸入 <密碼3> 才能進入 windows 系統。--md5 告訴 GRUB 后面的內容是已經用 md5 算法加密過的了。所以 GRUB
會將你輸入的口令用 MD5 加密后再與之比較。你可以命令模式下用md5crypt 命令或者在 shell 下執行 grub-md5-cypt 來得出一個字符串用 MD5 加密
后的結果,再插入到配置文件中。為每個引導項目設置 GRUB 密碼有好處也有壞處 :
a)好處是 :你可以禁止用戶隨便引導某個操作系統,即使普通用戶可以接觸GRUB 菜單,沒有密碼也沒有用;
b)壞處是 :如果你一旦重啟機器,就必須手工輸入口令,否則會一直停在那里。如果你是在半夜遠程重啟某個主機的話…. Hoho
c)建議 :只設置 GRUB 密碼,也就是限制用戶進入命令模式,具體菜單項不設置密碼。