檔案分配表

2022-03-20 21:56:12 字數 4274 閱讀 2617

fat是dos、windows9x系統的檔案定址格式,位於dbr之後。

在解釋檔案分配表的概念的時候,我們有必要談談簇(cluster)的概念。檔案占用磁碟空間,基本單位不是位元組而是簇。一般情況下,軟盤每簇是1個扇區,硬碟每簇的扇區數與硬碟的總容量大小有關,可能是4、8、16、32、64……同乙個檔案的資料並不一定完整地存放在磁碟的乙個連續的區域內,而往往會分成若干段,像一條鍊子一樣存放。這種儲存方式稱為檔案的鏈式儲存。由於硬碟上儲存著段與段之間的連線資訊(即fat),作業系統在讀取檔案時,總是能夠準確地找到各段的位置並正確讀出。

為了實現檔案的鏈式儲存,硬碟上必須準確地記錄哪些簇已經被檔案占用,還必須為每個已經占用的簇指明儲存後繼內容的下乙個簇的簇號。對乙個檔案的最後一簇,則要指明本簇無後繼簇。這些都是由fat表來儲存的,表中有很多表項,每項記錄乙個簇的資訊。由於fat對於檔案管理的重要性,所以為了安全起見,fat有乙個備份,即在原fat的後面再建乙個同樣的fat。初形成的fat中所有項都標明為「未占用」,但如果磁碟有區域性損壞,那麼格式化程式會檢測出損壞的簇,在相應的項中標為「壞簇」,以後存檔案時就不會再使用這個簇了。fat的項數與硬碟上的總簇數相當,每一項占用的位元組數也要與總簇數相適應,因為其中需要存放簇號。fat的格式有多種,最為常見的是fat16和fat32。

當乙個磁碟format後,在其邏輯0扇區(即boot扇區)後面的幾個扇區中存在著乙個重要的資料表—檔案分配(fat),檔案分配表一式兩份,佔據扇區的多小憑磁碟型別大小而定。顧名思義,檔案分配表是用來表示磁碟問件的空分配資訊的。它不對引導區,檔案目錄的資訊進行表示,也不真正儲存檔案內容。

我們知道磁碟是由乙個乙個扇區組成的,若干個扇區合為乙個簇,檔案訪問是以簇為單位的,哪怕這個檔案只有1個位元組。每個簇在檔案分配表中都有對應的表項,簇號即為表項號,每個表項佔1.5個位元組(磁碟空間在10mb以下)或2個位元組(磁碟空間在10mb以上)。為了方便起見,以後所說的表項都是指2個位元組的。

檔案分配表結構如1(h表示16進製制)

表1第0位元組 表頭,表磁碟型別。ffh雙面軟盤,每次道8扇區feh單面軟盤,每磁軌8扇區fdh雙面軟盤,每磁軌9扇區fcch單面軟盤,每磁軌9扇區fc8h硬碟

第1~2位元組 (表項號1)表示第一簇狀態,因第一簇被系統佔據,故此兩位元組為ffffh

第3~4位元組 (表項號2)表示第二簇狀態,若為fffh表此簇為壞的,dos已標記為不能用;0000h表示此簇為空,可以用;fff8h表不能示該簇為檔案的最後一簇;其餘數字表示檔案的下乙個簇號,注意高位元組在後,低位元組在前。

第5~6位元組 (表項號3)表示第三簇狀態,同上。

注意:不要把表項內的數字誤認為表示當前簇號,而應是該檔案的下乙個簇的簇號。.高位元組在後,低位元組在前是一種儲存數字方式,讀出時應對其進行調整。是如兩位元組12h,34h,應調整為3412h。

檔案分配表與檔案目錄(fdt)相配合,可以統一管理整個磁碟的檔案。它告訴系統磁碟上哪些簇是壞的或已被使用,哪些簇可以用,並儲存每個檔案所使用的簇號。它是檔案的「總排程師」。

當dos寫檔案時,首先在檔案目錄中檢查是否有相同檔名,若無則使用乙個檔案目錄表項,然後依次檢測fat中的每個表項對應的簇中,同時將該簇號寫入檔案目錄表項相的26-27位元組,如檔案長度不止一簇,則繼續向後尋找可用簇,找到後將其簇號寫入上一次找到的表項中,如此直到檔案結束,在最後一簇的表項裡填上fff8h,形成單向鍊錶。

dos刪除檔案時只是把檔案目錄表中的該檔案的表項第0個位元組改為e5h,表此項已被刪除,並在檔案分配表中把該檔案占用的各簇的表項清0,並釋放空間。其檔案的內容仍然在盤上,並沒有被真正刪除,這就是undelete.exe,unerase.exe等一類恢復刪除工具能起作用的原因。

檔案分配表在系統中的地位十分重要,使用者最好不要去修改它,以免誤操作帶來嚴重的後果。

fat表的定位

硬碟分割槽的主要結構說明:

(cylinder柱面/磁軌-side磁頭-sector扇區位址以下簡稱為?-?-?)

《主分割槽》

名稱 位址 長度(扇區)

主引導記錄(main boot record) 0-0-1 1

系統扇區(system secotrs) 0-0-2,0-0-63 62

引導扇區(boot) 0-1-1 1

fat16系統中,此扇區包含bpb(bios parameter block)表,描述邏輯盤結構組成,包含隱藏扇區數目(從0-1-1開始計算)、fat扇區數、fat拷貝數、硬碟磁頭總數、根目錄表項最大值等。

