close

FAT



維基百科,自由的百科全書



跳转到: 导航, 搜尋




A


為了閱讀方便,本文使用全文手工轉換。轉換內容:


  1. zh-cn:文件分配表;zh-tw:檔案配置表 當前用字模式下顯示為→檔案配置表
  2. zh-cn:鏈表;zh-tw:連結串列表 當前用字模式下顯示為→連結串列表
  3. zh-cn:文件;zh-tw:檔案 當前用字模式下顯示為→檔案
  4. zh-tw:作業系統;zh-cn:操作系統 當前用字模式下顯示為→作業系統


顯示↓關閉↑附加說明(對轉換結果有疑問時)


用詞轉換(繁簡轉換)是中文維基的一項自動轉換,目的是以電腦程式適應不同用字模式的差異。標題轉換和全文轉換都是對該技術的手動轉換的應用。


由於技術所限,用詞轉換有時會不穩定,在剛增加標題轉換和全文轉換時,由於緩存原因不一定馬上顯示轉換後的正確結果。你可以嘗試單擊這裡進行強制刷新









開發商


全名






發佈




分區標識




結構
FAT12
FAT16
FAT32

目錄內容


檔案分配


壞塊


限制
FAT12
FAT16
FAT32

最大檔案大小




最大檔案數量




最長檔名限制


最大卷大小




Features
FAT12
FAT16
FAT32

記錄日期


日期範圍


岔流


屬性


訪問許可


透明壓縮



透明加密

FAT12FAT16FAT32
微軟
檔案配置表
(12位元版本)(16位元版本)(32位元版本)
1977年
(微軟Disk BASIC)
1988年七月
(MS-DOS 4.0)
1996年八月
(Windows 95 OSR2)
0x01 (MBR)0x04, 0x06, 0x0E (MBR)0x0B, 0x0C (MBR)
EBD0A0A2-B9E5-4433
-87C0-68B6B72699C7
(GPT)
Table
連結串列表
連結串列表
32 MiB2 GiB4 GiB
4,07765,517268,435,437
8.3 或者 長檔案名255個字元
32 MiB4 GiB8 TiB
創建、修改、訪問
1980年1月1日2107年12月31日
非原生
唯讀, 隱藏, 系統, 卷標, 子目錄, 檔案
No
Per-volume, Stacker, DoubleSpace, DriveSpaceNo
Per-volume only with DR-DOSNo

檔案配置表File Allocation Table),是一種由微軟發明的並帶有部分專利[1]檔案系統,供MS-DOS使用,也是非NT核心的微軟視窗使用的檔案系統。


FAT檔案系統考慮當時電腦效能有限,所以未被複雜化,因而被幾乎所有個人電腦作業系統支持。這特性使它成為理想的軟碟記憶卡檔案系統,也適合用作不同作業系統中的資料交流。


但FAT有一個嚴重的缺點:當檔案被刪除並且在同一位置被寫入新資料,他們的片段通常是分散的,減慢了讀寫速度。磁碟碎片重整是一種解決方法,但必須經常重組來保持FAT檔案系統的效率。







目錄

[隐藏]





[編輯] 歷史


FAT檔案系統遵行已用了多年的軟體方法來進行規範。它在1977年比爾·蓋茨馬斯·麥當勞為了管理磁碟而發明,並在1980年添·彼得遜86-DOS作業系統採用。這也是86-DOS作業系統與CP/M作業系統最大的不同點,若非此項差異,86-DOS作業系統與CP/M作業系統幾乎可說完全相同。[2]



[編輯] FAT12


初期的FAT就是現在俗稱的FAT12。作為軟碟的檔案系統,它有幾項限制:不支持分層性結構,叢集定址只有12位元(這使得控制FAT有些棘手)而且只支援最多32M(216)的分區。


當時入門級的磁碟是5.25"、單面、40磁軌、每個磁軌8個扇區、容量略少於160KB。上面的限制超過了這個容量一個或幾個數量級,同時允許將所有的控制結構放在第一個磁軌,這樣在讀寫操作時移動磁頭。這些限制在隨後的幾年時間里被逐步增大。


由於唯一的根目錄也必須放在第一個磁軌,能夠存放的檔案個數就限制在了幾十個。



[編輯] 目錄


