春節前微軟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...