天天看點

硬碟MBR詳細介紹

硬碟MBR詳細介紹    硬碟是現在計算機上最常用的存儲器之一。我們都知道,計算機之是以神奇,是因為它具有高速分析處理資料的能力。而這些資料都以檔案的形式存儲在硬碟裡。不過,計算機可不像人那麼聰明。在讀取相應的檔案時,你必須要給出相應的規則。這就是分區概念。

    分區從實質上說就是對硬碟的一種格式化。當我們建立分區時,就已經設定好了硬碟的各項實體參數,指定了硬碟主引導記錄(即Master Boot Record,一般簡稱為MBR)和引導記錄備份的存放位置。而對于檔案系統以及其他作業系統管理硬碟所需要的資訊則是通過以後的進階格式化,即 Format指令來實作。面、磁道和扇區硬碟分區後,将會被劃分為面(Side)、磁道(Track)和扇區(Sector)。需要注意的是,這些隻是個 虛拟的概念,并不是真正在硬碟上劃軌道。

    先從面說起,硬碟一般是由一片或幾片圓形薄膜疊加而成。我們所說,每個圓形薄膜都有兩個“面”,這兩個面都是用來存儲資料的。按照面的多少,依次稱為0 面、1面、2面……由于每個面都專有一個讀寫磁頭,也常用0頭(head)、1頭……稱之。按照硬碟容量和規格的不同,硬碟面數(或頭數)也不一定相同, 少的隻有2面,多的可達數十面。各面上磁道号相同的磁道合起來,稱為一個柱面(Cylinder)。

    上面我們提到了磁道的概念。那麼究竟何為磁道呢?由于磁盤是旋轉的,則連續寫入的資料是排列在一個圓周上的。我們稱這樣的圓周為一個磁道。如果讀寫磁頭沿 着圓形薄膜的半徑方向移動一段距離,以後寫入的資料又排列在另外一個磁道上。根據硬碟規格的不同,磁道數可以從幾百到數千不等;一個磁道上可以容納數KB 的資料,而主機讀寫時往往并不需要一次讀寫那麼多,于是,磁道又被劃分成若幹段,每段稱為一個扇區。一個扇區一般存放512位元組的資料。扇區也需要編号, 同一磁道中的扇區,分别稱為1扇區,2扇區……

    計算機對硬碟的讀寫,處于效率的考慮,是以扇區為基本機關的。即使計算機隻需要硬碟上存儲的某個位元組,也必須一次把這個位元組所在的扇區中的512位元組全部 讀入記憶體,再使用所需的那個位元組。不過,在上文中我們也提到,硬碟上面、磁道、扇區的劃分表面上是看不到任何痕迹的,雖然磁頭可以根據某個磁道的應有半徑 來對準這個磁道,但怎樣才能在首尾相連的一圈扇區中找出所需要的某一扇區呢?原來,每個扇區并不僅僅由512個位元組組成的,在這些由計算機存取的資料的 前、後兩端,都另有一些特定的資料,這些資料構成了扇區的界限标志,标志中含有扇區的編号和其他資訊。計算機就憑借着這些标志來識别扇區。硬碟的資料結構 在上文中,我們談了資料在硬碟中的存儲的一般原理。為了能更深入地了解硬碟,我們還必須對硬碟的資料結構有個簡單的了解。硬碟上的資料按照其不同的特點和 作用大緻可分為5部分:MBR區、DBR區、FAT區、DIR區和DATA區。

我們來分别介紹一下:

