SD卡中FAT32文件格式快速入門(圖文詳細介紹)

轉自http://blog.csdn.net/mjx91282041/article/details/8904705

說明:

MBR :Master Boot Record ( 主引導記錄

DBR :DOS Boot Record ( 引導扇區

FAT :File Allocation Table ( 文件分配表

硬件:本文SD卡爲Kingston 4GBFAT32格式,簇大小4KB,每扇區512字節。

第一章 硬盤結構與SD卡結構

1.1 硬盤介紹

1.1硬盤結構

如果你熟悉硬盤結構跳過本節。下圖是硬盤的結構,如果你只是爲了學習SDFAT32文件系統的話,這裏你只需要注意硬盤排序結構:主引導記錄(MBR)—引導扇區—數據—引導扇區—數據。

 

圖1

1.2 MBR分析

MBRMain Boot Record 主引導記錄區)放置在硬盤物理地址0的地方。總共512字節的主引導扇區中,MBR只佔用了其中的446個字節,另外64個字節交給了 DPTDisk Partition Table硬盤分區表),最後兩個字節“55AA”是分區的結束標誌。DPT4個分區表組成,每個16字節。下圖中以以硬盤的MBR圖,粉紅色爲硬盤分區表。


圖2

對於我們來說,更關注硬盤分區表表中紅色區域:下圖爲硬盤分區表詳細說明 。如果要對SD卡、U盤等分多個區,DPT的內容就表示各個區的偏移地址和大小。

起始地址

字節數

描述

0x1BE

1

可引導標誌,0x00不可引導,0x80可引導

0x1BF~0x1C1

3

分區起始CHS地址(CHS=磁頭、柱面、扇區),起始地址

0x1C2

1

分區類型

0x1C3~0x1C5

3

分區結束CHS地址

0x1C6

4

從磁盤開始到該分區開始的偏移量(分區起始LBA地址Little-endian順序)

0x1CA

4

總扇區數(Little-endian順序)


圖3

SD結構

SD卡沒有分區,默認就是一個分區。首先用WinHex文件打開SD所在的盤符,顯示如下圖:


① 非分區空間(紅線所示): 起始扇區0,我認爲這個分區就是硬盤上的MBR所在區域,

打開後如下圖所示,也可以稱爲SD卡的MBR區域。

圖5

根據表1知道:

紅線區域(00002000爲下個分區的扇區地址,即第8192扇區,見圖3分區1的起始扇區。

藍線區域(00760C00SD卡總的扇區個數,我們可以計算一下:

     0x760C00 *512(每扇區字節)3960995840 (字節),與實際大小基本一樣。

② 分區1(藍線所示):起始扇區8192.

③ 剩餘扇區    : 才疏學淺,我不知道幹嘛的,呵呵

1.3 SD卡存儲結構

由此可知SD卡文件系統並不是處在整個SD卡最開始的地方,它處在MBR所處的保留區之後,於是我們可以對使用FAT32文件系統的SD卡整體佈局給出如下圖示

圖6

第二章 FAT32文件系統介紹

2.1 FAT文件系統簡介

FATFile Allocation Table,文件分配表)文件系統是windows操作系統所使用的一種文件系統,它的發展過程經歷了FAT12FAT16FAT32三個階段。FAT文件系統用“簇”作爲數據單元。一個“簇”由一組連續的扇區組成,簇所含的扇區數必須是2的整數次冪。簇的最大值爲64個扇區,即32KB。所有簇從2開始進行編號,每個簇都有一個自己的地址編號。用戶文件和目錄都存儲在簇中。 本文每簇4KB大小。

FAT文件系統的數據結構中有兩個重要的結構:文件分配表和目錄項:

文件分配表:文件和文件夾內容儲存在簇中,如果一個文件或文件夾需要多餘一個簇的空間,則用FAT表來描述,如何找到另外的簇。FAT結構用於指出文件的下一個簇,同時也說明了簇的分配狀態。FAT12FAT16FAT32這三種文件系統之間的主要區別在與FAT項的大小不同。 

目錄項:FAT文件系統的每一個文件和文件夾都被分配到一個目錄項,目錄項中記錄着文件名、大小、文件內容起始地址以及其他一些元數據。 

FAT文件系統中,文件系統的數據記錄在“引導扇區中(DBR)”中。引導扇區位於整個文件系統的0號扇區,是文件系統隱藏區域(也稱爲保留區)的一部分,我們稱其爲DBRDOS Boot Recorder——DOS引導記錄)扇區,DBR中記錄着文件系統的起始位置、大小、FAT表個數及大小等相關信息。在FAT文件系統中,同時使用“扇區地址”和“簇地址”兩種地址管理方式。這是因爲只有存儲用戶

數據的數據區使用簇進行管理(FAT12FAT16的根目錄除外),所有簇都位於數據區。其他文件系統管理數據區域是不以簇進行管理的,這部分區域使用扇區地址進行管理。文件系統的起始扇區爲0號扇區。 

2.2 FAT32文件系統結構

FAT文件系統整體分佈如上圖 存儲器文件結構圖 所示,有:

【1深綠色】保留區含有一個重要的數據結構——系統引導扇區(DBR)。FAT12FAT16的保留區通常只有一個扇區,而FAT32的保留扇區要多一些,除0號扇區外,還有其他一些扇區,其中包括了DBR的備份扇區。 

2黃色】  FAT區由來年各個大小相等的FAT表組成——FAT1FAT2FAT2緊跟在FAT1之後。 

3灰色】  FAT12FAT16的根目錄雖然也屬於數據區,但是他們並不由簇進行管理。也就是說FAT12FAT16的根目錄是沒有簇號的,他們的2號簇從根目錄之後開始。FAT32的根目錄通常位於2號簇。

2.2.1 保留區(深綠色區域)

FAT32文件系統的開始部分有一個由若干個扇區組成的保留區,保留區的大小會記錄在DBR扇區中,比較常見的爲323438個扇區。如上圖:由DBR中)0x0e0x0f兩個地址的數值決定,記得是小端模式,N的值。 