為了很好地支持以帶有10MB硬碟為特色的IBM PC XT新電腦,在1983年年初MS-DOS 2.0幾乎電腦在同時發佈,它引進了層次目錄結構。除了允許更好地組織檔案外,目錄允許在硬碟上存儲更多的檔案,這是因為最大檔案個數不再受制於(仍然是固定的)根目錄大小。這個數目現在能夠等同於簇的數目(甚至更大,這是考慮到長度為0的檔案並不佔據任何FAT簇)。


FAT本身的格式並沒有改變。PC XT的10MB的硬碟有4KB大小的簇。如果後來安裝了一個20MB的硬碟,並且使用MS-DOS 2.0格式化,最後的簇大小將變為8KB,硬碟容量將變為15.9MB。



[編輯] FAT16的開始


1984年,IBM發布PC AT,這是一個20 MB的硬碟。微軟公司也同步發佈了MS-DOS 3.0。簇集位址增加至16位元,允許更大數量的叢集(最大 65,517),所以有更大的檔案系統大小。但是,最大數量磁區及最大分割區(相當於磁盤)的大小仍是32 MB。所以,儘管技術上已經是「FAT16」,這種格式並不是我們今天常見到的這個名字所代表的格式。在MS-DOS 3.0格式化一個20 MB的硬碟,這硬碟將不能被MS-DOS 2.0或之前的版本所存取。當然,MS-DOS 3.0 仍然可存取MS-DOS 2.0的格式(8 KB叢集的分割區)。


MS-DOS 3.0也開始支持高密度1.2MB 5.25"磁碟,最著名的是每個磁軌有15個扇區,這樣就允許FAT有更大的空間。這或許促進了一個對於叢集大小的不確定的優化,叢集大小從2個扇區減到1個。這樣做的最後結果是高密度磁碟比舊的雙密度磁碟的速度大幅度降低。



[編輯] 擴展分區和邏輯驅動器


除了改進FAT檔案系統本身的結構之外,一個並行的提高FAT存儲空間的開發路線是支持多個磁碟分區。最初,由於主引導分區中檔案配置表的固定結構的原因一個硬碟只能使用多達4個分區。然而,由於DOS設計要求只能有一個分區標識為「活動的」,它也是主引導代碼啟動所用的分區。使用DOS工具不可能創建幾個「主」DOS分區,並且第三方的工具也至少會警告這樣一個機制將與DOS不相容。


為了用一種相容的方式使用更多的分區,一種新的分區類型被開發出來(1986年]1月的MS-DOS 3.2),擴展分區它實際上是另外稱為邏輯分區的一個容器。最初它裡面只允許有一個邏輯分區、支持最大64MB的硬碟。在MS-DOS 3.3(1987年8月)這個限制更改到24個分區;它可能來自於強制性的C:-Z:的磁碟命名規則。邏輯分區表使用盤上的資料結構來描述,可能是為了簡化編碼它與主引導記錄非常相似,並且它們組織成類似於俄羅斯套娃那樣的結構。系統中只能有一個擴展分區。


在擴展分區引入之前,一些硬碟控制器(當時是獨立的板子,因為還沒有IDE標準)能夠將大硬碟顯示為兩個獨立的硬碟。作為一種選擇,如Ontrack[1]磁碟管理員這樣的一些特殊軟體可以用於同樣目的。



[編輯] 最終的FAT16


1987年11月我們今天稱為FAT的格式最終到來,它在康柏 DOS 3.31中去掉了磁碟扇區的16位計數器。這個結果曾經一度被稱為DOS 3.31大檔案系統。儘管看起來磁碟上的變動很小,這個DOS的磁碟代碼都必須檢查並轉換到32位的扇區數,由於它全部是16位的彙編語言這樣一個現實,這項工作就變得非常複雜。


1988年這項改進通過MS-DOS 4.0得到廣泛應用。現在分區大小受限於每個叢集的8位有符號扇區計數,它最大能達到2的64次方,對於一個常用的有32KB個叢集每扇區512位元組的硬碟來說,將FAT16分區大小的「明顯」限制擴充到2GB。在磁光碟媒體上,它能使用1或者2KB的扇區,這樣大小限制也就成比例地增大。


後來,視窗NT通過將每個叢集的扇區數當作無符號數將最大的叢集大小增加到64KB。然而這個格式與當時其它的任何FAT實現都不相容並且產生了大量內部碎片。視窗98也支持這種格式的讀寫操作但是它的磁碟管理工具不支持這種格式。