1、MBR區

      MBR(Main Boot Record 主引導記錄區)位于整個硬碟的0磁道0柱面1扇區。不過,在總共512位元組的主引導扇區中,MBR隻占用了其中的446個位元組,另外的64個位元組交給了 DPT(Disk Partition Table硬碟分區表),最後兩個位元組“55,AA”是分區的結束标志。這個整體構成了硬碟的主引導扇區。

    主引導記錄中包含了硬碟的一系列參數和一段引導程式。其中的硬碟引導程式的主要作用是檢查分區表是否正确并且在系統硬體完成自檢以後引導具有激活标志的分 區上的作業系統,并将控制權交給啟動程式。MBR是由分區程式(如Fdisk.exe)所産生的,它不依賴任何作業系統,而且硬碟引導程式也是可以改變 的,進而實作多系統共存。

    下面,我們以一個執行個體讓大家更直覺地來了解主引導記錄:

    例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00 在這裡我們可以看到,最前面的“80”是一個分區的激活标志,表示系統可引導;“01 01 00”表示分區開始的磁頭号為01,開始的扇區号為01,開始的柱面号為00;“0B”表示分區的系統類型是FAT32,其他比較常用的有 04(FAT16)、07(NTFS);“FE BF FC”表示分區結束的磁頭号為254,分區結束的扇區号為63、分區結束的柱面号為764;“3F 00 00 00”表示首扇區的相對扇區号為63;“7E 86 BB 00”表示總扇區數為12289622。

2、DBR區

    DBR(Dos Boot Record)是作業系統引導記錄區的意思。它通常位于硬碟的0磁道1柱面1扇區,是作業系統可以直接通路的第一個扇區,它包括一個引導程式和一個被稱為 BPB(Bios Parameter Block)的本分區參數記錄表。引導程式的主要任務是當MBR将系統控制權交給它時,判斷本分區跟目錄前兩個檔案是不是作業系統的引導檔案(以DOS為 例,即是Io.sys和Msdos.sys)。如果确定存在,就把它讀入記憶體,并把控制權 交給該檔案。BPB參數塊記錄着本分區的起始扇區、結束扇區、檔案存儲格式、硬碟媒體描述符、根目錄大小、FAT個數,配置設定單元的大小等重要參數。DBR 是由進階格式化程式(即Format.com等程式)所産生的。

3、FAT區

    在DBR之後的是我們比較熟悉的FAT(File Allocation Table檔案配置設定表)區。在解釋檔案配置設定表的概念之前,我們先來談談簇(Cluster)的概念。檔案占用磁盤空間時,基本機關不是位元組而是簇。一般情 況下,軟碟每簇是1個扇區,硬碟每簇的扇區數與硬碟的總容量大小有關,可能是4、8、16、32、64…… 同一個檔案的資料并不一定完整地存放在磁盤的一個連續的區域内,而往往會分成若幹段,像一條鍊子一樣存放。這種存儲方式稱為檔案的鍊式存儲。由于硬碟上保 存着段與段之間的連接配接資訊(即FAT),作業系統在讀取檔案時,總是能夠準确地找到各段的位置并正确讀出。 為了實作檔案的鍊式存儲,硬碟上必須準确地記錄哪些簇已經被檔案占用,還必須為每個已經占用的簇指明存儲後繼内容的下一個簇的簇号。對一個檔案的最後一 簇,則要指明本簇無後繼簇。這些都是由FAT表來儲存的,表中有很多表項,每項記錄一個簇的資訊。由于FAT對于檔案管理的重要性,是以FAT有一個備 份,即在原FAT的後面再建一個同樣的FAT。初形成的FAT中所有項都标明為“未占用”,但如果磁盤有局部損壞,那麼格式化程式會檢測出損壞的簇,在相 應的項中标為“壞簇”,以後存檔案時就不會再使用這個簇了。FAT的項數與硬碟上的總簇數相當,每一項占用的位元組數也要與總簇數相适應,因為其中需要存放 簇号。FAT的格式有多種,最為常見的是FAT16和FAT32。

4、DIR區

DIR(Directory)是根目錄區,緊接着第二FAT表(即備份的FAT表)之後,記錄着根目錄下每個檔案(目錄)的起始單元,檔案的屬性等。定位檔案位置時,作業系統根據DIR中的起始單元,結合FAT表就可以知道檔案在硬碟中的具體位置和大小了。