2.2.1.1 引導扇區(DBR)

【大小】:512字節;

對讀寫FAT文件系統來說常用的就圖中紅色劃線部分,48個字節。其他的均爲一些標註信息。想了解具體的定義請看附錄表。

圖7

10x00~0x023字節,跳轉指令。 

20x03~0x0A8字節,文件系統標誌和版本號,這裏爲MSDOC5.0。 

30x0B~0x0C2字節,每扇區字節數,5120X02 00)。 

40x0D~0x0D1字節,每簇扇區數,80x08)。 

50x0E~0x0F2字節,保留扇區數,380x00 26,符合FAT1起始地址爲38扇區。 

60x10~0x101字節,FAT表個數,2。 

70x11~0x122字節,FAT32必須等於0FAT12/FAT16根目錄中目錄的個數; 

80x13~0x142字節,FAT32必須等於0FAT12/FAT16扇區總數。 

90x15~0x151字節,哪種存儲介質,0xF8標準值,可移動存儲介質,常用的 0xF0。 

100x16~0x17:2字節,FAT32必須爲0FAT12/FAT16一個FAT 表所佔的扇區數

110x18~0x192字節,每磁道扇區數,只對於有“特殊形狀”(由磁頭和柱面每 分割爲若干磁道)的存儲介質有效,630x00 3F)。 

120x1A~0x1B2字節,磁頭數,只對特殊的介質纔有效,2550x00 FF)。 

130x1C~0x1F4字節,EBR分區之前所隱藏的扇區數,81920x00 00 20 00,與MBR中地址0x1C6開始的4個字節數值相等

140x20~0x234字節,文件系統總扇區數,7736320(0x 00 76 0C 00),7736320 *  512 = 3960995840   3.67GB

150x24~0x274字節,每個FAT佔用扇區數,7541(0x 00 00 1D 75)。 

160x28~0x292字節,標記,此域FAT32 特有。 

170x2A~0x2B2字節FAT32版本號0.0,FAT32特有。 