[編輯] 長檔案名(VFAT, LFN)


Windows 95設計人員的一個用戶體驗目標就是除了傳統的8.3檔案名以外在新作業系統中使用長檔案名(LFN)。長檔案名通過在目錄條目排列時使用一個工作區來實現(參見下面)。按照Windows 95VxD設備驅動程序的命名規則這個新擴充的檔案系統通常稱為VFAT。


有意思的是,VFAT驅動在早於Windows 95的Windows for Groups 3.11中就已經出現,但它僅僅用於實現32位檔案訪問,一個繞過DOS的視窗自帶高性能保護模式檔案管理系統,它能夠直接使用BIOS或者更好的32位磁碟訪問,如視窗自帶的保護模式磁碟驅動程序。它是一個後門;微軟為Windows for Groups 3.11所作的廣告說32位檔案訪問基於「芝加哥項目的32位檔案系統」。


Windows NT中,FAT檔案系統對於長檔案名的支持從3.5版就已經開始了。



[編輯] FAT32


為了解決FAT16對於卷大小的限制同時讓DOS的真實模式在非必要情況下不減少可用常規記憶體狀況下處理這種格式,微軟公司決定實施新一代的FAT,它被稱為FAT32,帶有32位的叢集數,目前用了其中的28位。


理論上,這將支持總數達268,435,438(<228)的叢集,允許磁碟容量達到2位元組。然而,由於微軟公司scandisk工具的限制,FAT不能大於4,177,920(<222)個叢集,這將卷的容量限制在了124.55GB,除非不再使用「scandisk」。[2]


FAT32隨著視窗95 OSR2發佈,儘管需要重新格式化才能使用這種格式並且DriverSpace 3(視窗95 OSR2和視窗98所帶版本)從來都不支援這種格式。視窗98提供了一個工具用來在不丟失數據的情況下將現有的硬碟從FAT16轉到FAT32格式。在NT產品線上對於它的支援從視窗2000開始。


視窗2000和視窗XP能夠讀寫任何大小的FAT32檔案系統,但是這些平臺上的格式化程序只能創建最大32GB的FAT32檔案系統。Thompson and Thompson (2003)寫道「奇怪的是微軟公司說這種現象是故意設計的」[3] 微軟公司知識庫文章 184006[4]的確是這麼說的,但是沒有提出任何關於這個限制的合理解釋。Peter Norton的觀點是「微軟公司在有意地削弱FAT32檔案系統」[5]



[編輯] 第三方支持


其它IBM PC的可選作業系統—如LinuxFreeBSDBeOS—都支持FAT格式,並且大部分都在相應的視窗版本發佈以後很快就支持VFAT和FAT32格式。早期的Linux發佈版本還包括稱為UMSDOS的格式,它是保存在一個獨立的稱為--linux-.---的帶有Unix檔案屬性(如長檔案名和訪問許可)的FAT。UMSDOS在VFAT發佈以後就不再使用從Linux核心2.5.7開始就禁止了這項功能。Mac OS X作業系統在除啟動盤之外的其它卷上也支持FAT檔案系統。



[編輯] FAT和其它數據流


FAT檔案系統本身不是為支持ADS而設計的,但是一些高度依賴它們的作業系統創造出不同的方法在FAT驅動器上處理它們。這些方法或者在額外的檔案或路徑中存儲附加的信息(Mac OS),或者給那些磁碟資料結構中以前沒有使用的變數賦予新的含義(OS/2和視窗NT)。第二種設計,儘管想象起來會更有效率,但是它們不能被不認識這種格式的工具複製或者備份;使用不能識別這種格式的磁碟工具(如碎片整理或CHKFSK)控制這些磁碟可能會破壞這些信息。


Mac OS使用PC Exchange存儲不同的數據,檔案屬性和檔案名存在一個名為FINDER.DAT的隱藏檔案中,資源分支(ADS)存在名為RESSOURCE.FRK的子目錄中,這些數據都存在使用它們的每個目錄中。從PC Exchange 2.1開始,它們將Mac OS的長檔案名保存為標準的FAT長檔案名,並且將超過31個字元的FAT長檔案名轉換為唯一的31字元能夠被Macintosh應用程序識別的檔案名。


