歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 引導加載程序:GRUB

引導加載程序:GRUB

日期:2017/2/28 14:43:38   编辑:Linux教程

計算機在啟動的時候,首先由BIOS中的程序執行自檢,自檢通過後,就根據CMOS的配置找到第一個可啟動磁盤的MBR中的Boot Loader程序(一般在啟動盤的第一個物理扇區,占446字節),並把控制權交給Boot Loader,由Boot Loader進一步完成操作系統內核的加載。當Boot Loader找到內核之後,就把控制權交給操作系統內核,由內核繼續完成系統的啟動。可以看出,Boot Loader 是計算機啟動中第二個要執行的程序,它是引導操作系統的關鍵程序。可以引導操作系統的Boot Loader主要有LiLo、GRUB以及Windows下的MBR程序。其中,GRUB是目前使用最為廣泛,並且非常優秀的一款啟動引導程序。

GRUB的執行流程

GRUB引導操作系統的簡要流程:

(1)如果你安裝GRUB到MBR,GRUB的安裝程序會把MBR的boot loader(或其他扇區boot loader)備份到Stage1。執行Stage1,Stage1的工作是載入Stage1_5。

(2)當Stage1_5加載後,stage1就可以加載Stage2,因為Stage1_5加載後,就可以認識到ext2文件系統的格式也賦予了GRUB讀取文件系統目錄的能力。

(3)stage2執行時,查找grub.conf,顯示啟動菜單供用戶選擇,然後根據用戶的選擇或默認配置加載操作系統內核,並將控制權交給操作系統內核,由內核完成操作系統的啟動。

GRUB涉及到幾個重要的文件:

stage1:stage1的大小是512個字節,正是MBR的大小,但stage1的最後66個字節與mbr不同,mbr的最後66個字節分別是64個字節的分區表,和MBR標記55AA.stage1與MBR的前446,它們的內容是完全一樣的.我們可以理解stage1文件是MBR中bootloader的一個備份。通常,這個文件是被裝載到MBR或者啟動扇區所在的分區。

stage1_5:作為stage1加載stage2的橋梁,stage1_5負責識別文件系統格式從而加載stage2,所以stage1_5往往有多個,以支持不同文件系統的讀取。在安裝GRUB的時候,GRUB會根據當前/boot/分區類型,加載相應的stage1_5。

stage2:stage2是放在各個分區的Boot Sector,主要作用:提供菜單、讀取配置文件、連接下一個Boot Sector。

第四個是menu.lst(/boot/grub/grub.conf的鏈接)。grub.conf是一個基於腳本的文本文件,其中包含菜單顯示的配置和各個操作系統的內核加載配置。GRUB根據grub.conf顯示啟動菜單,提供同用戶交互界面。GRUB正是根據用戶選擇或默認配置和grub.conf的內核配置加載相應的內核程序,並把控制權交給內核程序,使得內核程序完成真正的操作系統的啟動。

MBR、/BOOT、GRUB三者關系

MBR是硬盤上的一個扇區,包含三部分內容(引導加載程序、分區表及分隔標識,MBR總計512字節;其中引導加載程序占446個字節);為什麼需要這個MBR,主要是因為BIOS太小,功能有限。當系統加電,BIOS自檢後,就會將MBR Load進內存。也就意味著引導加載程序被激活,分區表信息已經加載到內存,同時也意味著對系統的控制權從BIOS過渡到GRUB。

GRUB是一個多重操作系統啟動程序。用來引導不同系統。GRUB是一個系統引導加載程序,分為兩個階段,stage1用匯編語言編寫,也就是MBR中的引導程序部分。①基本的硬件設備初始化(屏蔽所有的中斷、關閉處理器內部指令/數據cache 等)。②為加載 Boot loader 的Stage2 准備空間。③如果是從某個固態存儲媒質中,則拷貝 Bootloader 的stage2 到RAM 空間中。④設置好堆棧。⑤跳轉到 stage2的C 程序入口點。

GRUB引導加載程序的stage2,通常用C語音編寫,這個階段的任務有:①初始化本階段要使用到的硬件設備。②檢測系統內存映射。③將kernel 映像和根文件系統映像從flash 上讀到RAM 空間中。④為內核設置啟動參數⑤調用內核。它通常保存在/boot/grub/中。當我們啟動系統進入GRUB界面時,會看到有選擇信息,如果我們自己編譯了系統內核的話,你可以選擇從某個內核啟動。同時要注意的是GRUB的配置文件和內核在/boot分區。

從前面分析我們可以看出,/BOOT和MBR不存在包含關系。GRUB第一階段需要去MBR中去讀引導程序,GRUB第二階段需要到/boot分區讀系統內核和配置文件。

通過上面分析,可以理解為什麼雙系統,刪除Linux系統,會導致開機兩個系統都打不開。

Copyright © Linux教程網 All Rights Reserved