檔案系統(五):exFAT 檔案系統原理詳解

liwen01發表於2024-05-28

前言

exFAT是微軟2006年推出的一種檔案系統,距今已快二十年,相比於FAT16和FAT32,exFAT還是算年輕。exFAT一直是微軟的一個專用檔案系統,直到2019年微軟釋出它的規範,目前微軟擁有exFAT多個元素的專利,如果產品上使用exFAT,需要微軟授權,否則有可能侵權。

exFAT被SD協會採用作為大於32GB SDXC卡的預設檔案系統,在win11系統上,SDXC卡預設格式化選項已經沒有FAT32選項,exFAT檔案系統的使用範圍正逐漸擴大。

為啥微軟要用exFAT來代替FAT32呢?

因為exFAT資料結構開銷比NTFS低,但它又可以突破FAT32 單個檔案大小和分割槽大小的限制。

檔案系統(一):儲存介質、原理與架構

檔案系統(二):分割槽、格式化資料結構

檔案系統(三):嵌入式、計算機系統啟動流程與步驟

檔案系統(四):FAT32檔案系統實現原理

(一)磁碟佈局

檔案系統(五):exFAT 檔案系統原理詳解

在Windows系統上將一張TF卡格式化成exFAT檔案系統,發現它是將整個TF格式化成了exFAT檔案系統,沒有前面介紹的MBR和GPT分割槽表資訊。

整體分為5個部分:

  • DBR及其保留扇區
  • FAT 檔案分配表
  • 簇號點陣圖
  • 大寫字元
  • 目錄和檔案(根目錄在該區最開始位置)

(1) DBR

檔案系統(五):exFAT 檔案系統原理詳解

DBR 中主要有:跳轉指令,OEM代號、BPB引數、載入程式、結束標誌組成。這裡只介紹BPB(BIOS Parameter Block,BIOS引數塊),其它部分在前面其它文章中已經有介紹過了。

根據上面第0扇區的DBR資訊,可以解析exFAT的BPB引數如下:

檔案系統(五):exFAT 檔案系統原理詳解

從上面解析的資料我們可以知道:

  • FAT表在第2048扇區
  • 簇位號圖在第4096扇區=首簇起始扇區號=第2號簇
  • 大寫字元在第4160扇區=簇位號圖的下一個簇=4096 + 64 = =第3號簇
  • 根目錄在第4224扇區=首簇起始扇區號 + 根目錄首簇號 - 2 = 4096 +(4-2)*64 = 第4號簇

(2) FAT表

與FAT32不同,exFAT只有一個FAT表,沒有備份

檔案系統(五):exFAT 檔案系統原理詳解

表項裡的內容與FAT32的類似:4個位元組表示一個簇,每個簇都有自己的編號,F8 表示介質型別為硬碟,寫入4個FF,表示結束標誌。具體可檢視上一篇檔案系統(四):FAT32檔案系統實現原理

與FAT32不同的是:exFAT檔案系統中FAT表中記錄的是不連續儲存檔案的簇鏈,如果是連續的簇鏈,在FAT表中不會體現。

上面exFAT檔案系統FAT表中為0的簇,並不能表示該簇是未使用,也有可能它是連續簇

exFAT檔案系統的簇使用情況,是透過簇位號圖來實現的

(3) 簇號點陣圖

簇點陣圖中的每一個位,實際對映到資料區中的每一個簇。

如果對應簇已經被使用,簇點陣圖上對應該簇的位值就是1,否則就為0

檔案系統(五):exFAT 檔案系統原理詳解

上面我們看,簇點陣圖上的值為:FF FF FF FF FF FF FF FF FF FF FF 03

FF = 11111111b = 8個簇,11個FF表示88個簇,03的二進位制位11b,表示2個簇

FF FF FF FF FF FF FF FF FF FF FF 03 表示從第2號簇到92號簇的90個簇號已經被使用了。

為什麼這裡是從第2號簇開始呢?

因為0號和1號FAT項有特殊用途,無法與資料區中的簇形成對映,只能從2號FAT項開始與資料區中的第一個簇對映,所以資料區中的第一個簇也就編號為2號簇。

(4)大寫字元元檔案

檔案系統(五):exFAT 檔案系統原理詳解

exFAT是一個大小寫不敏感的檔案系統

大寫字元元檔案(UPCASE file)裡面儲存的是一個全域性字元對映表,包含了所有可能字元的大小寫對映。

它主要作用是:大小寫轉換、檔名比較、國際化支援(跨語言)

(5) 目錄項

檔案系統(五):exFAT 檔案系統原理詳解

exFAT 包含4種目錄項

  • 卷標目錄項(32位元組)
  • 簇點陣圖檔案的目錄項(32位元組)
  • 大寫字元檔案的目錄項(32位元組)
  • 使用者檔案的目錄項(至少3個目錄項)

前面三個是系統目錄項我們就不分析了,簡單介紹一下使用者檔案的目錄項 以上圖中test3目錄為例進行分析:

檔案系統(五):exFAT 檔案系統原理詳解

使用者目錄項的三個目錄項被稱為三個屬性,

  • 第一個目錄項稱為“屬性1”,目錄項首位元組的特徵值為“85H”;
  • 第二個目錄項稱為“屬性2”,目錄項首位元組的特徵值為“C0H”;
  • 第三個目錄項稱為“屬性3”,目錄項首位元組的特徵值為“C1H”。

第一目錄項

檔案系統(五):exFAT 檔案系統原理詳解

