FAT檔案系統幾點釋疑

2021-09-22 05:13:10 字數 3078 閱讀 4886

春節前微軟mf負責人員就提出用c#實現mf的檔案系統,由於前一段時間事務相對比較繁忙,所以直到上禮拜六才開始深入研究fat檔案系統。其實fat檔案系統早在九十年代中期上大學初的時候就已經了解,當時有一款叫pctools的工具軟體,可以直接讀寫磁碟的扇區,由於當時的軟盤很容易壞(常見的就是0磁軌被劃傷),所以那個時候能用pctools修復軟盤的在我眼中都是高手。當時對fat表,32個位元組的檔案(或目錄)資訊表基本都了解,唯一比較可惜的是,自己從來都沒有用pctools修改過磁碟的扇區資訊(為什麼呢?我想不外乎如下幾個原因,一、相關資料比較匱乏(網際網路真是乙個好東西);二、掌握這種技能的人相對比較保守,不肯輕易示人;三、當時我的主要興趣是用c語言實現各種數學演算法,直到現在,我的內心深處也是對相對偏硬的知識有一種近乎本能的排斥(我當時編寫的那些程式直到今天都執行正常,那些相對偏硬(或偏底層)一點的技術,如駐留記憶體技術、直接打屏技術、修改中斷向量表技術、操作bios中斷、dos中斷技術、西文dos下顯示漢字技術,其實到目前已經作古))。

下面幾點疑問其實就是我的疑問,不敢說我的理解是正確的,但最起碼比以前的理解更接近真相。

1、  fat32比fat16檔案系統在資料訪問方面更有效率,因為它的簇數所佔位元組數比後者小?

答:這種理解是比較片面的。如下表(微軟預設格式化引數)

fat16檔案系統

fat32檔案系統

磁碟大小

扇區/簇

位元組數磁碟大小

扇區/簇

位元組數4.1~16mb21k

32.5~260mb

1512

<=128mb42k

<=8gb84k

<=256mb84k

<=16gb

168k

<=512mb

168k

<=32gb

3216k

<=1gb

3216k

>32gb

6432k

<=2gb

6432k

其實對小容量儲存器<=256m我倒是時比較建議用fat16格式,至於小於4m的儲存器那就不要難為fat16了,直接採用fat12吧。

2、  怎樣區分fat12、fat16、fat32檔案系統?

答:通過資料區所占用的簇數來判斷,微軟的文件中號稱這是檢查fat檔案系統型別的唯一辦法,稱這個世上不存在簇數大於4084的fat12卷,也不存在簇數小於4085或是大於65524的fat16卷,同樣沒有哪個fat32卷的簇數小於65525。如果你堅持要違背這個規則來建立乙個fat卷,那麼微軟的作業系統將無法對此卷進行操作,因為它不認為這是fat檔案系統。

簇數=(扇區總數-(保留扇區數+(fat表個數*fat表所佔扇區數)+根目錄所佔扇區數))/每簇扇區數

3、  主要分割槽、擴充套件分割槽、邏輯驅動器?

答:磁碟系統最初設計的時候,認為乙個磁碟分四個分割槽就夠了,這四個分割槽就是主要分割槽,由磁碟引導扇區dpt磁碟分割槽表進行配置(乙個分割槽配置佔16個位元組,共64個位元組)。隨著硬碟容量的增大(更有可能的是最初設計的時候就已經考慮到了這種情況),分四個分割槽不能滿足需要了,特別是fat16時代,乙個硬碟大於8g,分四個區後,剩下的空間就沒法利用了。擴充套件分割槽這個時候的意義就來了,可以把擴充套件分割槽又看成乙個小磁碟,它的初始扇區的位址由dpt磁碟分割槽表任意4個中的任乙個指定(注意,在磁碟型別這個位元組的配置中一定設定為0x05,它告訴系統,這個位址指向的分割槽是擴充套件分割槽,其它常用的值如,01-fat32 ,06-fat16,07-ntfs分割槽,在不知道這個知識的情況下,害的我到處到在google上搜尋,怎樣區分mdr和dbr扇區資訊)。邏輯驅動器是擴充套件分割槽這個小磁碟上的主要分割槽,不過這個分割槽前面一定要有虛擬mdr引導記錄扇區,這個扇區中dpt磁碟分割槽表再指向實際的磁碟分割槽(有點繞),這時候的分割槽內容就和主要分割槽一樣了。所以嘛,如果你僅分四個以內(包括四個)的分割槽,我建議最好都分成主分割槽。