Mac OS X將元數據(資源分支、不同的ADS、檔案屬性)保存在與所有人相同並以「._」開始的名字的隱藏檔案中,並且Finder將一些檔案夾和檔案元數據存在名為「.DS_Store」的隱藏檔案中。


OS/2高度依賴於擴展屬性(EA)並且將它們存在位於FAT12或FAT16的根目錄下名為「EA DATA. SF」的隱藏檔案中。這個檔案使用以前檔案(或者目錄)的目錄清單中的兩個保留位元組索引。在FAT32格式中,這些位元組中存有檔案或者目錄開始叢集號的高16位,這樣就使它難於在FAT32上保存EA。擴展屬性可以通過Workplace Shell桌面、REXX腳本、許多系統圖形用戶介面命令行工具(如4DOS|4OS2]]來訪問。


Windows NT支持HPFS、NTFS和FAT中所有擴展屬性的處理(所用處理機制完全類似於OS/2),但是不能處理其它一些存於NTFS驅動器的ADS數據。試圖從複製帶有與NTFS驅動器屬性不同擴展屬性的ADS到FAT驅動器將報告一個警告信息提示ADS將會丟失。


Windows 2000以後產品的處理類似於視窗NT但複製到FAT32時它們沒有顯示任何警告信息直接丟棄擴展屬性(但報告其它象「Macintosh Finder Info」和「Macintosh Resource Fork」這些ADS引起的警告)。



[編輯] 前景


微軟公司最近獲得了VFAT和FAT32的專利(但沒有得到最初的FAT的專利),這引起人們對於微軟將會尋求從Linux OS發佈和初始化他們產品的媒體廠商收取專利費的擔憂(參見下面的FAT授權協議)。儘管最初的裁定不利於微軟公司,但是微軟仍然取得了勝利並且得到了專利授權。


由於微軟公司已經宣佈不再開發基於MS-DOS的消費用作業系統視窗Me的後續版本,所以不再有可能會有新版的FAT。對於大多數用途來說,為視窗NT系列開發的NTFS檔案系統從效率、性能和可靠性來說都優於FAT;它的主要缺點是小容量檔案所占的額太空間以及除了基於NT的視窗之外的很少有其他作業系統支援。由於確切的規範是微軟公司的商業秘密,這就使得使用一個DOS軟盤用於恢復目的很困難。微軟公司提供了一個恢復界面來解決這個問題,由於安全的原因它嚴重限制了預設情況下它能解決的問題。


FAT仍然是活動媒體的常用檔案系統(CD和DVD是例外),軟碟使用的是FAT12,其它多數活動媒體用的是FAT16(如用於數位相機快閃記憶卡和USB隨身碟)。許多活動媒體還沒有達到能夠享用FAT32。出於相容性和存儲空間利用率的考慮FAT仍然用在這些驅動器上,同時也是由於這些活動媒體上的檔案的許可更容易遇到麻煩而不是更重要這樣一個事實。


視窗2000和XP支援的FAT32格式化的限制是32GB,這非常有效地強迫使用現代硬碟的用戶或者使用NTFS或者在視窗之外格式化驅動器。一個解決的辦法是使用從Linux移植到視窗平臺的一個工具version of mkdosfs


這裡也有一個自由開源的工具。



[編輯] 設計



[編輯] 主磁碟結構









主啟動區檔案
分配表 #1
檔案
分配表 #2
根目錄其他所有資料...
剩下磁碟空間

一個FAT檔案系統包括四個不同的部分。



  1. 保留扇區,位於最開始的位置。第一個保留扇區是引導區分區啟動記錄)。它包括一個稱為基本輸入輸出參數塊的區域(包括一些基本的檔案系統信息尤其是它的類型和其它指向其它扇區的指針),通常包括作業系統的啟動調用代碼。保留扇區的總數記錄在引導扇區中的一個參數中。引導扇區中的重要信息可以被DOS和OS/2中稱為驅動器參數塊的作業系統結構訪問。
  2. FAT區域。它包含有兩份檔案配置表,這是出於系統冗余考慮,儘管它很少使用,即使是磁碟修復工具也很少使用它。它是分區信息的映射表,指示叢集是如何存儲的。
  3. 根目錄區域。它是在根目錄中存儲檔案和目錄信息的目錄表。在FAT32下它可以存在分區中的任何位置,但是在早期的版本中它永遠緊隨FAT區域之後。
  4. 數據區域。這是實際的檔案和目錄數據存儲的區域,它佔據了分區的絕大部分。通過簡單地在FAT中添加檔案連結的個數可以任意增加檔案大小和子目錄個數(只要有空叢集存在)。然而需要注意的是每個叢集只能被一個檔案佔有,這樣的話如果在32KB大小的叢集中有一個1KB大小的檔案,那麼31KB的空間就浪費掉了。


