最近學FreeBSD的時候,在分區方面遇到一些疑問,順便就了解了一下主分區,邏輯分區,以及磁盤存儲的一些概念,發現了一篇好文章,在此轉載
?
一、系統引導過程簡介
系統引導過程主要由以下幾個步驟組成(以硬盤啟動為例)
1、 開機;
2、 BIOS加電自檢(POST——Power On Self Test),內存地址為0fff:0000;
3、 將硬盤第一個扇區(0頭0道1扇區,也就是Boot Sector)讀入內存地址0000:7c00處;
4、 檢查(WORD)0000:7dfe是否等于0xaa55.若不等于則轉去嘗試其他介質;如果沒有其他啟動介質,則顯示 “No ROM BASIC” ,然后死機;
5、 跳轉到0000:7c00處執行MBR中的程序;
6、 MBR先將自己復制到0000:0600處,然后繼續執行;
7、 在主分區表中搜索標志為活動的分區。如果發現沒有活動分區或者不止一個活動分區,則停止;
8、 將活動分區的第一個扇區讀入內存地址0000:7c00處;
9、 檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則顯示 “Missing Operating System”,然后停止,或嘗試軟盤啟動;
10、 跳轉到0000:7c00處繼續執行特定系統的啟動程序;
11、 啟動系統。
以上步驟中(2),(3),(4),(5)步由BIOS的引導程序完成;(6),(7),(8),(9),(10)步由MBR中的引導程序完成。
一般多系統引導程序(如Smart Boot Manager, BootStar, PQBoot等)都是將標準主引導記錄替換成自己的引導程序,在運行系統啟動程序之前讓用戶選擇想要啟動的分區。而某些系統自帶的多系統引導程序(如 LILO,NT Loader等)則可以將自己的引導程序放在系統所處分區的第一個扇區中,在Linux中即為兩個扇區的SuperBlock.
注:以上步驟中使用的是標準的MBR,多系統引導程序的引導過程與此不同。
二、硬盤結構及參數
3D參數(Disk Geometry):CHS(Cylinder/Head/Sector) C-Cylinder柱面數表示硬盤每面盤片上有幾條磁道,最大為1024(用10個二進制位存儲);H-Head磁頭數表示硬盤總共有幾個磁頭,也就是幾面盤片,最大為256(用8個二進制位存儲);S-Sector扇區數表示每條磁道上有幾個扇區,最大為63(用6個二進制位存儲)。
1、引導扇區
Boot Sector組成
Boot Sector也就是硬盤的第一個扇區,它由MBR(Master Boot Record), DPT(Disk Partition Table) 和 Boot Record ID三部分組成。 MBR又稱為主引導記錄,占用Boot Sector的前446個字節(0~0x1BD),存放系統主引導程序(它負責從活動分區中裝載并且運行系統引導程序)。 DPT即主分區表占用64個字節(0x1BE~0x1FD),記錄磁盤的基本分區信息。主分區表分為四個分區項,每項16個字節,分別記錄每個主分區的信息(因此最多可以有四個主分區)。 Boot Record ID即引導區標記占用兩個字節(0x1FE~0x1FF),對于合法引導區,它等于0xaa55,這是判別引導區是否合法的標志)。
Boot Secor具體結構如圖:

2、分區表結構簡介
分區表由四個分區項構成,每一項結構如下:
BYTE State:分區狀態,0=未激活,0x80=激活(注意此項);
BYTE StartHead:分區起始磁頭號;
WORD StartSC:分區起始扇區和柱面號,底字節的底6位為扇區號,高2位為柱面號的第9,10位,高字節為柱面號的低8位;
BYTE Type:分區類型,如0x0B=FAT32,0x83=Linux等,00表示此項未用;
BYTE EndHead:分區結束磁頭號;
WORD EndSC:分區結束扇區和柱面號,定義同前;
DWORD Relative:在線性尋址方式下的分區相對扇區地址(對于基本分區即為絕對地址);
DWORD Sectors:分區大小(總扇區數)。
在DOS或Windows系統下,基本分區必須以柱面為單位劃分(Sectors*Heads個扇區),如對于CHS為764/256/63的硬盤,分區的最小尺寸為256*63*512/1048576=7.875MB.
由于硬盤的第一個扇區已經被引導扇區占用,所以一般來說,硬盤的第一個磁道(0頭0道)的其余62個扇區是不會被分區占用的。某些分區軟件甚至將第一個柱面全部空出來。
擴展分區結構如圖:

三. 系統啟動過程簡介
??? 系統啟動過程主要由一下幾步組成(以硬盤啟動為例):
??? 1. 開機 :-)
??? 2. BIOS 加電自檢 ( Power On Self Test -- POST )內存地址為 0ffff:0000
??? 3. 將硬盤第一個扇區 (0頭0道1扇區, 也就是Boot Sector)讀入內存地址 0000:7c00 處.
??? 4. 檢查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于則轉去嘗試其他啟動介質, 如果沒有其他啟動介質則顯示"No ROM BASIC" 然后死機.
??? 5. 跳轉到 0000:7c00 處執行 MBR 中的程序.
??? 6. MBR 首先將自己復制到 0000:0600 處, 然后繼續執行.
??? 7. 在主分區表中搜索標志為活動的分區. 如果發現沒有活動分區或有不止一個活動分區, 則轉停止.
??? 8. 將活動分區的第一個扇區讀入內存地址 0000:7c00 處.
??? 9. 檢查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于則顯示 "Missing Operating System" 然后停止, 或嘗試軟盤啟動.
??? 10. 跳轉到 0000:7c00 處繼續執行特定系統的啟動程序.
??? 11. 啟動系統 ...
??? 以上步驟中 2,3,4,5 步是由 BIOS 的引導程序完成. 6,7,8,9,10步由MBR中的引導程序完成.
??? 一般多系統引導程序 (如 SmartFDISK, BootStar, PQBoot 等)都是將標準主引導記錄替換成自己的引導程序, 在運行系統啟動程序之前讓用戶選擇要啟動的分區.
??? 而某些系統自帶的多系統引導程序 (如 lilo, NT Loader 等)則可以將自己的引導程序放在系統所處分區的第一個扇區中, 在 Linux中即為 SuperBlock (其實 SuperBlock 是兩個扇區).
??? 注: 以上各步驟中使用的是標準 MBR, 其他多系統引導程序的引導過程與此不同.
?
http://hi.baidu.com/noname2236/blog/item/56f1be1ccaed478886d6b672.html ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