5、資料(DATA)區

    資料區是真正意義上的資料存儲的地方,位于DIR區之後,占據硬碟上的大部分資料空間。

一、硬碟的實體結構:

     硬碟存儲資料是根據電、磁轉換原理實作的。硬碟由一個或幾個表面鍍有磁性物質的金屬或玻璃等物質盤片以及盤片兩面所安裝的磁頭和相應的控制電路組成(圖1),其中盤片和磁頭密封在無塵的金屬殼中。

硬碟MBR詳細介紹

   硬碟工作時,盤片以設計轉速高速旋轉,設定在盤片表面的磁頭則在電路控制下徑向移動到指定位置然後将資料存儲或讀取出來。當系統向硬碟寫入資料時,磁頭中 “寫資料”電流産生磁場使盤片表面磁性物質狀态發生改變,并在寫電流磁場消失後仍能保持,這樣資料就存儲下來了;當系統從硬碟中讀資料時,磁頭經過盤片指 定區域,盤片表面磁場使磁頭産生感應電流或線圈阻抗産生變化,經相關電路處理後還原成資料。是以隻要能将盤片表面處理得更平滑、磁頭設計得更精密以及盡量 提高盤片旋轉速度,就能造出容量更大、讀寫資料速度更快的硬碟。這是因為盤片表面處理越平、轉速越快就能越使磁頭離盤片表面越近,提高讀、寫靈敏度和速 度;磁頭設計越小越精密就能使磁頭在盤片上占用空間越小,使磁頭在一張盤片上建立更多的磁道以存儲更多的資料。

二、硬碟的邏輯結構:

    硬碟由很多盤片(platter)組成,每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面,對應2N個磁頭(Heads),從0、1、2 開始編号。每個盤片被劃分成若幹個同心圓磁道(邏輯上的,是不可見的。)每個盤片的劃分規則通常是一樣的。這樣每個盤片的半徑均為固定值R的同心圓再邏輯 上形成了一個以電機主軸為軸的柱面(Cylinders),從外至裡編号為0、1、2……每個盤片上的每個磁道又被劃分為幾十個扇區(Sector),通 常的容量是512byte,并按照一定規則編号為1、2、3……形成Cylinders×Heads×Sector個扇區。這三個參數即是硬碟的實體參 數。我們下面的很多實踐需要深刻了解這三個參數的意義。

硬碟存儲資料是根據電、磁轉換原理實作的。硬碟由一個或幾個表面鍍有磁性物質的金屬或玻璃等物質盤片以及盤片兩面所安裝的磁頭和相應的控制電路組成(圖1),其中盤片和磁頭密封在無塵的金屬殼中。

三、磁盤引導原理:

3.1 MBR(master boot record)扇區:

  計算機在按下power鍵以後,開始執行主機闆bios程式。進行完一系列檢測和配置以後。開始按bios中設定的系統引導順序引導系統。假定現 在是硬碟。Bios執行完自己的程式後如何把執行權交給硬碟呢。交給硬碟後又執行存儲在哪裡的程式呢。其實,稱為mbr的一段代碼起着舉足輕重的作用。 MBR(master boot record),即主引導記錄,有時也稱主引導扇區。位于整個硬碟的0柱面0磁頭1扇區(可以看作是硬碟的第一個扇區),bios在執行自己固有的程式以 後就會jump到mbr中的第一條指令。将系統的控制權交由mbr來執行。在總共512byte的主引導記錄中,MBR的引導程式占了其中的前446個字 節(偏移0H~偏移1BDH),随後的64個位元組(偏移1BEH~偏移1FDH)為DPT(Disk PartitionTable,硬碟分區表),最後的兩個位元組“55 AA”(偏移1FEH~偏移1FFH)是分區有效結束标志。

  MBR不随作業系統的不同而不同,意即不同的作業系統可能會存在相同的MBR,即使不同,MBR也不會夾帶作業系統的性質。具有公共引導的特性。

  我們來分析一段mbr。下面是用winhex檢視的一塊希捷120GB硬碟的mbr。