[編輯] 啟動扇區


格式如下





偏移(位元組)
長度(位元組)
說明



























































































0x003跳轉指令(跳過開頭一段區域)
0x038OEM名稱(空格補齊)。 MS-DOS檢查這個區域以確定使用啟動記錄中的哪一部分數據 [3]。常見值是IBM 3.3(在「IBM」和「3.3」之間有兩個空格)和MSDOS5.0.
0x0b2每個扇區的位元組數。基本輸入輸出系統參數塊從這裡開始。
0x0d1每叢集扇區數
0x0e2保留扇區數(包括啟動扇區)
0x101檔案配置表數目
0x112最大根目錄條目個數
0x132總扇區數(如果是0,就使用偏移0x20處的4位元組值)
0x151介質描述

























0xF8單面、每面80磁軌、每磁軌9扇區
0xF9雙面、每面80磁軌、每磁軌9扇區
0xFA單面、每面80磁軌、每磁軌8扇區
0xFB雙面、每面80磁軌、每磁軌8扇區
0xFC單面、每面40磁軌、每磁軌9扇區
0xFD雙面、每面40磁軌、每磁軌9扇區
0xFE單面、每面40磁軌、每磁軌8扇區
0xFF雙面、每面40磁軌、每磁軌8扇區

同樣的介質描述必須在重複複製到每份FAT的第一個位元組。有些作業系統(MSX-DOS 1.0版)全部忽略啟動扇區參數,而僅僅使用FAT的第一個位元組的介質描述確定檔案系統參數。


0x162每個檔案配置表的扇區(FAT16)
0x182每磁軌的扇區
0x1a2磁頭數
0x1c4隱藏扇區
0x204總扇區數(如果超過65535,參見偏移0x13)
0x244每個檔案配置表的扇區(FAT32)。擴展基本輸入輸出系統參數塊從這裡開始。
0x241物理驅動器個數(FAT16)
0x251當前磁頭(FAT16)
0x261簽名(FAT16)
0x274ID (FAT16)
0x2b11卷標
0x368FAT檔案系統類型(如FAT、FAT12、FAT16、FAT32)
0x3e448作業系統自引導代碼
0x1FE2扇區結束符(0x55 0xAA)

這裡描述的啟動扇區能在如OS/2 1.3的啟動盤上看到。早期的版本使用一個較短的基本輸入輸出系統參數塊,它們的啟動代碼在前面開始(如OS/2 1.1中是偏移0x2b)。



[編輯] 例外情況


Apricot PCMS-DOS所用FAT的實現有一個不同的啟動扇區組織以使用電腦與IBM不相容的基本輸入輸出系統。跳轉指令和OEM名被省略並且MS-DOS檔案系統參數位於0x50(在標準扇區中偏移為0x0B - 0x17)。後來的Apricot MS-DOS版本除了Apricot特有的引導區之外也具有了讀寫標準啟動分區的能力。


BBC Master 512 上的DOS Plus根本就不使用傳統的引導區。數據磁碟省略了引導區並且以一個單份的FAT開始(FAT的第一個位元組用來確定磁碟容量),啟動磁碟使用一個包含啟動調用程序的小型ADFS檔案系統,後面跟隨一個單份的FAT。



[編輯] 檔案配置表


一個分區分成同等大小的叢集,也就是連續空間的小塊。叢集的大小隨著FAT檔案系統的類型以及分區大小而不同,典型的叢集大小介於2KB到32KB之間。每個檔案根據它的大小可能佔有一個或者多個叢集;這樣,一個檔案就由這些這些(稱為單連結串列表)叢集鏈所表示。然而,這些鏈並不一定一個接著一個在磁碟上存儲,它們經常是在整個數據區域零散的儲存。


