檔案配置表FAT(File Allocation Table)

來源:互聯網
上載者:User
  檔案配置表是用來表示磁碟檔案的空間分配資訊的,它不對引導區、檔案目錄表的資訊進行表示,也不真正隱藏檔內容.    
   
          檔案佔用磁碟空間時,基本單位不是位元組而是簇。簇的大小與磁碟的規格有關,一般情況下,磁碟片每簇是1個扇區,硬碟每簇的扇區數與硬碟的總容量大小有關,為2的n次方,可能是4、8、16、32、64……  
          由於FAT對於檔案管理的重要性,所以FAT有一個備份,即在原FAT的後面再建一個同樣的FAT。初形成的FAT中所有項都標明為"未佔用",但如果磁碟有局部損壞,那么格式化程式會檢測出損壞的簇,在相應的項中標為"壞簇",以後存檔案時就不會再使用這個簇了。FAT的項數與硬碟上的總簇數相當,每一項佔用的位元組數也要與總簇數相適應,因為其中需要存放簇號。FAT的格式有多種,最為常見和為讀者所熟悉的是FAT16和FAT32,其中FAT16是指檔案配置表使用16位元字,由於16位分配表最多能管理65536(即2的16次方)個簇,也就是所規定的一個硬碟分區。  
          由於每個簇的儲存空間最大隻有32KB,所以在使用FAT16管理硬碟時,每個分區的最大儲存容量只有(65536×32   KB)即2048MB,也就是我們常說的2G。現在的硬碟容量是越來越大,由於FAT16對硬碟分區的容量限制,所以當硬碟容量超過2G之後,使用者只能將硬碟劃分成多個2G的分區後才能正常使用,為此微軟公司從Windows   95   OSR2版本開始使用FAT32標準,即使用32位的檔案配置表來管理硬碟檔案,這樣系統就能為檔案分配多達4294967296(即2的32次方)個簇,所以在簇同樣為32KB時每個分區容量最大可達65G以上。此外使用FAT32管理硬碟時,每個邏輯盤中的簇長度也比使用FAT16標準管理的同等容量邏輯盤小很多。由於檔案儲存體在硬碟上佔用的磁碟空間以簇為最小單位,所以某一檔案即使只有幾十個位元組也必須佔用整個簇,因此邏輯盤的簇單位容量越小越能合理利用儲存空間。所以FAT32更適於大硬碟。    
   
         
  檔案佔用磁碟空間時,基本單位不是位元組而是簇。簇的大小與磁碟的規格有關,一般情況下,磁碟片每簇是1個扇區.    
   
  硬碟每簇的扇區數與硬碟的總容量大小有關,其值見下表:    
   
  分區大小     FAT16   (扇區數/簇)     FAT32   (扇區數/簇)    
  16MB-127MB                     4                     1    
  128MB-255MB                   8                     1    
  256MB-259MB                   16                   1    
  260MB-511MB                   16                   8    
  512MB-1023MB                 32                   8    
  1024MB-2047MB               64                   8    
  2048MB-8GB                 不支援               8    
  8GB-16GB                     不支援               16    
  16GB-32GB                   不支援               32    
  32GB以上                     不支援               64    
   
   
  FAT16及FAT32相關特定值意義如下:  
   
  FAT16  
  1.DBR     第0扇區開始,使用一個扇區,沒有保留扇區.  
  2.FAT表長   在DBR第16H處的2位元組(表示佔用扇區數),FAT1從第1扇區開始      
  3.FAT簇   每簇用16位位元表示FAT表中每簇地址佔2Bytes  
  4.可用簇號   0002H   -   FFEFH   (   <=   FFEDH[65518]個簇)    
  5.特定簇號   0000H、0001H兩簇號不使用,其對應DWORD位置:F8   FF   FF   7F  
    簇值意義   不要把FAT表項內的數字誤認為表示當前簇號,而應是該檔案的下一個簇的簇號  
  高位元組在後低位元組在前是儲存方式,讀出時應進行調整,如兩位元組12H   34H,實際應為3412H    
  值FFF0H用來表示壞簇   值FFFFH表示檔案結束簇  
  特定值表示壞簇,其它值表示為檔案佔用的下一簇的簇號  
  6.根目錄區扇區大小,在DBR第11H的兩位元組(表示32位元組的根目錄個數)如值為00   02,則0200H=512個,即512*32位元組=16384位元組,等於32個扇區  
  7.扇區數量   在DBR第13H處2位元組    
   
  FAT32  
  1.DBR   從第0扇區開始,使用三個扇區,儲存了該邏輯盤每扇區位元組數,每簇對應的扇區數等重要參數和引導記錄.(佔用32扇區)  
  2.FAT表長   在DBR第24H處的4位元組(表示FAT佔用扇區數),FAT1從第32扇區開始.  
  3.FAT簇   FAT表中每簇地址佔4Bytes  
  4.可用簇號   00000002H   -   FFFFFEFFH    
  5.特定簇號   0000000H、00000001H兩簇號不使用,其對應的兩個DWORD位置(FAT表開頭的8個位元組)用來存放該盤介質類型編號:F8   FF   FF   0F   FF   FF   FF   0F  
  值00000000H表示該簇未被分配值FFFFFF0FH表示是該簇是檔案佔用的最後一族  
  特定值表示壞簇,其它值表示為檔案佔用的下一簇的簇號  
  6.根目錄區扇區大小,   不再是固定地區和固定大小    
  7.扇區數量   在DBR第20H處的4位元組    
   
   
  其它:  
  1.   FAT表按順序依次記錄了該盤各簇的使用方式,是一種位示圖法.    
  2.   每簇所佔用扇區數見上.    
  3.   微軟建議對小於512M的邏輯盤不使用FAT32  
  4.   對於使用FAT16檔案系統的硬碟分區時,不要將分區(邏輯盤)容量正好設為某一區間的下限.  
         
   
  計算公式:    
  每個扇區長度   =   512位元組    
  總簇數   =   邏輯盤容量/簇容量    
  總簇數   =   FAT表長度(位元組)/每個表項長度(位元組)-   2    
  FAT表長度=邏輯盤容量/簇容量*每個表項長度  
  每個有效FAT結構區包含兩個完全相同的拷貝:FAT1、FAT2    
   
  如:   2G     FAT   16分區格式的HD,   FAT長度為250Sectors,    
          則總簇數=   250   *   512   /   2     -   2   =   63998    
          簇容量(每簇扇區數)   =   2   097   000   000   /   63998   =   32776Bytes   =   64   Sectors    
   
  檔案目錄表FDT(File   Directory   Table),即根目錄(DIR)區,又稱為ROOT區  
          緊跟在FAT2的下一個扇區開始,記錄著根目錄下每個檔案(目錄)的起始單元,檔案的屬性等。定位檔案位置時,作業系統根據DIR中的起始單元,結合FAT表就可以知道檔案在硬碟中的具體位置和大小了。  
          如果支援長檔名,則每個表項為64個位元組,其中,前32個位元組為長檔案連結說明;後32個位元組為檔案屬性說明,包括檔案長度、起始地址、日期、時間等。如不支援長檔名,則每個表項為32個位元組的屬性說明。  
   
          根目錄下可包含檔案和子目錄,子目錄下又可包含檔案和下級子目錄.一個子目錄也佔用一個檔案目錄項,只不過它的屬性位元組為10H,檔案長度位元組為0.一個子目錄中的內容是若干個檔案目錄項或下級子目錄項.  
   
  Start   Pos.     Bytes   FAT16                       FAT32    
  00-07               8   檔案名稱                             檔案名稱    
  08-0A               3   副檔名                     副檔名    
  0B                     1   FAT16://表示屬性:     00000000讀寫   00000001隻寫   00000010隱含     00000111系統,隱含,唯讀   00000100系統   00001000卷標   00010000子目錄   00100000檔案,只要完成寫操作並已關閉即置1  
  FAT32://0至5位分別是唯讀位、隱藏位、系統位、卷標位、子目錄位、歸檔位  
  最高兩位保留未用  
     
  0C-0D         2       保留未用                   儲存短檔案名稱位元組校正和    
  0E-0F         2       保留未用                   檔案建立時間    
  10-11         2       保留未用                   檔案建立日期    
  12-13         2       保留未用                   最新訪問日期    
  14-15         2       保留未用                   檔案存放的起始簇號的高16位    
  16-17         2       檔案建立時間(hhhhhmmmmmmsssss)                 檔案最新修改時間    
  18-19         2       檔案建立日期(yyyyyyymmmmddddd)               檔案最新修改日期    
  1A-1B         2       檔案存放的起始簇號(低位元組在前)                   檔案存放的起始簇號的低16位    
  1C-1F         4       檔案長度                   檔案長度    
   
   
  注:目錄項中第0~7位元組為檔案名稱(若有剩餘位元組則用空白字元20H填充).  
  其中,第1位元組又表明了該檔案的狀態,它有如下四種取值方式:  
  a.   00H--目錄項的空目錄。  
  b.   E5H--表示該目錄項曾經使用過,但檔案已被刪除。  
  c.   2EH--表示子目錄下的兩個特殊檔案"."或".."目錄項  
  d.   其它任何字元--表示一個檔案名稱(或目錄名)的第一個字元的ASCII碼值.  
   
   
  資料(DATA)區  
  資料區是真正意義上的資料存放區的地方,位於DIR區之後,佔據硬碟上的大部分資料空間。  
  檔案資料起始地址(扇區號)     =   保留扇區數(DBR)   +   每FAT扇區數   *   2   +   根目錄項數/32   (FDT扇區數)   +   每簇扇區數   *   (起始簇號   -   2)  
   
          當一個程式對作業系統要求提供某一個檔案的內容時,作業系統會到此檔案的目錄記錄表去尋找它的第一個簇號碼,   然後再到FAT記錄表裡去找在此一鏈結(Chain)裡的下一個簇。   此動作不斷的重複直到找到檔案的最後一個簇為止,作業系統可以精確的計算那些簇屬於這個檔案及其先後順序。經由此方式,作業系統可以提供者所要求之檔案的任何部分。這種組織檔案的方式稱   為FAT鏈(FAT   Chain).  
          在FAT檔案系統下,檔案永遠被分配到整數單位的簇。   在一個每一簇大小為32K的1.2GB磁碟中,一個只包含"Hello,World!"這幾個字元的大小為12個   位元組檔案仍要在磁碟中佔32K的空間。在簇中沒有用到的部分稱為耗損(Slack),小檔案的耗損幾乎與整個簇相當,平均來說,一個檔案會有一半左右的耗損。  
          檔案的讀取: 作業系統從目錄區中讀取檔案資訊(包括檔案名稱、尾碼名、檔案大小、修改日期和檔案在資料區儲存的第一個簇的簇號),我們這裡假設第一個簇號是0023。作業系統從0023簇讀取相應的資料,然後再找到FAT的0023單元,如果內容是檔案結束標誌(FF),則表示檔案結束,否則內容儲存資料的下一個簇的簇號,這樣重複下去直到遇到檔案結束標誌。    
   
          檔案的寫入:當我們要儲存檔案時,作業系統首先在DIR區中找到空區寫入檔案名稱、大小和建立時間等相應資訊,然後在Data區找到閑置空間將檔案儲存,並將Data區的第一個簇寫入DIR區,其餘的動作和上邊的讀取動作差不多。  
   
          DOS刪除檔案時只是把檔案目錄表中的該檔案的表項第0個位元組改為E5h,表此表項已被刪除,並在檔案配置表中把該檔案佔用各簇的表項清0,以釋放空間。其實檔案的內容仍在盤上,並沒有被真正刪除,這就是undelete.exe、unerase.exe等一類恢複移除工具能起作用的原因。   
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.