關(guān)于Linux系統(tǒng)下Grub啟動流程的討論總結(jié) |
發(fā)布時間: 2012/8/13 14:10:33 |
全世界linuxer都知道grub是什么東西,但對于MBR引導到grub再引導到具體操作系統(tǒng)的這個流程可能有不少朋友就比較迷糊了。這不,cu上一位朋友就發(fā)出了這樣一個求助貼:
假如現(xiàn)在一臺電腦上裝了WIN2000系統(tǒng),那么我現(xiàn)在在裝上LINUX系統(tǒng)和GRUB,那么假如把GRUB裝在主分區(qū)的話,GRUB直接引導 LINUX和WIN2000,我是可以理解的,因為MBR中是GRUB的STAGE1(對不對呢?),MBR通過檢查DPT分區(qū)信息引導系統(tǒng)跳轉(zhuǎn)至DBR (活動分區(qū)),我這里想問的活動分區(qū)是什么時候設的呢?那么裝GRUB到MBR里,那原來MBR中的WIN的引導信息是怎么處理的呢?是不是我們假如說裝 GRUB到MBR的時候,GRUB就把GRUB所在那個區(qū)設置為了活動分區(qū)了呢?然后GRUB引導時候,MBR就找到那個活動分區(qū)找到所需要的文件,然后繼續(xù)呢?假如說把GRUB裝到其他分區(qū)(非主引導區(qū))的話,那是怎么樣實現(xiàn)GRUB先啟動的呢?不是先MBR嗎?因為裝到了其他分區(qū),沒有改主引導區(qū),因此主引導區(qū)還是WIN2000的引導數(shù)據(jù)啊,怎么會GRUB先啟動了呢?這是為什么呢?跟活動分區(qū)有關(guān)系沒有呢?我看資料上寫的是哪個系統(tǒng)啟動哪個系統(tǒng)就是活動分區(qū),可是那樣的話,似乎就解釋不通了啊,就是最最開始這個地方一直不懂,理不清楚。 下面就是cu各個玩家對這個問題分析討論的總結(jié)。 首先讓我們看看傳統(tǒng)的啟動流程:加載并運行Master Boot Record(MBR)主引導區(qū)內(nèi)容(如lilo等)。然后掃描分區(qū)表,定位活動分區(qū),并將活動分區(qū)上的引導扇區(qū)內(nèi)容加載到內(nèi)存中執(zhí)行。 系統(tǒng)引導過程主要由以下幾個步驟組成(以硬盤啟動為例) 1、開機; 2、BIOS加電自檢(POST——Power On Self Test),內(nèi)存地址為0fff:0000; 3、將硬盤第一個扇區(qū)(0頭0道1扇區(qū),也就是Boot Sector)讀入內(nèi)存地址0000:7c00處; 4、檢查(WORD)0000:7dfe是否等于0xaa55.若不等于則轉(zhuǎn)去嘗試其他介質(zhì);如果沒有其他啟動介質(zhì),則顯示 “No ROM BASIC” ,然后死機; 5、跳轉(zhuǎn)到0000:7c00處執(zhí)行MBR中的程序; 6、MBR先將自己復制到0000:0600處,然后繼續(xù)執(zhí)行; 7、在主分區(qū)表中搜索標志為活動的分區(qū)。如果發(fā)現(xiàn)沒有活動分區(qū)或者不止一個活動分區(qū),則停止; 8、將活動分區(qū)的第一個扇區(qū)讀入內(nèi)存地址0000:7c00處; 9、檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則顯示 “Missing Operating System”,然后停止,或嘗試軟盤啟動; 10、跳轉(zhuǎn)到0000:7c00處繼續(xù)執(zhí)行特定系統(tǒng)的啟動程序; 11、啟動系統(tǒng)。 裝grub到邏輯分區(qū),那么就一定把grub裝入的邏輯分區(qū)設為活動的。不過,這時候,grub接管了11步以后的動作:從stage 1.5讀出grub.conf。再由配置和用戶選擇決定下一步的引導行為。 一般安裝grub都有兩種情況,對于安裝到MBR這種情況而言,GRUB直接覆蓋了原來的MBR引導程序。這也是為什么要換回“原來的 windows的引導方式”,只要用dos引導fdisk /mbr一下就可以的原因。為什么可以這樣做,請注意,1-11步中有兩個地方出現(xiàn)了0000:7c00。不管是dos boot sector還是nt loader它本身也是從0000:7c00運行的。其實ms當年開發(fā)分區(qū)管理的這個小程序相當于是在bios引導boot sector中插進去的。grub因為也是寫的從0000:7c00這個內(nèi)存開始的子程序,那么既可以被BIOS加載又可以被dos的MBR加載應該好理解了吧。 開機自檢后,引導權(quán)交給了硬盤的MBR,此時grub就啟動了。由grub來引導windows /linux都可以。注意:linux不一定要安裝在活動分區(qū),因為引導程序在MBR!但是windows一定要安裝在活動分區(qū)(可引導的 windows),第二個windows可以不安裝在活動分區(qū),但它的引導文件一定在活動分區(qū)。 大體順序是: grub—->windows–>查找引導文件—引導加載—啟動windows grub—->linux—>查找引導文件(/boot)–>引導加載—啟動linux 那么,如果把grub安裝到了其它的分區(qū)上,不是MBR呢?這是grub所裝在的那個主分區(qū)必須被設為活動分區(qū)。因為MBR(物理主引導分區(qū))中其實并沒有 OS相關(guān)的引導程序的,通常MBR只是掃描并讀取隨后的分區(qū)表,找到相應的活動分區(qū),讀取相應活動分區(qū)的第一個扇區(qū)的512字節(jié)程序并運行,該程序負責進一步引導相應分區(qū)的相應系統(tǒng)。因此,大概的運行次序是 BIOS—>MBR—->GRUB—->菜單。 這樣,大體的真實流程就可以總結(jié)如下了: 1、開機; 2、BIOS加電自檢(POST——Power On Self Test),內(nèi)存地址為0fff:0000; 3、將硬盤第一個扇區(qū)(0頭0道1扇區(qū),也就是Boot Sector)讀入內(nèi)存地址0000:7c00處; 4、檢查(WORD)0000:7dfe是否等于0xaa55.若不等于則轉(zhuǎn)去嘗試其他介質(zhì);如果沒有其他啟動介質(zhì),則顯示 “No ROM BASIC” ,然后死機; 5、跳轉(zhuǎn)到0000:7c00處執(zhí)行MBR中的程序; 6、MBR先將自己復制到0000:0600處,然后繼續(xù)執(zhí)行;假如先裝XP后裝LINUX,并且LINUX沒有裝在MBR,那這個MBR中的數(shù)據(jù)還是WIN 寫的數(shù)據(jù),它的作用都是下步中所說的作用,就是搜索主分區(qū)表中標志為活動的分區(qū),那么這個時候就必須把GRUB所在的主分區(qū)設置為活動的分區(qū),這個時候才能正常的啟動GRUB,然后GRUB的STAGE1在調(diào)STAGE1.5和其他的,從而來引導整個系統(tǒng)。假如說先裝XP后裝LINUX,但是GRUB裝在了MBR,那樣STAGE1直接調(diào)入內(nèi)存,STAGE1在調(diào)STAGE1.5和STAGE2等,從而來引導系統(tǒng)。那這個時候是不需要將GRUB其他文件所在的主分區(qū)設為活動分區(qū)的,它直接調(diào)STAGE1.5等,然后再調(diào)STAGE2等,來識別文件系統(tǒng),從而實現(xiàn)可多啟動。 7、在主分區(qū)表中搜索標志為活動的分區(qū)。如果發(fā)現(xiàn)沒有活動分區(qū)或者不止一個活動分區(qū),則停止; 8、將活動分區(qū)的第一個扇區(qū)讀入內(nèi)存地址0000:7c00處; 9、檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則顯示 “Missing Operating System”,然后停止,或嘗試軟盤啟動; 本文出自:億恩科技【1tcdy.com】 |