檔案配置表FAT)是映射到分區每個叢集的條目列表。每個條目記錄下面五種信息中的一種。



  • 鏈中下一個叢集的地址
  • 一個特殊的檔案結束符EOF)符號指示鏈的結束
  • 一個特殊的符號標示壞叢集
  • 一個特殊的符號標示保留叢集
  • 0來表示空閒叢集

每個版本的FAT檔案系統使用不同大小的FAT條目。這個大小已經由名字表示出來,例如FAT16檔案系統的每個條目使用16位表示,32位檔案系統使用32位表示。這個不同意味著FAT32系統的檔案配置表能比FAT16映射更多的叢集,它也允許FAT32有更大的分區大小。這也使得FAT32比FAT16更能有效地利用磁碟空間,因為每個驅動器能夠定址更小的叢集,這也就意味著更少的空間浪費。


FAT條目值:





FAT12
FAT16
FAT32
描述





























0x0000x00000x?0000000空閒叢集
0x0010x00010x?0000001保留叢集
0x002 - 0xFEF0x0002 - 0xFFEF0x?0000002 - 0x?FFFFFEF被占用的叢集;指向下一個叢集
0xFF0 - 0xFF60xFFF0 - 0xFFF60x?FFFFFF0 - 0x?FFFFFF6保留值
0xFF70xFFF70x?FFFFFF7壞叢集
0xFF8 - 0xFFF0xFFF8 - 0xFFFF0x?FFFFFF8 - 0x?FFFFFFF檔案最後一個叢集

注意FAT32只使用32位中的28位。高4位通常是0但它們是保留位,不要更改它們。在上面的表中它們用問號表示。



[編輯] 目錄表


目錄表是一個表示目錄的特殊類型檔案(現今通常稱為檔案夾)。它裡面保存的每個檔案或目錄使用表中的32位條目表示。每個條目記錄名字、擴展名、屬性(檔案、目錄、隱藏、只讀、系統和卷)、創建的日期和時間、檔案/目錄數據第一個叢集的地址,最後是檔案/目錄的大小。


除了FAT12和FAT16檔案系統中的根目錄表佔據特殊的根目錄區域位置之外,所有其它的目錄表都存在數據區域。


合法的DOS檔案名包括下面一些字元:



  • 大寫字母A-Z
  • 數字0-9
  • 空格(儘管結尾的空格被作為填充而不是檔案名的一部分)
  • ! # $ % & ( ) - @ ^ _ ` { } ~ '
  • 數值 128-255

DOS檔案名位於OEM字符集


位於根目錄區域和子目錄區域的目錄條目都是下面的格式:





位元組偏移
長度
描述



















































0x008DOS檔案名(附加空格)

第一個位元組可以是下面的特殊數值:















0x00這個條目有用並且後面沒有被占用條目
0x05最初字元確實是 0xE5
0x2E'點'條目;'.' 或者 '..'
0xE5這個條目曾經被刪除不再有用。取消刪除檔案工具作為取消刪除的一步必須使用一個正常的字元取代它。
0x083DOS 檔案擴展名(空格補齊)
0x0b1檔案屬性

第一個位元組可以是下面一些特殊值:






掩碼
描述































00x01只讀
10x02隱藏
20x04系統
30x08卷標
40x10子目錄
50x20檔案
60x40設備(內部使用,磁碟上看不到)
70x80沒有使用

屬性值 0x0F 用來表示長檔案名條目。


0x0c1保留,NT使用(參見後面)
0x0d1創建時間,最小時間解析度:10ms 單位,數值從 0 到199。
0x0e2創建時間。小時、分鐘和秒根據後面的圖示描述進行編碼:




描述








15-11小時(0-23)
10-5分鐘(0-59)
4-0秒/2(0-29)

注意只保存了2秒的解析度。更細解析度的檔案創建時間在偏移 0x0d 處。


0x102創建日期。年、月和日根據後面的圖示編碼:




描述








15-9年(0 = 1980, 127 = 2107)
8-5月(1 = 1月,12 = 12月)
4-0日(1 - 31)
0x122最近訪問時間;參見偏移 0x0e 處的描述。
0x142FAT12和FAT16中的EA-Index(OS/2和NT使用),FAT32中第一個叢集的兩個高位元組
0x162最後更改時間;參見偏移 0x0e 處的描述。
0x182最後更改日期; 參見偏移 0x10 處的描述。
0x1a2FAT12和FAT16中的第一個叢集。FAT32中第一個叢集的兩個低位元組。
0x1c4檔案大小