180x2C~0x2F4字節,根目錄所在第一個簇的簇號,2。(雖然在FAT32文件系統 下,根目錄可以存放在數據區的任何位置,但是通常情況下還是起始於2號簇) 

190x30~0x312字節,FSINFO(文件系統信息扇區)扇區號1,該扇區爲操作 系統提供關於空簇總數及下一可用簇的信息。 

200x32~0x332字節,備份引導扇區的位置。備份引導扇區總是位於文件系統 的6號扇區。 

210x34~0x3F12字節,用於以後FAT 擴展使用。 

220x40~0x401字節,與FAT12/16 的定義相同,只不過兩者位於啓動扇區不

同的位置而已。

  【230x41~0x411字節,與FAT12/16 的定義相同,只不過兩者位於啓動扇區不

同的位置而已 。 

240x42~0x421字節,擴展引導標誌,0x29。與FAT12/16 的定義相同,只不過 兩者位於啓動扇區不同的位置而已

250x43~0x464字節,卷序列號。通常爲一個隨機值。 

260x47~0x5111字節,卷標(ASCII碼),如果建立文件系統的時候指定了卷 標,會保存在此。 

270x52~0x598字節,文件系統格式的ASCII碼,FAT32。 

★【280x5A~0x1FD90~509共410字節,未使用。該部分沒有明確的用途。 

290x1FE~0x1FF:簽名標誌“55 AA”。 

說明:引導代碼

FAT文件系統將引導代碼與文件形同數據結構融合在一起,FAT32文件系統引導扇區的512字節中,90~509字節爲引導代碼,而FAT12/16則是62~509字節爲引導代碼。同時,FAT32還可以利用引導扇區後的扇區空間存放附加的引導代碼。一個FAT卷即使不是可引導文件文件系統,也會存在引導代碼。

2.2.1.2 FSInfo信息分區

FAT32在保留區中增加了一個FSINFO扇區,用以記錄文件系統中空閒簇的數量以及下一可用簇的簇號等信息,以供操作系統作爲參考。FSINFO信息扇區一般位於文件系統的1號扇區,結構非常簡單。FSINFO信息扇區結構

圖8

10x00~0x03: 4個字節,擴展引導標誌“0x52526141”。 

20x04~0x1E3480個字節,未使用,全部置0。 

30x1E4~0x1E7: 4個字節,FSINFO簽名“0x72724161”。 

40x1E8~0x1EB: 4個字節,文件系統的空簇數,964466(0x00 0E B7 72)。 

50x1EC~0x1EF: 4個字節,下一可用簇號(0x 00 00 00 15)。 

60x1F0~0x1FD: 14個字節,未使用。 

70x1FE~0x1FF: 2個字節,“55 AA”標誌。 

溫馨提示:通常情況下,文件系統的2號扇區結尾也會被設置“55 AA”標誌。6號扇區也會有一個引導扇區的備份,相應的,7號扇區應該是一個備份FSINFO信息扇區8號扇區可以看做是2號扇區的備份

2.2.2 文件分區FAT表(黃色區域)

緊跟在保留分區後面的是FAT區,其由兩個完全相同的FATFile Allocation Table, 文件分配表)表單組成,FAT文件系統的名字也是因此而來。FAT 表(File Alloacation Table)是一組與數據簇號對應的列表。FAT2緊跟在FAT1之後,它的位置可以通過FAT1的位置加上FAT的大小扇區數計算出來。

2.2.2.1 文件系統概述

文件系統分配磁盤空間按簇來分配。因此,文件佔有磁盤空間時,基本單位不是字節而是簇,即使某個文件只有一個字節,操作系統也會給它分配一個最小單元:即一個簇。對於大文件,需要分配多個簇。同一個文件的數據並不一定完整地存放在磁盤中一個連續地區域內,而往往會分若干段,像鏈子一樣存放。這種存儲方式稱爲文件的鏈式存儲。爲了實現文件的鏈式存儲,文件系統必須準確地記錄哪些簇已經被文件佔用,還必須爲每個已經佔用的簇指明存儲後繼的下一個簇的簇號,對於文件的最後一簇,則要指明本簇無後繼簇。這些都是由FAT表來保存的,FAT 表對應表項中記錄着它所代表的簇的有關信息:諸如是空,是不是壞簇,是否是已經是某個文件的尾簇等。

