1. 程式人生 > >修復主引導扇區(windows、linux)

修復主引導扇區(windows、linux)

在罈子裡找到一篇關於grub和mbr工作原理的文章,以前一直都是一頭霧水,今天轉這文章學習下。。哈。。

能正常工作的grub應該包括一下檔案:stage1、stage2、*stage1_5、menu.lst。

其中stage1要被安裝(也就是寫入)某個硬碟的主引導記錄,或者某個活動分割槽(這個分割槽要用fdisk標記成可啟動的)的啟動扇區。stage1的主要的也是唯一的作用就是找到你存放在硬碟上某個地方的stage2檔案,來完成後續的工作。

stage2檔案可以存在某個特定的檔案系統中,比如你分了一個linux分割槽,在上面建立一個ext2檔案系統,然後把這個檔案拷貝到這個分割槽的某個目錄下。也可以把stage2直接存放在硬碟的某個位置,也就是未分割槽的某個地方。不過,好像沒有多少人會這麼做吧。

因為stage1的容量有限(主引導記錄MBR和啟動扇區的大小隻能夠是512位元組),所以它對檔案系統是無法識別的,那如果你把 stage2存放在ext2或者fat格式的檔案系統上,它如何來找到這個檔案呢?這就要用到上面提到的那些stage1_5的檔案了,它們負責解釋檔案 系統。你的stage2放在什麼格式的檔案系統上,就要呼叫對應的那個stage1_5檔案。比如,你把stage2存放在ext2格式的檔案系統上,就 需要e2fs_stage1_5;stage2存放在fat格式的檔案系統上,就需要fat_stage1_5了,stage1.5可以安裝在 mbr 之後的位置。


接下來是簡單開機過程

①按下電源後,計算機自檢(POST),如果硬體裝置(CPU、記憶體、硬碟、光碟機、各種卡)都沒有問題,BIOS會檢查各個硬碟的MBR,看有沒 有可以執行的程式碼,如果你把grub安裝到第一個硬碟的MBR上,那BIOS就會找到它,然後把控制權交個這段程式碼(其實就是512位元組大小的 stage1)。

②stage1根據安裝時提供的資訊,如stage2在什麼地方,需不需要載入檔案系統的對應的stage1_5檔案等,找

到stage2檔案,並把控制權交給stage2。

③stage2會需要特定位置的grub配置檔案menu.lst檔案(此檔案是/boot/gurb/gurb.conf的連結檔案),如 果找到,就分析其中的內容,形成作業系統選擇選單(Grub管它叫Menu Interface),如果沒有找到menu.lst或者這個檔案的格式、內容有錯誤,那就顯示grub的命令列提示符。

④當你選擇了選單中相應的條目,或者輸入了相關的命令,就可以看是引導系統了。比如引導linux的話,stage2會負責將vmlinuz和initrd(如果有的話)裝載到記憶體,並把控制權交給vmlinuz。

⑤linux的內容完成對硬體的初始化,並把控制權交給init程式,完成後續的工作了。

詳細的grub資訊請參考:http://q.yesky.com/frame.jsp?referer=http%3A%2F%2Fq.yesky.com%2Fgroup%2Freview-17848168.html
Linux 引導過程內幕:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html