fat32系統中,bpb表的偏移與fat16不同,但表項基本相同。整個隱藏扇區部分都作為邏輯盤的描述區域。

隱藏扇區(hidden secotrs):

fat16 0-1-1 1

fat32 0-1-1 32

檔案分配表(file allocation table):

fat16 0-1-2 根據邏輯盤容量變化

fat32 0-1-33 根據邏輯盤容量變化

說明:fat16的每個表項由2位元組(16位)組成,通常每個表項指向的簇包含64個扇區,即32k位元組。

邏輯盤容量最大為2047mb。

fat32的每個表項由4位元組(32位)組成,通常每個表項指向的簇包含8個扇區,即4k位元組。

邏輯盤容量最小為512mb。

對於c分割槽,在mbr的偏移01c2h處,fat16為06h,fat32為0ch。

有關計算公式為:

每個扇區長度=512位元組

總簇數=邏輯盤容量/簇容量

總簇數=fat表長度(位元組)/每個表項長度(位元組)-2

fat表長度=邏輯盤容量/簇容量*每個表項長度

fat表的開始由介質描述符+一串「已占用」標誌組成:

fat16硬碟----f8 ff ff 7f

fat32硬碟----f8 ff ff 0f ff ff ff 0f

每個有效的fat結構區包含兩個完全相同的拷貝:fat1、fat2

檔案目錄表(file directory table),即根目錄區,又稱為root區:

緊跟在fat2的下乙個扇區,長度為32個扇區(256個表項)。如果支援長檔名,則每個表項

為64個位元組,其中,前32個位元組為長檔案鏈結說明;後32個位元組為檔案屬性說明,包括檔案長

度、起始位址、日期、時間等。如不支援長檔名,則每個表項為32個位元組的屬性說明。

資料區(data area):

緊跟在fdt的下乙個扇區,直到邏輯盤的結束位址。

《擴充套件分割槽》

名稱 位址 長度(扇區)

擴充套件分割槽(extend partition) ?-y-1 1

系統扇區(system secotrs) ?-y-2,?-y-63 62

引導扇區(boot) ?-(y+1)-1 1

其後各項與主分割槽相同……

fat表引起的讀寫故障

硬碟檔案分配表龐大無法手工修復,只能依靠工具。

fat表記錄著硬碟資料的儲存位址,每乙個檔案都有一組fat鏈指定其存放的簇位址。fat表的損壞意味著檔案內容的丟失。慶幸的是dos系統本身提供了兩個fat表,如果目前使用的fat表損壞,可用第二個進行覆蓋修復。但由於不同規格的磁碟其fat表的長度及第二個fat表的位址也是不固定的,所以修復時必須正確查詢其正確位置,一些工具軟體如nu等本身具有這樣的修復功能,使用也非常的方便。採用debug也可實現這種操作,即採用其m命令把第二個fat表移到第乙個表處即可(不建議這樣做)。如果第二個fat表也損壞了,則也無法把硬碟恢復到原來的狀態,但檔案的資料仍然存放在硬碟的資料區中,可採用chkdsk或scandisk命令進行修復,最終得到*.chk檔案,這便是丟失fat鏈的扇區資料。如果是文字檔案則可從中提取出完整的或部分的檔案內容。

軟盤檔案分配fat表修復

在執行某個程式時,有時會在螢幕上看到:file allocation table bad,drive a(檔案分配錶壞)的錯誤資訊,導致程式不能正常執行。

我們知道,在磁碟中有兩個檔案分配表:fat1和fat2。fat1用於日常工作,fat2備用。因此,在fat1損壞時,可用fat2表修補。

具體方法是:執行debug,將fat2讀入緩衝區,用緩衝區的fat2資料覆蓋磁碟中的fat1。

例:修復3寸1.44m軟盤,在a驅

在dos環境下進入debug環境

在「-」提示符下進行如下操作:

-l 100 0 0a 9

-w 100 0 1 9

-q其它型別的軟盤的修復方法參照下表進行。

起止邏輯扇區 5.25"低密 5.25"高密 3.5"低密 3.5"高密

boot區 0 0 0 0

fat1 1-2 1-7 1-3 1-9

fat2 3-4 8-0eh 4-6 0a-12h

例如我們要修復5.25"高密軟盤的fat,則需將上述引數改為:

-l 100 0 8 7

-w 100 0 1 7

-q

檔案分配表 FAT 及其結構

檔案分配表 fat 是檔案管理系統用來給每個檔案分配磁碟物理空間的 它告訴作業系統,檔案存放在磁碟的什麼地方。1.fat表的大小及位置 fat在磁碟上是安排在緊接dos引導扇區 dbr 之後的。在fat16系統中,它總是從dos的邏輯1扇區開始。在磁碟上共有fat表的兩個拷貝 乙個是基本fat表,另...

PSI SI表table id分配表

table id值 描述 0x00 節目關聯段 0x01 條件接收段 0x02 節目對映段 0x03 傳輸流描述段 0x04 至 0x3f 預留 0x40 現行網路資訊段 0x41 其它網路資訊段 0x42 現行傳輸流業務描述段 0x43 至 0x45 預留使用 0x46 現行傳輸流業務描述段 0x...

sudo 許可權分配表

在實際工作中可以通過sudo對不同型別的用賦予不同的許可權,具體可以參考如下列表進行參考 1 運維組 op 級別許可權初級運維 a b c d 檢視系統資訊,檢視網路狀態等基本資訊內容 usr bin free,usr bin iostat,usr bin top,bin hostname,sbin...