v 對於文件系統來說,FAT表有兩個重要作用:描述簇的分配狀態以及標明文件或目錄的下一簇的簇號。 

v 通常情況下,一個FAT把文件系統會有兩個FAT表,但有時也允許只有一個FAT表,FAT表的具體個數記錄在引導扇區的偏移0x10字節處。 

v 由於FAT區緊跟在文件系統保留區後,所以FAT1在文件系統中的位置可以通過引導記錄中偏移0x0E~0x0F字節處的“保留扇區數”得到,如存儲器結構體圖中M值。 

2.2.2.2 FAT表分析說明

FAT32中每個簇的簇地址是有32bit4個字節),FAT表中的所有字節位置以4字節爲單位進行劃分,並對所有劃分後的位置由0進行地址編號。0號地址與1號地址被系統保留並存儲特殊標誌內容。從2號地址開始,每個地址對應於數據區的簇號,FAT表中的地址編號與數據區中的簇號相同。我們稱FAT表中的這些地址爲FAT表項,FAT表項中記錄的值稱爲FAT表項值。 

當文件系統被創建,也就是進行格式化操作時,分配給FAT區域的空間將會被清空,在FAT1FAT20號表項與1號表項寫入特定值。由於創建文件系統的同時也會創建根目錄,也就是爲根目錄分配了一個簇空間,通常爲2號簇,與之對應的2FAT表項記錄爲2號簇,被寫入一個結束標記。

幾點說明:

Ø 由於簇號起始於2號,所以FAT表項的0號表項與1號表項不與任何簇對應。FAT320號表項值總是“F8FFFF0F”。

Ø 1號表項可能被用於記錄髒標誌,以說明文件系統沒有被正常卸載或者磁盤表面存在錯誤。不過這個值並不重要。正常情況下1號表項的值爲“FFFFFFFF”或“FFFFFF0F”。

Ø 如果某個簇未被分配使用,它對應的FAT表項內容爲0;

Ø 當某個簇已被分配使用,則它對應的FAT表項內的FAT表項值也就是該文件的下一個存儲位置的簇號。如果該文件結束於該簇,則在它的FAT表項中記錄的是一個文件結束標記,對於FAT32而言,代表文件結束的FAT表項值爲0x0FFFFFFF

Ø 如果某個簇存在壞扇區,則整個簇會用0xFFFFFF7標記爲壞簇,這個壞簇標記就記錄在它所對應的FAT表項中。

Ø 在文件系統中新建文件時,如果新建的文件只佔用一個簇,爲其分配的簇對應的FAT表項將會寫入結束標記。如果新建的文件不只佔用一個簇,則在其所佔用的每個簇對應的FAT表項中寫入爲其分配的下一簇的簇號,在最後一個簇對應的FAT表象中寫入結束標記。

Ø 新建目錄時,只爲其分配一個簇的空間,對應的FAT表項中寫入結束標記。當目錄增大超出一個簇的大小時,將會在空閒空間中繼續爲其分配一個簇,並在FAT表中爲其建立FAT錶鏈以描述它所佔用的簇情況。

2.2.2.3 FAT表示例

0號表項】:0x0FFFFFF8;FAT表起始固定標識

1號表項】:0xFFFFFFFF;不是用,默認值

2號表項】:0x0FFFFFFF;根目錄所在簇,

紫色的爲3號表項,綠色的爲4號表項,以此類推。注意:01號表項均不與實際的物理地址對應,2號表項開始才與物理地址對應。2號表項物理地址爲FAT2表後緊跟着的那個簇!3號在2號表項緊跟着的一個簇。

計算:FAT所佔扇區數 75410x1D75);FAT2起始扇區爲38+7541=7579;根目錄起始扇區在7579 + 7541 = 15120。記得本文8個扇區爲一個簇,即4K0x1000),簇是系統分配內存的最小單元。

