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

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

2015-06-16
在Linux系統技巧前一篇介紹MBR、GPT與UEFI的文章中,有稍微提到GRUB開機管理程式,本文將特別針對GRUB這個開機管理程式,做一詳細介紹。
進入GRUB命令提示模式,便表示可以忽略原本GRUB的設定,逕自對GRUB下指令來選擇要開機的方式及環境。此時,使用者可以使用「help」指令列出GRUB所支援的指令,如圖11所示。


▲圖11 輸入命令「help」列出GRUB指令列表。

GRUB會自動對命令做分頁顯示,按下任意鍵就會顯示下一頁命令列表,help後面加上指令名稱,就會顯示指令的用法說明,如圖12所示是執行指令「help cat」顯示cat指令的使用方法。


▲圖12 「help cat」列出cat指令使用說明。

另外,也可以用「clear」指令清空畫面輸出,「set」指令則可列出環境變數設定,例如利用「echo $pager」便可看到值是1,這表示輸出分頁功能目前是打開的,圖13上面的輸出是set指令列出環境變數的輸出,而最後的輸出是顯示pager變數的值是1,環境變數的名稱前面要加上$符號。


▲圖13 set指令的環境變數輸出與使用echo顯示單一環境變數pager的值。

由這裡可以發現,跟Linux Shell環境非常類似。GRUB的指令相當多,此處只介紹一些常用的。既然是開機管理程式,那就要能重新設定開機方式,而要設定開機方式當然首先就是要能檢視目前磁碟機的狀況,使用「ls」指令就可以列出目前GRUB所找到的磁碟機與分割資訊,如圖14所示。


▲圖14 執行ls指令所輸出的磁碟機與分割資訊。

圖14中顯示了目前有磁碟機hd0,hd0裡有兩個以舊有MBR分割型態分割的磁碟分割,分別為msdos1及msdos2,msdos1應該是系統中掛載在「/boot」這個放置包含Linux系統核心與GRUB啟動程式的分割,msdos2則是系統內掛載在根目錄(/)下的分割,可以分別使用「ls (hd0,msdos1)」及「ls (hd0,msdos2)」指令來檢視分割表資訊,如圖15所示。


▲圖15 ls指令輸出兩個磁碟機分割的大小與檔案系統型態等資訊。

從中觀察,msdos1顯示了檔案系統型態為xfs、分割的UUID編號以及分割的KB大小,但是第二個分割卻沒顯示檔案系統,為未知(No Known)無法辨識,只有顯示分割的大小。這是因為第二分割是lvm型態的檔案系統,因為GRUB相關的lvm模組未載入,所以無法辨識。

這時可以使用「insmod lvm」指令載入lvm模組,然後利用ls指令再檢視一次,便可成功顯示分割資訊,如圖16所示。


▲圖16 利用「insmod lvm」載入lvm模組,並使用ls指令輸出lvm下的檔案系統型態資訊。

結果顯示,出現了具有(lvm/centos-root)、(lvm/centos-home)以及(lvm/centos-swap)三個lvm型態的邏輯Volume,分別執行「ls (lvm/centos-root)」與「ls (lvm/centos-home)」指令列出其詳細資訊,可以發現都是xfs檔案型態,相關的UUID及大小資訊也都一併列出。這裡的(lvm/centos-swap),因為GRUB沒有辨識swap型態的模組,所以並未列出其相關資訊。

除了顯示檔案系統資訊外,也可以使用ls指令列出可辨識檔案系統內相關檔案與目錄的資訊,例如執行「ls (hd0,msdos1)/」指令就可以列出msdos1這個掛載在「/boot」目錄下的分割裡面的檔案,如圖17所示,指令最後的「/」代表根目錄的字元,表示將列出此磁碟分割最上層目錄的檔案資訊。


▲圖17 利用「ls (hd0,msdos1)/」指令顯示msdos1分割的檔案列表資訊。

GRUB也支援ls指令,有「-l」選項可以列出詳細的檔案列表資訊,如圖18所示。圖18中列出了哪些是目錄,哪些是檔案,同時也顯示了檔案目錄建立的時間及其大小與名稱。


▲圖18 利用「ls (hd0,msdos1)/」指令顯示msdos1分割的檔案列表資訊。

另外,輸出因為有很多檔案,所以GRUB也提供使用者分頁顯示其檔案列表。 既然能夠顯示根目錄,當然也就能顯示目錄下指定路徑的檔案及子目錄資訊,例如可以執行「ls -l (hd0,msdos1)/grub2/i386-pc/」指令顯示GRUB所支援的相關模組檔案列表,剛剛動態以insmod指令載入的lvm模組也在列表中,如圖19所示。


▲圖19 利用「ls -l (hd0,msdos1)/grub2/i386-pc/」指令列出位於「grub2/i386-pc/」下的GRUB相關模組資訊。

接著來看有哪些模組已經載入,可以使用「lsmod」指令,圖20顯示出目前GRUB已載入的模組名稱,以及其相關模組與參考資訊。


▲圖20 利用「lsmod」指令顯示GRUB已載入的模組相關資訊。


追蹤我們Featrue us

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

我知道了!