與FAT32 檔案系統相比多了附屬目錄項數,校驗和,這裡重點介紹一下校驗和的作用。

校驗和

校驗和是用來確保目錄項資料的完整性和可靠性,防止和檢測目錄項資料損壞。

在目錄項讀取的時候,可以透過校驗和確定目錄項資料是否損壞或是被篡改。

第二目錄項

檔案系統(五):exFAT 檔案系統原理詳解

這裡需要注意檔案碎片標誌和檔名Hash值兩個引數,這是FAT32檔案系統不具有的功能。

檔案碎片標誌

檔案碎片是用來標記檔案是否連續儲存。

如果值為0x03,表示檔案是連續的,沒有碎片,在FAT表中不會有記錄。在檔案讀取的時候,可以直接根據檔案所在的起始簇號,直接進行資料連續讀取,而不需要去查詢FAT表的中FAT項。

如果值為0x01,表示檔案是不連續的,有碎片,在FAT表中會記錄該檔案簇鏈,在檔案讀取的時候,除了檔案的起始簇號,還需要根據FAT表中的資訊去尋找下一個簇號。

因為有了檔案碎片標記,exFAT檔案讀寫效率要比FAT32高。

檔名Hash值

檔名Hash值是用來加速檔案查詢過程,透過快速匹配Hash值減少詳細比較的次數。

在目錄查詢過程中,透過先比較Hash值,可以減少實際需要比較完整檔名的次數。

如果Hash值不匹配,則檔名一定不匹配;如果Hash值匹配,再進行檔名的詳細比較。

第三目錄項

檔案系統(五):exFAT 檔案系統原理詳解

在exFAT 中沒有長檔名和短檔名的區分,統一記錄到檔名位置,如果檔名超出了第三目錄項空間,就繼續寫入到下一個目錄項中,

比如上面第一個檔案 System Volume Information 的目錄項

(二)實現原理

這裡從檔案建立、寫入、讀取、刪除、查詢的角度來介紹一下exFAT檔案系統的實現原理

(1)檔案建立

  • 根據簇號點陣圖查詢空閒簇號
  • 將簇號點陣圖中該簇號標記為已使用
  • 目錄項中新增一個新的目錄條目,記錄新檔案的後設資料,包括檔名、檔案大小、建立時間、起始簇號、HASH值、校驗和等資訊

(2)檔案寫入

  • 透過目錄項找到檔案的起始簇號
  • 如果資料超過了一個簇大小,透過簇號點陣圖查詢下一個可寫入的簇
  • 如果下一個簇與當前簇不連續,則將簇號資訊同步到FAT表中,同時目錄項檔案碎片標誌設定為0x01
  • 如果一下簇與當前簇是連續的,FAT表資訊就不需要修改
  • 更新目錄項的其它資訊,比如檔案大小和最後修改時間

(3)檔案讀取

  • 透過目錄項找到檔案的起始簇號,透過件碎片標誌判斷檔案是否連續
  • 如果檔案連讀,可根據起始簇號直接按序讀取
  • 如果檔案不連續,還需要根據FAT表查詢下一個資料所在的簇號

(4)檔案刪除

  • 檔案刪除是檔案建立的一個逆過程

(5)檔案查詢

  • 透過BPB(BIOS引數塊)定位到根目錄或是起始目錄位置
  • 讀取目錄簇資料
  • 計算目標檔名的Hash值
  • 遍歷目錄,逐個比較目錄項的Hash值,如果Hash值相同,則進行檔名比較
  • 檔名比較,使用UPCASE表(大寫字元元檔案)進行大小寫無關的比較
  • 檢查匹配結果,如果匹配,則讀取該目錄項的詳細資訊並進行校驗
  • 如果未找到匹配項且當前目錄有子目錄,遞迴進入子目錄繼續查詢

(三)優缺點

優點

(1)支援大檔案和大容量卷

FAT32 支援最大檔案4GB、最大卷2TB、每子目錄最大支援65534個檔案

exFAT 支援最大檔案16EB、最大卷128PB、每子目錄最大支援2796202個檔案

(2)輕量級和高相容性

exFAT與FAT32類似,檔案系統的後設資料比較小,適用於記憶體空間有限的嵌入式裝置

同時,exFAT也可以相容Windows、Linux、macOS 這幾個常用作業系統

(3)支援後設資料校驗

exFAT 目錄項上有校驗和引數,當目錄項內容損壞或是被篡改的時候,可以透過校驗和進行檢測

(4)效率比FAT32高

exFAT 採用簇號點陣圖+簇號連結串列的方式來管理簇號,比FAT32只能透過簇號連結串列的方式效率高

exFAT 檔案查詢的時候,首先是根據Hash值查詢,在匹配檔名,比FAT32只能比較檔名效率高

缺點

(1)專利和授許可權制

微軟擁有exFAT的多項專利,使用exFAT在某些情況下可能會涉及專利和授權問題,尤其是對於商業產品。

(2)缺乏日誌功能

與NTFS相比,exFAT缺乏日誌功能,這意味著在突然斷電或系統崩潰時,資料損壞的風險更高。

(3)碎片問題:

雖然exFAT在一定程度上減輕了檔案碎片的問題,但它依然沒有NTFS那麼高效地管理碎片。

結尾

以上就是關於exFAT檔案系統的介紹,如有錯誤,歡迎在下面評論區批評指正,不勝感激。下一篇將介紹ext4 或是ntfs 檔案系統。

---------------------------End---------------------------
如需獲取更多內容
請關注 liwen01 公眾號

相關文章