長檔案名(LFN)使用一個技巧存儲在FAT檔案系統上——在目錄表中添加假的條目。這些條目使用一個普通檔案無法使用的卷標屬性標識,普通檔案無法使用是由於它們被大多數舊的MS-DOS程序忽略。很顯然,一個只包含卷標的目錄被當作空卷,這樣就允許刪除;使用長檔案名創建的檔案在從普通的DOS刪除就會發生這樣的情形。


校驗和也允許檢驗長檔案名是否與8.3檔案名匹配;當一個檔案刪除之後使用DOS在同一個目錄位置重新創建之後就會出現不匹配現象。校驗和使用下面的演算法計算。(注意pFcbName是指向如正常目錄條目中所顯示的檔案名的指針,例如前八個字元是檔案名,最後三個是擴展名。點是隱含的。檔案名中沒有使用的空間將使用空格(ASCII 0x20)補齊。例如,「Readme.txt」將記錄為"README  TXT"


unsigned char lfn_checksum(const unsigned char *pFcbName)
{
int i;
unsigned char sum=0;

for (i=11; i; i--)
sum = ((sum & 1) ? 0x80 : 0) + (sum >> 1) + *pFcbName++;
return sum;
}

舊版的PC-DOS錯誤地將根目錄中的長檔案名當作卷標,這樣它們就會顯示錯誤的卷標。


每個假條目包含13UTF-16個字元(26位元組),通過使用包含檔案大小或者時間記錄的區域獲得除了舊的8+3之外的另外15個位元組(但是出於安全和磁碟檢查工具的考慮開始叢集的區域沒有使用保留值為0)。參見8.3中另外的解釋。


長檔案名條目使用下面的格式:





位元組偏移
長度
描述































0x001序列號
0x0110名稱字元(5個UTF-16字元)
0x0b1屬性(永遠是0x0F)
0x0c1保留(永遠是0x00)
0x0d1DOS檔案名校驗和
0x0e12名稱字元(6個UTF-16字元)
0x1a2第一個叢集(永遠是0x0000)
0x1c4名稱字元(兩個UTF-16字元)

如果一個檔案名只包含小寫字母、或者是一個小寫字母的加上大寫擴展名的混合或者與此相反,沒有特殊的字元並且滿足8.3的限制,在視窗NT上就不創建VFAT的條目。相反,在目錄條目的偏移0x0c處的沒有說明的位用來指示檔案名全部或者部分是小寫字母。特別明確的是,位4意味著小寫字母的擴展名,位3意味著是小寫字母,這樣就允許如「example.TXT」和「HELLO.txt」這樣的組合,但是不允許「Mixed.txt」這樣的組合。很少有作業系統支持這種功能。非NT視窗版本當這個擴展使用時將把檔案名當作大寫字母。預設情況下,Linux的最近版本將認識這個擴展但是在寫時並不使用它。



[編輯] 第三方擴展


在微軟公司添加長檔案名和創建/訪問時間戳之前,其它的作業系統使用目錄表位元組0x0C-0x15存儲其它的元數據。它們包括:





位元組偏移
長度
系統
描述


































0x0C2RISC OS檔案類型, 0x000 - 0xFFF
0x0C1DOS Plus用戶定義檔案屬性 F1-F4




掩碼
描述















70x80F1
60x40F2
50x20F3
40x10F4
0x0D1DR-DOS被刪除檔案名最初第一個字元
0x0E2DR-DOS 和 FlexOS加密檔案密碼
0x104DR-DOS 7被刪除檔案最初的檔案時間和日期;被刪除檔案有設置到刪除時間的正常時間和日期
0x122DR-DOS 6 和 FlexOS檔案所有者身份
0x142DR-DOS 和 FlexOS檔案許可位(只有FlexOS使用執行許可):




掩碼
描述















































00x0001所有者刪除需要密碼
10x0002所有者執行需要密碼
20x0004所有者寫需要密碼
30x0008所有者讀需要密碼
40x0010組刪除需要密碼
50x0020組執行需要密碼
60x0040組寫需要密碼
70x0080組讀需要密碼
80x0100全部用戶刪除需要密碼
90x0200全部用戶執行需要密碼
100x0400全部用戶寫需要密碼
110x0800全部用戶讀需要密碼
arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()