在Linux系統技巧前一篇介紹MBR、GPT與UEFI的文章中,有稍微提到GRUB開機管理程式,本文將特別針對GRUB這個開機管理程式,做一詳細介紹。
開機管理程式「GRUB」是自由軟體基金會GNU計畫下的子軟體計畫,因此全名是「GNU GRUB」,而GRUB是「GRand Unified Bootloader」的縮寫。
GRUB分為舊版的GRUB及新版的GRUB 2.x版本,GRUB 2.x整個改寫,實際上是全新的版本,並沒有使用到GRUB舊版的程式碼。GRUB新版目前是各主流Linux發行版所使用的開機管理程式,例如Solaris作業系統在第10版後也開始在x86系統上使用GRUB新版當開機管理程式。GRUB新版支援的硬體平台包括IA-32、x86-64、PowerPC以及SPARC,因此本篇文章主要介紹的也是新版的GRUB 2.x系列。
GRUB非常輕巧且具高度可移植性,支援多種可執行格式(Executable Formats)。另外,GRUB也支援多個作業系統(Multi-boot)的啟動,常見的作業系統如DOS、Windows、Linux、BSD或是Solaris都可支援。對於不支援多作業系統(Multi-boot)啟動的作業系統如Windows和OS/2之類的系統,GRUB則是透過鏈式啟動(Chain Loading)的方式來支援。所謂鏈式啟動,簡單講就是透過GRUB開機管理程式去啟動另一個作業系統自己的開機管理程式,例如GRUB就是透過啟動Windows系統開機管理程式(NTLDR)的方式支援Windows開機。
GRUB支援常見的UNIX檔案系統(File System),也支援Windows系統中使用的FAT和NTFS檔案系統。GRUB藉由支援這些檔案系統,讓使用者無須載入作業系統,便可以在GRUB開機時檢視GRUB所支援檔案系統裡檔案的內容。圖1是由GRUB官方文件中取得的支援檔案系統列表,從中可以發現幾乎各式系統上常見的檔案系統都支援了,因此基本上GRUB已經具備一個微型作業系統的雛型。
|
▲圖1 GRUB支援的檔案系統。 |
GRUB啟動載入到開機選單的過程
當電腦開機時,先是由BIOS主控,經過硬體初始化後,BIOS會尋找第一個設定啟動的磁碟機,之後由磁碟機內的主要啟動磁區(Master Boot Record)中載入GRUB的相關檔案,開始進入GRUB開機管理程式。主要啟動磁區位於磁碟機的第一個磁區(Sector),在傳統以512位元組(Bytes)為一個磁區大小來計算的硬碟機,主要啟動磁區大小就是512位元組。
現在新的磁碟機因為容量愈來愈大,儲存資料單位也愈來愈大,因此磁區大小也改為4,096位元組,因此主要啟動磁區在這些新磁碟中大小就會變成4,096位元組。不過,為因應與舊版主要啟動磁區大小的相容,這些磁碟機韌體會提供暫時轉換成舊有512位元組大小,稱為512e(emulation)的模擬機制。
GRUB的啟動載入過程分成三個階段,以下也分三部分來加以說明:
階段1(Stage 1)
GRUB在安裝時,會將boot.img寫入到主要啟動磁區內,因此BIOS在載入主要磁碟區程式碼時,主要就是載入boot.img檔案的程式內容,而boot.img取得主控權後的主要動作,就是緊接著載入第1.5階段所需的core.img檔案。
階段1.5(Stage 1.5)
此一階段主控權會由boot.img交給core.img,而core.img的位置則依磁碟分割表(Partition Table)的型態而定,若是傳統的分割表型態,又稱主要啟動磁碟區(Master Boot Record,MBR)式的分割區方式,那是因為在第一個啟動磁區(編號0磁區)之後到編號62磁區這段62個磁區大小都是空白沒有使用的,這段磁區的保留也是為了跟舊有系統相容,第一個分割區則是由編號63磁區開始。
因此core.img會由主要啟動磁區的下一個磁區開始,即編號1磁區(編號0磁區為開始第一個磁區)開始擺放,整個core.img會被放置在這段62個都是空白沒有使用的磁區裡面。而如果是新的GPT分割表(GUID Partition Table)型態,core.img則會被放在一個特別切出來的BIOS啟動分割區(BIOS Boot Partition)中,這個BIOS啟動分割區依GRUB建議大概1MB大小就夠了,同時這個BIOS Boot Partition不需要是第一個分割區,但是此分割區一定要在磁碟起始算起2TB之內,GRUB會將core.img嵌入在這個分割區內。
boot.img載入core.img後,便將主控權交給core.img,而core.img會載入設定及所需的相關模組,特別是檔案系統模組,讓GRUB可以在之後提供使用者檢視各個磁碟檔案系統的功能。
階段2(Stage 2)
core.img在載入設定與模組後,便會從設定中找出「/boot/grub」在磁碟中的位置,並讀取在「/boot/grub」內有關作業系統載入與開機的相關資訊,然後使用者看到的便是在螢幕中的文字模式開機選項選單。此時,GRUB便處在等待使用者選擇選項開機或執行相關指令的狀態中。