MBR扇區代碼

硬碟MBR詳細介紹

    你的硬碟的MBR引導代碼可能并非這樣。不過即使不同,所執行的功能大體是一樣的。這裡找wowocock關于磁盤mbr的反編譯,已加了詳細的注釋,感興趣可以細細研究一下。

    我們看DPT部分。作業系統為了便于使用者對磁盤的管理。加入了磁盤分區的概念。即将一塊磁盤邏輯劃分為 幾塊。磁盤分區數目的多少隻受限于C~Z的英文字母的數目,在上圖DPT共64個位元組中如何表示多個分區的屬性呢?microsoft通過連結的方法解決 了這個問題。在DPT共64個位元組中,以16個位元組為分區表項機關描述一個分區的屬性。也就是說,第一個分區表項描述一個分區的屬性,一般為基本分區。第 二個分區表項描述除基本分區外的其餘空間,一般而言,就是我們所說的擴充分區。這部分的大體說明見表1。

硬碟MBR詳細介紹

DPT代碼分析

注:上表中的超過1位元組的資料都以實際資料顯示,就是按高位到地位的方式顯示。存儲時是按低位到高位存儲的。兩者表現不同,請仔細看清楚。以後出現的表,圖均同。

  也可以在winhex中看到這些參數的意義:

硬碟MBR詳細介紹

    說明: 每個分區表項占用16個位元組,假定偏移位址從0開始。如圖3的分區表項3。分區表項4同分區表項3。

  1、0H偏移為活動分區是否标志,隻能選00H和80H。80H為活動,00H為非活動。其餘值對microsoft而言為非法值。

  2、重新說明一下(這個非常重要):大于1個位元組的數被以低位元組在前的存儲格式格式(little endian format)或稱反位元組順序儲存下來。低位元組在前的格式是一種儲存數的方法,這樣,最低位的位元組最先出現在十六進制數符号中。例如,相對扇區數字段的值 0x3F000000的低位元組在前表示為0x0000003F。這個低位元組在前的格式數的十進制數為63。

  3、系統在分區時,各分區都不允許跨柱面,即均以柱面為機關,這就是通常所說的分區粒度。有時候我們分區是輸入分區的大小為7000M,分出來 卻是6997M,就是這個原因。 偏移2H和偏移6H的扇區和柱面參數中,扇區占6位(bit),柱面占10位(bit),以偏移6H為例,其低6位用作扇區數的二進制表示。其高兩位做柱 面數10位中的高兩位,偏移7H組成的8位做柱面數10位中的低8位。由此可知,實際上用這種方式表示的分區容量是有限的,柱面和磁頭從0開始編号,扇區 從1開始編号,是以最多隻能表示1024個柱面×63個扇區×256個磁頭×512byte=8455716864byte。即通常的8.4GB(實際上 應該是7.8GB左右)限制。實際上磁頭數通常隻用到255個(由彙編語言的尋址寄存器決定),即使把這3個位元組按線性尋址,依然力不從心。 在後來的作業系統中,超過8.4GB的分區其實已經不通過C/H/S的方式尋址了。而是通過偏移CH~偏移FH共4個位元組32位線性扇區位址來表示分區所 占用的扇區總數。可知通過4個位元組可以表示2^32個扇區,即2TB=2048GB,目前對于大多數計算機而言,這已經是個天文數字了。在未超過 8.4GB的分區上,C/H/S的表示方法和線性扇區的表示方法所表示的分區大小是一緻的。也就是說,兩種表示方法是協調的。即使不協調,也以線性尋址為 準。(可能在某些系統中會提示出錯)。超過8.4GB的分區結束C/H/S一般填充為FEH FFH FFH。即C/H/S所能表示的最大值。有時候也會用柱面對1024的模來填充。不過這幾個位元組是什麼其實都無關緊要了。

  雖然現在的系統均采用線性尋址的方式來處理分區的大小。但不可跨柱面的原則依然沒變。本分區的扇區總數加上與前一分區之間的保留扇區數目依然必 須是柱面容量的整數倍。(保留扇區中的第一個扇區就是存放分區表的MBR或虛拟MBR的扇區,分區的扇區總數線上性表示方式上是不計入保留扇區的。如果是 第一個分區,保留扇區是本分區前的所有扇區。

  附:分區表類型标志如圖4

硬碟MBR詳細介紹

3.2 擴充分區

擴充分區中的每個邏輯驅動器都存在一個類似于MBR的擴充引導記錄( Extended Boot Record, EBR),也有人稱之為虛拟mbr或擴充mbr,意思是一樣的。擴充引導記錄包括一個擴充分區表和該扇區的标簽。擴充引導記錄将記錄隻包含擴充分區中每個 邏輯驅動器的第一個柱面的第一面的資訊。一個邏輯驅動器中的引導扇區一般位于相對扇區32或63。但是,如果磁盤上沒有擴充分區,那麼就不會有擴充引導記 錄和邏輯驅動器。第一個邏輯驅動器的擴充分區表中的第一項指向它自身的引導扇區。第二項指向下一個邏輯驅動器的EBR。如果不存在進一步的邏輯驅動器,第 二項就不會使用,而且被記錄成一系列零。如果有附加的邏輯驅動器,那麼第二個邏輯驅動器的擴充分區表的第一項會指向它本身的引導扇區。第二個邏輯驅動器的 擴充分區表的第二項指向下一個邏輯驅動器的EBR。擴充分區表的第三項和第四項永遠都不會被使用。

    通過一幅4分區的磁盤結構圖可以看到磁盤的大緻組織形式。如圖5

硬碟MBR詳細介紹

    關于擴充分區,如圖6所示,擴充分區中邏輯驅動器的擴充引導記錄是一個連接配接表。該圖顯示了一個擴充分區上的三個邏輯驅動器,說明了前面的邏輯驅動器和最後一個邏輯驅動器之間在擴充分區表中的差異。

硬碟MBR詳細介紹

   除了擴充分區上最後一個邏輯驅動器外,表2中所描述的擴充分區表的格式在每個邏輯驅動器中都是重複的:第一個項辨別了邏輯驅動器本身的引導扇區,第二個項 辨別了下一個邏輯驅動器的EBR。最後一個邏輯驅動器的擴充分區表隻會列出它本身的分區項。最後一個擴充分區表的第二個項到第四個項被使用。

硬碟MBR詳細介紹

   擴充分區表項中的相對扇區數字段所顯示的是從擴充分區開始到邏輯驅動器中第一個扇區的位移的位元組數。總扇區數字段中的數是指組成該邏輯驅動器的扇區數目。總扇區數字段的值等于從擴充分區表項所定義的引導扇區到邏輯驅動器末尾的扇區數。

    有時候在磁盤的末尾會有剩餘空間,剩餘空間是什麼呢?我們前面說到,分區是以1柱面的容量為分區粒度的,那麼如果磁盤總空間不是整數個柱面的話,不夠一個 柱面的剩下的空間就是剩餘空間了,這部分空間并不參與分區,是以一般無法利用。照道理說,磁盤的實體模式決定了磁盤的總容量就應該是整數個柱面的容量,為 什麼會有不夠一個柱面的空間呢。在我的了解看來,本來現在的磁盤為了更大的利用空間,一般在實體上并不是按照外圍的扇區大于裡圈的扇區這種管理方式,隻是 為了與作業系統相容而抽象出來CHS。可能其實際空間容量不一定正好為整數個柱面的容量。

繼續閱讀