File System GRUB 自由軟體 UNIX 檔案系統 開源碼

深入指揮作業系統啟動 詳解GRUB開機管理程式

2015-06-16
在Linux系統技巧前一篇介紹MBR、GPT與UEFI的文章中,有稍微提到GRUB開機管理程式,本文將特別針對GRUB這個開機管理程式,做一詳細介紹。
GRUB與傳統MBR、GPT分割表在磁碟中的關係,可以參考圖2的說明,這是由維基百科擷取的配置圖,Example1是描述在傳統MBR分割表型態的配置設定,Example2則是描述新型GPT分割表型態的配置設定,圖中的範例磁碟機名稱為「/dev/sda」,兩個例子中,core.img均位於主要啟動磁區內。


▲圖2 boot.img、core.img以及「/boot/grub」在磁碟機中的位置圖。

GRUB選單介紹

某些Linux發行版中,如果開機只有一個選項,便不會顯示任何選單,如圖3中CentOS 6的啟動畫面,


▲圖3 CentOS 6的啟動畫面。

這時如果要進入GRUB開機選單內,可以按下〔Shift〕鍵,便會出現如圖4所示的GRUB的選單


▲圖4 CentOS 6的GRUB開機選單。

不過,這裡舉例的CentOS 6所採用的GRUB還是舊版的並不是GRUB2,但是進入選單所使用的按鍵同樣是〔Shift〕鍵。以下會以CentOS 7所使用的GRUB2為主。圖5是CentOS的GRUB開機選單,圖6則是Arch Linux的GRUB開機選單。


▲圖5 CentOS 7的GRUB開機選單。

比較圖5和圖6,可以看出CentOS 7與Arch Linux兩個GRUB開機選單下的文字提示中都提醒使用者可以用上下鍵選擇開機選項,被選擇的開機選項會被反白標示(Hightlighted),選擇選項後按下〔Enter〕按鍵,便可從選擇的選項設定中開機。而〔e〕按鍵可以編輯所選擇開機選項的參數。按下〔e〕鍵之後,可以看到如圖7的畫面。


▲圖6 Arch Linux的GRUB開機選單。

圖7畫面中每一行都是GRUB的命令或函式,格式與Linux的Shell程式很類似,關於指令部分,待會兒進行介紹。


▲圖7 使用〔e〕按鍵編輯CentOS 7開機選項內容。

一般會進到修改選項,這裡主要都是修改啟動Linux核心的參數。GRUB指定Linux啟動的指令為linux或linux16,位於畫面下方,需用方向鍵中的向下鍵捲動,捲動後,如圖8中linux16開頭的部分。


▲圖8 編輯CentOS 7開機選項中linux16啟動Linux核心的參數。

可以看到底下有訊息提示,按下〔Ctrl〕+〔x〕按鍵可以目前設定的參數啟動,而按下〔Ctrl〕+〔c〕鍵則能進入GRUB的命令提示列(Command Prompt),如果不想修改回到選單,按一下〔ESC〕按鍵即可回到選單。

最常遇到要修改Linux Kernel啟動參數的狀況是忘記系統管理者root密碼,以此為例,這時便要強制使用無密碼驗證方式以root身分進入系統,而要達到這個目的,可以透過使用方向鍵移動游標到linux16那一行,以加入「init=/bin/bash」參數的方式來達成。這個方式是讓Linux Kernel載入後,控制權不交給正常的作業系統初始化程式init,因為這樣會讓系統進入一般正常需要驗證帳號密碼的方式。透過指定控制權交給「/bin/bash」這個Borune Again SHell,讓系統直接以root身分進到命令提示列。

修改後,可以看到底下有訊息提示,可按下〔Ctrl〕+〔x〕按鍵以目前設定的參數啟動,如圖9所示。


▲圖9 以root無密碼驗證方式進入Linux系統。

至此可以發現已經以root身分進入系統,使用df指令可以看到根目錄(/)已經被掛載上來,因此基本上位於「/etc」目錄底下的passwd、group及shadow等有關帳號密碼的檔案也應該都具備了。但此時因為不是以正常方式進入系統,所以根目錄應該是透過唯讀方式掛載。

唯讀就無法更改相關密碼檔案,此時使用者可執行「mount -o rw,remount /」指令將根目錄重新掛載為可讀寫方式,之後就可以使用passwd指令重新設定root密碼。設定完畢,執行「sync」指令確認檔案有寫入後,直接以硬體reset或poweroff方式重新啟動系統後,就能夠以新設定的帳號密碼登入系統。

使用GRUB命令

除了編輯選項的e指令外,使用者也可以按下〔c〕按鍵進入GRUB的提示符號grub>裡,然後對GRUB下指令,如圖10所示,要離開GRUB提示符號回到選單,則按下〔ESC〕鍵。


▲圖10 在GRUB選單中按下〔c〕按鍵進入GRUB提示命令列。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!