FAT檔案系統原理 一

2021-04-06 13:06:04 字數 3729 閱讀 7031

fat檔案系統原理(一)

一、硬碟的物理結構:

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

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

二、硬碟的邏輯結構。

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

三、磁碟引導原理。

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引導**可能並非這樣。不過即使不同,所執行的功能大體是一樣的。這是wowocock關於磁碟mbr的反編譯,已加了詳細的注釋,感興趣可以細細研究一下。

我們看dpt部分。作業系統為了便於使用者對磁碟的管理。加入了磁碟分割槽的概念。即將一塊磁碟邏輯劃分為幾塊。磁碟分割槽數目的多少只受限於c~z的英文本母的數目,在上圖dpt共64個位元組中如何表示多個分割槽的屬性呢?microsoft通過鏈結的方法解決了這個問題。在dpt共64個位元組中,以16個位元組為分割槽表項單位描述乙個分割槽的屬性。也就是說,第乙個分割槽表項描述乙個分割槽的屬性,一般為基本分割槽。第二個分割槽表項描述除基本分割槽外的其餘空間,一般而言,就是我們所說的擴充套件分割槽。這部分的大體說明見表1。

表1  圖2分割槽表第一字段

位元組位移

字段長度

值欄位名和定義

0x01be

byte

0x80

引導指示符(boot indicator)   指明該分割槽是否是活動分割槽。

0x01bf

byte

0x01

開始磁頭(starting head)

0x01c0

6位0x01

開始扇區(starting sector) 只用了0~5位。後面的兩位(第6位和第7位)被開始柱面欄位所使用

0x01c1

10位0x00

開始柱面(starting cylinder)   除了開始扇區欄位的最後兩位外,還使用了1位來組成該柱面值。開始柱面是乙個10位數,最大值為1023

0x01c2

byte

0x07

系統id(system id) 定義了分割槽的型別,詳細定義,請參閱圖4

0x01c3

byte

0xfe

結束磁頭(ending head)

0x01c4

6位0xff

結束扇區(ending sector)     只使用了0~5位。最後兩位(第6、7位)被結束柱面欄位所使用

0x01c5

10位0x7b

結束柱面(ending cylinder) 除了結束扇區字段最後的兩位外,還使用了1位,以組成該柱面值。結束柱面是乙個10位的數,最大值為1023

0x01c6

dword

0x0000003f

相對扇區數(relative sectors) 從該磁碟的開始到該分割槽的開始的位移量,以扇區來計算

0x01ca

dword

0x00daa83d

總扇區數(total sectors) 該分割槽中的扇區總數

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

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

關於擴充套件分割槽,如圖6所示,擴充套件分割槽中邏輯驅動器的擴充套件引導記錄是乙個連線表。該圖顯示了乙個擴充套件分割槽上的三個邏輯驅動器,說明了前面的邏輯驅動器和最後乙個邏輯驅動器之間在擴充套件分割槽表中的差異。

除了擴充套件分割槽上最後乙個邏輯驅動器外,表2中所描述的擴充套件分割槽表的格式在每個邏輯驅動器中都是重複的:第乙個項標識了邏輯驅動器本身的引導扇區,第二個項標識了下乙個邏輯驅動器的ebr。最後乙個邏輯驅動器的擴充套件分割槽表只會列出它本身的分割槽項。最後乙個擴充套件分割槽表的第二個項到第四個項被使用。   

表2  擴充套件分割槽表項的內容

擴充套件分割槽表項

分割槽表項的內容

第乙個項

包括資料的開始位址在內的與擴充套件分割槽中當前邏輯驅動器有關的資訊

第二個項

有關擴充套件分割槽中的下乙個邏輯驅動器的資訊,包括包含下乙個邏輯驅動器的ebr的扇區的位址。如果不存在進一步的邏輯驅動器的話,該欄位不會被使用

第三個項

未用第四個項

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

有時候在磁碟的末尾會有剩餘空間,剩餘空間是什麼呢?我們前面說到,分割槽是以1柱面的容量為分割槽粒度的,那麼如果磁碟總空間不是整數個柱面的話,不夠乙個柱面的剩下的空間就是剩餘空間了,這部分空間並不參與分割槽,所以一般無法利用。照道理說,磁碟的物理模式決定了磁碟的總容量就應該是整數個柱面的容量,為什麼會有不夠乙個柱面的空間呢。在我的理解看來,本來現在的磁碟為了更大的利用空間,一般在物理上並不是按照外圍的扇區大於裡圈的扇區這種管理方式,只是為了與作業系統相容而抽象出來chs。可能其實際空間容量不一定正好為整數個柱面的容量吧。關於這點,如有高見,請告知http://www.sjhf.net或[email protected][email protected]。 

FAT檔案系統原理 一

一 硬碟的物理結構 硬碟儲存資料是根據電 磁轉換原理實現的。硬碟由乙個或幾個表面鍍有磁性物質的金屬或玻璃等物質碟片以及碟片兩面所安裝的磁頭和相應的控制電路組成 圖1 其中碟片和磁頭密封在無塵的金屬殼中。硬碟工作時,碟片以設計轉速高速旋轉,設定在碟片表面的磁頭則在電路控制下徑向移動到指定位置然後將資料...

FAT檔案系統原理

一 硬碟的物理結構 硬碟儲存資料是根據電 磁轉換原理實現的。硬碟由乙個或幾個表面鍍有磁性物質的金屬或玻璃等物質碟片以及碟片兩面所安裝的磁頭和相應的控制電路組成 圖1 其中碟片和磁頭密封在無塵的金屬殼中。硬碟工作時,碟片以設計轉速高速旋轉,設定在碟片表面的磁頭則在電路控制下徑向移動到指定位置然後將資料...

FAT檔案系統原理

一 硬碟的物理結構 硬碟儲存資料是根據電 磁轉換原理實現的。硬碟由乙個或幾個表面鍍有磁性物質的金屬或玻璃等物質碟片以及碟片兩面所安裝的磁頭和相應的控制電路組成 圖1 其中碟片和磁頭密封在無塵的金屬殼中。硬碟工作時,碟片以設計轉速高速旋轉,設定在碟片表面的磁頭則在電路控制下徑向移動到指定位置然後將資料...