4、  u盤能否分割槽?

5、  怎樣直接讀寫硬碟指定的扇區?

答:以前認為很複雜,其實很簡單,用流函式操作即可(需要超級使用者的許可權)。

createfile,closehandle,writefile,readfile四個api函式搞定,唯一區別的是,檔名稱要特別設定。

對邏輯磁碟,其檔名稱為:「\\.\c:」、「\\.\d:」  … … 其讀寫的0扇區從引導扇區開始算起(即dbr所在的扇區)。

對物理磁碟,其檔名稱為:「\\.\physicaldrive0」、「\\.\ physicaldrive1」  … …其讀寫的0扇區就是主引導記錄所在的扇區。

6、  什麼是隱藏扇區、保留扇區?

以fat16檔案系統為例

隱藏扇區

保留扇區

fat表

根目錄區

資料區分區前 ß

à分割槽後  檔案系統開始的部分

隱藏扇區可以沒有,隱藏扇區第一扇區就是存放mbr(或擴充套件分割槽中虛擬mbr),保留扇區第乙個扇區存放的就是引導扇區資訊(dbr)。

上圖是我用c#做的磁碟讀寫程式,已經可以分割槽和格式化了。

參考資料:

1、《microsoft extensible firmware initiative fat32 file system specification》 v1.03,december 6,2000

2、網友整理的《fat檔案系統原理》

附記:學會一件東西需要有三要素:1、相關資料齊備(否則麻煩就大了,還好我們有網際網路,這裡向那些斬荊劈藜的先驅致敬) 2、多讀、多想、多做 3、再加一點領悟能力

什麼叫悟性,看過武打**的人對這個「悟性」這個詞一定心神領會,沒有悟性的人即使武林秘籍在手,也練不成絕世武功。在佛教徒裡,沒有「悟性」的人是成不了佛的。有些人認為悟性是天生的,和天資聰穎是一回事。

我個人拙見,人認識和理解新事物分三個步驟,第一步把新事物和以前已知的事物進行模擬,做出第一步猜想;第

二、驗證猜想;第

三、回到第一步,繼續迴圈,直到接近事物的本源(其實很多科學規律的就是這樣發現的)。悟性和認識事物的這個過程的時間長短成反比。如果時間為一剎那,那麼他就成佛了。

做出猜想是成功的第一步,尤為重要,而這一步我認為和後天的經驗有關,是可以通過學習得到的。其實很聰明,悟性很高的人,涉獵很廣,對很多知識都有很強的求知慾,相關知識積累到一定層度,最後量變就引起質變。現在的原子彈不是也不用實際爆破試驗了嗎,通過計算機就可以模擬試驗了,大大加快了研發程序(這是因為技術儲備到一定層度了)。

FAT檔案系統幾點釋疑

春節前微軟mf負責人員就提出用c 實現mf的檔案系統,由於前一段時間事務相對比較繁忙,所以直到上禮拜六才開始深入研究fat檔案系統。其實fat檔案系統早在九十年代中期上大學初的時候就已經了解,當時有一款叫pctools的工具軟體,可以直接讀寫磁碟的扇區,由於當時的軟盤很容易壞 常見的就是0磁軌被劃傷...

fat檔案系統

在主引導區後面就是fat表。從上面可以得知乙個fat表是229個扇區。它裡邊的內容很簡單,裡邊的內容就是指出下乙個簇在 你的盤有多少個簇,那麼它的fat表就要有多少個項來描述它們。因為fat16是用2個位元組 16位 來描述乙個簇的,所以這時fat表的大小就應該是2位的簇數個位元組。fat表中,第4...

FAT檔案系統簡介

fat即file allocation table 檔案分配表 的簡稱,fat系列的檔案系統曾經是個人機平台應用最廣泛的檔案系統,除此之外它們還經常被應用於許多系統的記憶體模組管理中。fat檔案系統因其對儲存在其內部的檔案的管理方式而得名,它將組成每個檔案的資料塊以指標鍊錶的方式串聯起來,並依靠fa...