今天折騰了一天桨醋,安裝minix3菱魔。
我用的硬盤(pán)是之前裝了linux的贤笆,用minix安裝光盤(pán)進(jìn)入蝇棉,setup一路走過(guò)去,在分區(qū)那里把之前的linux分區(qū)刪除芥永,然后安裝minix3篡殷。安裝結(jié)束之后,重啟進(jìn)入grub埋涧。折騰許久板辽,排除了主板、硬盤(pán)棘催、CD以及安裝方式的問(wèn)題劲弦,最后發(fā)現(xiàn)是MBR的問(wèn)題。
因?yàn)樵瓉?lái)安裝了linux醇坝,所以磁盤(pán)MBR有g(shù)rub的部分代碼邑跪,但是安裝minix時(shí)候,刪除分區(qū)并不會(huì)重寫(xiě)MBR呼猪,所以開(kāi)機(jī)后就無(wú)法正確引導(dǎo)了画畅。后來(lái)用disk genius重寫(xiě)MBR,然后再安裝就好了宋距。之后再官方查到一個(gè)解決方案轴踱,沒(méi)有嘗試,可能也有效乡革。
http://wiki.minix3.org/doku.php?id=usersguide:installationtroubleshooting
把MBR和grub的一些知識(shí)總結(jié)下吧寇僧。
MBR(Main Boot Record)是磁盤(pán)最前邊的一段主引導(dǎo)記錄(一段程序)摊腋,由于在硬盤(pán)的第一個(gè)扇區(qū)沸版,所以也把該扇區(qū)做主引導(dǎo)扇區(qū)嘁傀,它在硬盤(pán)上的位置是(0柱面,0磁頭视粮,1扇區(qū))细办。因此,談到MBR時(shí)蕾殴,有時(shí)候是指主引導(dǎo)記錄(扇區(qū)前面446字節(jié))笑撞,有時(shí)候是指主引導(dǎo)扇區(qū)(512字節(jié))。(該扇區(qū)后面部分是4個(gè)16字節(jié)的磁盤(pán)分區(qū)表钓觉,以及2字節(jié)的結(jié)束標(biāo)志)茴肥。
當(dāng)系統(tǒng)加電后,系統(tǒng)收線讀取硬件固化在主板ROM上的bios程序荡灾,并開(kāi)始執(zhí)行瓤狐。bios首先檢查硬件,初始化基礎(chǔ)中斷向量和寄存器等批幌,然后根據(jù)bios中設(shè)置的啟動(dòng)順序?qū)⒖刂破鹘唤o下一階段础锐,即到MBR。
MBR載入到內(nèi)存荧缘,開(kāi)始執(zhí)行皆警。MBR的主要作用是檢查分區(qū)表是否正確并且將控制權(quán)交給硬盤(pán)主分區(qū)(活動(dòng)分區(qū))上的引導(dǎo)程序(如GNU GRUB)。
一個(gè)磁盤(pán)只能支持4個(gè)主分區(qū)截粗,每個(gè)分區(qū)表結(jié)構(gòu)如下:
由于最后分區(qū)總扇區(qū)號(hào)是4字節(jié)信姓,所以一個(gè)分區(qū)最大是2^32個(gè)扇區(qū),如果每個(gè)扇區(qū)是512字節(jié)绸罗,那么一個(gè)最大的主分區(qū)就是2TB财破。如果考慮到,扇區(qū)號(hào)(邏輯地址)也是4字節(jié)的从诲,那么一個(gè)磁盤(pán)最大就是2TB左痢,所以每個(gè)主分區(qū)只能有1/4磁盤(pán)大小。磁盤(pán)還可以把某個(gè)區(qū)設(shè)置擴(kuò)展分區(qū)系洛,理論上該擴(kuò)展分區(qū)可以劃分無(wú)數(shù)個(gè)邏輯分區(qū)俊性。
控制權(quán)到活動(dòng)分區(qū)后,主要有兩種情況描扯,一是卷引導(dǎo)記錄定页,計(jì)算機(jī)會(huì)讀取激活分區(qū)的第一個(gè)扇區(qū),叫做卷引導(dǎo)記錄(Volume boot record绽诚,縮寫(xiě)為VBR)典徊,其作用是告訴計(jì)算機(jī)杭煎,操作系統(tǒng)在這個(gè)分區(qū)里的位置。然后卒落,計(jì)算機(jī)就會(huì)加載操作系統(tǒng)了羡铲。另一種情況是,有啟動(dòng)管理器(boot loader)的情況儡毕,如grub也切。在這種情況下,執(zhí)行MBR后將控制器交給grub腰湾,在grub中可以由用戶(hù)選擇啟動(dòng)哪個(gè)分區(qū)的哪個(gè)系統(tǒng)雷恃。
控制器到操作系統(tǒng)后,加載內(nèi)核费坊。以Linux系統(tǒng)為例倒槐,先載入/boot目錄下面的kernel。內(nèi)核加載成功后附井,第一個(gè)運(yùn)行的程序是/sbin/init讨越。它根據(jù)配置文件(Debian系統(tǒng)是/etc/initab)產(chǎn)生init進(jìn)程。這是Linux啟動(dòng)后的第一個(gè)進(jìn)程羡忘,pid進(jìn)程編號(hào)為1谎痢,其他進(jìn)程都是它的后代。然后卷雕,init線程加載系統(tǒng)的各個(gè)模塊节猿,比如窗口程序和網(wǎng)絡(luò)程序,直至執(zhí)行/bin/login程序漫雕,跳出登錄界面滨嘱,等待用戶(hù)輸入用戶(hù)名和密碼。
至此浸间,全部啟動(dòng)過(guò)程完成太雨。
補(bǔ)充,GRUB是GRand Unified Bootloader的縮寫(xiě)魁蒜,它是一個(gè)多重操作系統(tǒng)啟動(dòng)管理器囊扳。用來(lái)引導(dǎo)不同系統(tǒng)。GRUB是一個(gè)系統(tǒng)引導(dǎo)程序兜看,分為兩個(gè)階段锥咸,第一階段它保存在MBR中。用匯編語(yǔ)言編寫(xiě)细移,也就是MBR中的引導(dǎo)程序部分搏予。①基本的硬件設(shè)備初始化(屏蔽所有的中斷、關(guān)閉處理器內(nèi)部指令/數(shù)據(jù)cache 等)弧轧。②為加載 Bootloader 的Stage2 準(zhǔn)備空間雪侥。③如果是從某個(gè)固態(tài)存儲(chǔ)媒質(zhì)中碗殷,則拷貝 Bootloader 的stage2 到RAM 空間中。④設(shè)置好堆棧速缨。⑤跳轉(zhuǎn)到 stage2 的C 程序入口點(diǎn)锌妻。GRUB引導(dǎo)程序的第二階段,通常用C語(yǔ)音編寫(xiě)鸟廓,這個(gè)階段的任務(wù)有: ①初始化本階段要使用到的硬件設(shè)備从祝。②檢測(cè)系統(tǒng)內(nèi)存映射襟己。③將kernel 映像和根文件系統(tǒng)映像從flash 上讀到RAM 空間中引谜。④為內(nèi)核設(shè)置啟動(dòng)參數(shù)⑤調(diào)用內(nèi)核。它通常保存在/boot/grub/中擎浴。 當(dāng)我們啟動(dòng)系統(tǒng)進(jìn)入GRUB界面時(shí)员咽,會(huì)看到有選擇信息,如果我們自己編譯了系統(tǒng)內(nèi)核的話(huà)贮预,你可以選擇從某個(gè)內(nèi)核啟動(dòng)贝室。同時(shí)要注意的是GRUB的配置文件和內(nèi)核在/boot分區(qū)。從前面分析我們可以看出仿吞,/BOOT和MBR不存在包含關(guān)系滑频。GRUB第一階段需要去MBR中去讀引導(dǎo)程序,GRUB第二階段需要到/boot分區(qū)讀系統(tǒng)內(nèi)核和配置文件唤冈。
附:
grub第二階段峡迷,根據(jù)/boot/gurb/grub.cfg中的內(nèi)容,找到kernel和initrd你虹,并拷貝到內(nèi)存中绘搞。initrd是Initial RAM Disk的縮寫(xiě),這個(gè)文件是在安裝系統(tǒng)時(shí)產(chǎn)生的傅物,是一個(gè)臨時(shí)的根文件系統(tǒng)(rootfs)夯辖。因?yàn)镵ernel為了精簡(jiǎn),只保留了最基本的模塊董饰,因此蒿褂,Kernel上并沒(méi)有各種硬件的驅(qū)動(dòng)程序,也就無(wú)法識(shí)rootfs所在的設(shè)備卒暂,故產(chǎn)生了initrd這個(gè)文件啄栓,該文件裝載了必要的驅(qū)動(dòng)模塊,當(dāng)Kernel啟動(dòng)時(shí)介却,可以從initrd文件中裝載驅(qū)動(dòng)模塊谴供,直到掛載真正的rootfs,然后將initrd從內(nèi)存中移除齿坷。
Kernel會(huì)以只讀方式掛載根文件系統(tǒng)桂肌,當(dāng)根文件系統(tǒng)被掛載后数焊,開(kāi)始裝載第一個(gè)進(jìn)程(用戶(hù)空間的進(jìn)程),執(zhí)行/sbin/init崎场,之后就將控制權(quán)交接給了init程序佩耳。
參考:
http://www.blogfshare.com/mbr-dpt-ebr.html
http://blog.csdn.net/dale_chenjiawen/article/details/44282673
http://www.cnblogs.com/codecc/p/boot.html