如圖表中的起始地址對比,發現根目錄起始地址剛好在15120,所以FAT表中01號表項沒有對應物理地址!

我將SD格式化,新建了一個test.txt的文本文件,大小爲8.2kB。如下圖:

圖10 

我們來分析上圖:

在圖中可以看出,test.txt文件起始簇爲15128,這個地址是我們根目錄(2號簇)後的一個簇,所以test.txt文件起始簇是3號簇,也就是3號表項(FAT表中表項值與簇號對應)。

【1】:2號表項爲根目錄,即2號簇。

2】:3號表項爲-0x00 00 00 04test文件的下一簇號在4號表項,查看4號表項。

3】:4號表項爲-0x00 00 00 05test文件下一簇號在5號表項,查看5號表項。

4】:5號表項爲-0x0F FF FF FF,結束符號。說明文件在5號簇時就存儲完畢。

2.2.3 數據區(灰色區域)

數據區時真正用於存放用戶數據的區域。數據區緊跟在FAT2之後,被劃分成一個個的簇。所有的簇從2開始進行編號,也就是說,2號簇的起始位置就是數據區的起始位置。 

2.2.3.1 根目錄

FAT表示例中,根目錄截圖:


圖11

雖然原則上FAT32允許根目錄位於數據區的任何位置,但通常情況下它都位於數據區起始扇區,2號簇,可以在DBR偏移地址0x2C~0x2F查看。在FAT文件系統中,先要尋找數據區的第一簇(即2號簇)的位置,它不是位於文件系統開始處,而是位於數據區。從前面的學習知道,在數據區前面是保留區域和FAT區域,在前面還有MBR區域,區域都不使用FAT表進行管理。因此,數據區以前的區域只能使用扇區地址,而無法使用簇地址。

其實在2.2.2.3節,FAT表示例中我們就已經計算過其實地址(15128),注意這個地址不是物理地址哦,只是在FAT文件區域中一個相對地址!因爲在之前還有MBR保留區域!

【保留區域大小(綠色部分)】:DBR偏移地址0x0E~0x0F380x26),

FAT表個數】:DBR偏移地址0x10開始2字節2個,

每個FAT區數】:DBR偏移地址0x24~0x2775410x 00 00 1D 75

說明:以上值均參見2.2.1.1

【計算公式】:

     數據區起始扇區號 = 保留扇區數 + 每個FAT表大小扇區數 × FAT表個數

示例】: 數據區起始扇區號 = 38 + 7541*2 = 15120 

爲了避免根目錄被更改,也可以用下面的計算公式計算出根目錄扇區:

    根目錄起始扇區=保留扇區數+FAT×2+(根目錄起始簇-2)x每簇的扇區數

說明:1、如果要得到物理地址,需要加上MBR保留區域大小。

2.2.3.2 根目錄的短文件目錄項定義

目錄所在的扇區,都是以32 Bytes劃分爲一個單位,每個單位稱爲一個目錄項(Directory 

Entry ),即每個目錄項的長度都是32 Bytes 根目錄由若干個目錄項組成,一個目錄項佔用32個字節,可以是長文件名目錄項、文件目錄項、子目錄項等。32字節的具體定義如下圖:

圖12

示例:

圖13

特別關注的參數說明:

【1】:文件或者文件夾存儲的起始簇號,上圖中紫色區域,偏移地址:0x14-0x15(高16爲)和0x1A-0x1B(低16位)0x 00 00 00 03 ,表示這個文件存儲在3號簇的位置,在FAT表中爲3號表項。

【2】:文件大小:偏移地址0x1C-0x1F0x 00 00 20 EE(8430字節);

【3】文件屬性:偏移地址0x0B-0x0B,0x20 ,歸檔。

其他說明:

【0】子目錄存儲在數據區

【1】文件名的第一個字節,爲0xE5,表示該項已被刪除。

【2】名字爲0x2E(.),表示當前目錄。

圖14

【3】名字爲0x2E 0x2E(. .),表示上一級目錄。

2.2.3.3 長文件目錄定義

圖15


發佈了0 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章