FAT File SystemFAT File System
implememtation from scratchimplememtation from scratch
Represented by Sneeker Yeh
2010 August.
OutlineOutline
• Introduction of file system
•
MBR(Master Boot Record)
•
VBR(Volume Boot Record)
•
FAT16
•
Directory entry 與 cluster entry 的概念
• 案寫入檔
• Conclusion
Introduction of File systemIntroduction of File system
•
介於介於 storagestorage 驅動程式與應用程式驅動程式與應用程式 (( 或作業系統或作業系統 )) 的介的介
面面 ,, 其任務為組織檔案的存放方式其任務為組織檔案的存放方式
•
若儲存體為若儲存體為 flashflash 可能還會有可能還會有 wear leveling, garbagewear leveling, garbage
collectioncollection 等等的等等的 software layersoftware layer
•
此技術並非在此次討論範圍內此技術並非在此次討論範圍內 ,, 而待下回分解而待下回分解 ..
MBR (Master BootMBR (Master Boot
Record)Record)•
在分割過後的磁碟上在分割過後的磁碟上 ,, 第一個磁區第一個磁區 ,sector 0,,sector 0, 稱為稱為
MBR(Master Boot Record).MBR(Master Boot Record).
•
code areacode area :可放置開機管理程式:可放置開機管理程式
•
Partition(volume) tablePartition(volume) table :可放置四個分割區的描述資訊:可放置四個分割區的描述資訊
•
包含各個分區的起始磁區包含各個分區的起始磁區
•
各個分區的結束磁區各個分區的結束磁區
•
ActiveActive 資訊資訊
•
true or false,true or false, 讓開機管理程式選擇要啟動的分區讓開機管理程式選擇要啟動的分區 ,, 將將
該分區的第一個磁區該分區的第一個磁區 (VBR)(VBR) 載入載入 memorymemory 並跳躍過並跳躍過
去去 ,, 各分區的第一個磁區通常放置各分區的第一個磁區通常放置 OS loader.OS loader.
MBR (Master BootMBR (Master Boot
Record)Record)
MBR (Master BootMBR (Master Boot
Record)Record)•
MBRMBR 讓我們可以自訂與紀錄四個分區讓我們可以自訂與紀錄四個分區 ,, 以及各分區的以及各分區的
大小與起始位置大小與起始位置
MM
BRBR
MM
BRBR
BootBoot
sectorsector
OfOf
partition 1partition 1
BootBoot
sectorsector
OfOf
partition 1partition 1
BootBoot
sectorsector
OfOf
partition 2partition 2
BootBoot
sectorsector
OfOf
partition 2partition 2
BootBoot
sectorsector
OfOf
partition 3partition 3
BootBoot
sectorsector
OfOf
partition 3partition 3
BootBoot
sectorsector
OfOf
partition 4partition 4
BootBoot
sectorsector
OfOf
partition 4partition 4
Partition 1
(Volume 1)
Partition 2
(Volume 2)
Partition 3
(Volume 3)
Partition 4
(Volume 4)
VBR(Volume BootVBR(Volume Boot
Record)Record)•
各個分區我們可稱之為一個各個分區我們可稱之為一個 volume,volume, 而其第一個而其第一個
sector,sector, 稱為稱為 volume boot sector.volume boot sector.
•
若磁碟不分割若磁碟不分割 ,, 則整個則整個 volumevolume 也可以放置整個磁碟上也可以放置整個磁碟上
,, 此時磁碟的第一個此時磁碟的第一個 sector(sector 0)sector(sector 0) 就是就是 volumevolume
boot sector.boot sector.
•
Volume boot sectorVolume boot sector 的資料格式與意義取決於採用哪的資料格式與意義取決於採用哪
一種一種 file system.file system.
FAT16FAT16
•
一個採用一個採用 FAT16FAT16 檔案系統的檔案系統的 volumevolume 包含了四個區域包含了四個區域
•
Reserved regionReserved region
•
放置放置 Volume boot sectorVolume boot sector
•
FAT RegionFAT Region
•
紀錄紀錄 cluster entrycluster entry 的值的值
•
Root directory regionRoot directory region
•
放置放置 directory entrydirectory entry
•
File and directory data regionFile and directory data region
FAT16FAT16
MM
BRBR
MM
BRBR
BootBoot
sectorsector
OfOf
partition 1partition 1
BootBoot
sectorsector
OfOf
partition 1partition 1
BootBoot
sectorsector
OfOf
partition 2partition 2
BootBoot
sectorsector
OfOf
partition 2partition 2
BootBoot
sectorsector
OfOf
partition 3partition 3
BootBoot
sectorsector
OfOf
partition 3partition 3
BootBoot
sectorsector
OfOf
partition 4partition 4
BootBoot
sectorsector
OfOf
partition 4partition 4
Partition 1
(Volume 1)
Partition 3
(Volume 3)
Partition 4
(Volume 4)
BootBoot
sectorsector
OfOf
partitionpartition
22
BootBoot
sectorsector
OfOf
partitionpartition
22
FAT regionFAT regionFAT regionFAT region Root DirectoryRoot Directory
regionregion
Root DirectoryRoot Directory
regionregion
Data regionData regionData regionData region
FAT File System 的示意圖
Reserved regionReserved region
•
Volume boot sectorVolume boot sector 的結構類似的結構類似 MBR,MBR, 包含了包含了
•
Code area:Code area: 存放存放 OSOS 開機程式開機程式 ..
•
描述檔案系統特徵的資訊描述檔案系統特徵的資訊 ::
•
Reserved region, FAT region, Root directoryReserved region, FAT region, Root directory
region, data regionregion, data region 四個區域的起始位置四個區域的起始位置
•
磁碟的磁碟的 sectorsector 大小大小 ..
•
一個一個 clustercluster 所包含的所包含的 sectorsector 數目數目 ..
•
在檔案系統的資料操作皆以在檔案系統的資料操作皆以 clustercluster 為單位為單位 ..
Root directory regionRoot directory region
•
Directory entry(32bytes)Directory entry(32bytes) 的概念的概念 ::
•
檔案與目錄皆視為檔案與目錄皆視為 directorydirectory
•
Directory entryDirectory entry 描述描述 directorydirectory 的檔名的檔名 , size,, size, 第一第一
個存放資料的個存放資料的 cluster numbercluster number,, 屬性屬性 (( 檔案或目錄檔案或目錄 ))
•
一個一個 dirdir 如果為目錄如果為目錄 ,, 那麼其那麼其 clustercluster ”存放的是 子目”存放的是 子目
”錄及包含的檔案 的”錄及包含的檔案 的 entryentry
•
Root directoryRoot directory 為最上層的目錄與檔案為最上層的目錄與檔案 .. 下例將展下例將展
示如何將一個示如何將一個 root directoryroot directory 的資料內容抓取出來的資料內容抓取出來 ..
FAT regionFAT region
•
該區域紀錄該區域紀錄 cluster entrycluster entry 的值的值 ,, 每個在每個在 data regiondata region
的的 clustercluster 都會有一個都會有一個 cluster entrycluster entry 的值的值 ,, 來描述狀來描述狀
態是否為壞軌態是否為壞軌 ,, 已使用已使用 ,, 未被使用未被使用
•
0x00000x0000 代表其代表其 clustercluster 為為 freefree 的狀態的狀態 ..
•
0xfff70xfff7 代表代表 bad cluster.bad cluster.
•
0xffff0xffff 代表檔案的終止代表檔案的終止 cluster.cluster.
•
非以上的值非以上的值 ,, 則代表檔案的下一個則代表檔案的下一個 cluster.cluster. 見下個圖見下個圖
例例 ..
BootBoot
sectorsector
OfOf
partitionpartition
22
BootBoot
sectorsector
OfOf
partitionpartition
22
FAT regionFAT regionFAT regionFAT region Root DirectoryRoot Directory
regionregion
Root DirectoryRoot Directory
regionregion
Data regionData regionData regionData region77 99 00
xx
ff
ff
ff
ff
Cluster entry
of cluster 5
Cluster entry
of cluster 7 Cluster entry
of cluster 9
•
如果想要讀取如果想要讀取 nk.nb0nk.nb0 的內容的內容 ,, 必須依照下列步驟必須依照下列步驟 ::
•
搜尋搜尋 root directoryroot directory 區域區域 ,, 尋找一個檔名叫做尋找一個檔名叫做 nk.nb0nk.nb0
的的 directory enrty.directory enrty.
•
根據此根據此 entryentry 中紀錄的中紀錄的 start cluster number,start cluster number, 查詢對查詢對
應的應的 cluster entry,cluster entry, ”其內容意義為 下一個”其內容意義為 下一個 clustercluster
number”.number”.
•
以上例而言以上例而言 ,, 最後一個最後一個 clustercluster 為為 cluster 9,cluster 9, 因為其因為其
entryentry 為為 0xffff.0xffff. 代表終止的代表終止的 clustercluster
•
由此範例可以得知由此範例可以得知 , nk.nb0, nk.nb0 此檔案分布在此檔案分布在 cluster 5, 7,cluster 5, 7,
99 三個三個 cluster.cluster. 另外由於另外由於 boot sectorboot sector 的資訊可以計算的資訊可以計算
出出 data regiondata region 的起始位置與的起始位置與 clustercluster 大小大小 ,, 因此便可因此便可
以將以將 nk.nb0nk.nb0 的內容讀取出來的內容讀取出來 ..
Data
of cluster 5
Data
of cluster 7
Data
of cluster 9
Step 1
Step
2
檔案的寫入檔案的寫入
•
ProgrammerProgrammer 必須自行蒐尋必須自行蒐尋 cluster entrycluster entry 值為值為
0x00000x0000 的的 cluster,cluster, 搜尋到足夠的搜尋到足夠的 free clusterfree cluster 才能才能
把檔案儲存把檔案儲存 ..
•
0x00000x0000 代表其代表其 clustercluster 為為 freefree 的狀態的狀態 ..
•
0xfff70xfff7 代表代表 bad cluster.bad cluster.
•
0xffff0xffff 代表檔案的終止代表檔案的終止 cluster.cluster.
•
非以上的值非以上的值 ,, 則代表檔案的下一個則代表檔案的下一個 cluster.cluster.
ConclusionConclusion
•
延伸閱讀延伸閱讀 ::
•
Directory entryDirectory entry 只能記錄只能記錄 1111 字元檔名字元檔名 ,, 若要擴充可若要擴充可
參考參考 Microsoft FATMicrosoft FAT 白皮書白皮書 ,, 有更詳細的說明有更詳細的說明 ..
•
FAT16FAT16 與與 FAT32FAT32 的差別是相當微小的的差別是相當微小的 ,, 除了一些資除了一些資
料結構不太一樣料結構不太一樣 ,, 其原理是一樣的其原理是一樣的 ..
參考書目參考書目 ::
維基百科維基百科 WikipediaWikipedia
Microsoft Extensive Firmware Initiative FAT32Microsoft Extensive Firmware Initiative FAT32
File System SpecificationFile System Specification

FAT file system implementation from scratch in boot-loader (chinese)

  • 1.
    FAT File SystemFATFile System implememtation from scratchimplememtation from scratch Represented by Sneeker Yeh 2010 August.
  • 2.
    OutlineOutline • Introduction offile system • MBR(Master Boot Record) • VBR(Volume Boot Record) • FAT16 • Directory entry 與 cluster entry 的概念 • 案寫入檔 • Conclusion
  • 3.
    Introduction of FilesystemIntroduction of File system • 介於介於 storagestorage 驅動程式與應用程式驅動程式與應用程式 (( 或作業系統或作業系統 )) 的介的介 面面 ,, 其任務為組織檔案的存放方式其任務為組織檔案的存放方式 • 若儲存體為若儲存體為 flashflash 可能還會有可能還會有 wear leveling, garbagewear leveling, garbage collectioncollection 等等的等等的 software layersoftware layer • 此技術並非在此次討論範圍內此技術並非在此次討論範圍內 ,, 而待下回分解而待下回分解 ..
  • 4.
    MBR (Master BootMBR(Master Boot Record)Record)• 在分割過後的磁碟上在分割過後的磁碟上 ,, 第一個磁區第一個磁區 ,sector 0,,sector 0, 稱為稱為 MBR(Master Boot Record).MBR(Master Boot Record). • code areacode area :可放置開機管理程式:可放置開機管理程式 • Partition(volume) tablePartition(volume) table :可放置四個分割區的描述資訊:可放置四個分割區的描述資訊 • 包含各個分區的起始磁區包含各個分區的起始磁區 • 各個分區的結束磁區各個分區的結束磁區 • ActiveActive 資訊資訊 • true or false,true or false, 讓開機管理程式選擇要啟動的分區讓開機管理程式選擇要啟動的分區 ,, 將將 該分區的第一個磁區該分區的第一個磁區 (VBR)(VBR) 載入載入 memorymemory 並跳躍過並跳躍過 去去 ,, 各分區的第一個磁區通常放置各分區的第一個磁區通常放置 OS loader.OS loader.
  • 5.
    MBR (Master BootMBR(Master Boot Record)Record)
  • 6.
    MBR (Master BootMBR(Master Boot Record)Record)• MBRMBR 讓我們可以自訂與紀錄四個分區讓我們可以自訂與紀錄四個分區 ,, 以及各分區的以及各分區的 大小與起始位置大小與起始位置 MM BRBR MM BRBR BootBoot sectorsector OfOf partition 1partition 1 BootBoot sectorsector OfOf partition 1partition 1 BootBoot sectorsector OfOf partition 2partition 2 BootBoot sectorsector OfOf partition 2partition 2 BootBoot sectorsector OfOf partition 3partition 3 BootBoot sectorsector OfOf partition 3partition 3 BootBoot sectorsector OfOf partition 4partition 4 BootBoot sectorsector OfOf partition 4partition 4 Partition 1 (Volume 1) Partition 2 (Volume 2) Partition 3 (Volume 3) Partition 4 (Volume 4)
  • 7.
    VBR(Volume BootVBR(Volume Boot Record)Record)• 各個分區我們可稱之為一個各個分區我們可稱之為一個volume,volume, 而其第一個而其第一個 sector,sector, 稱為稱為 volume boot sector.volume boot sector. • 若磁碟不分割若磁碟不分割 ,, 則整個則整個 volumevolume 也可以放置整個磁碟上也可以放置整個磁碟上 ,, 此時磁碟的第一個此時磁碟的第一個 sector(sector 0)sector(sector 0) 就是就是 volumevolume boot sector.boot sector. • Volume boot sectorVolume boot sector 的資料格式與意義取決於採用哪的資料格式與意義取決於採用哪 一種一種 file system.file system.
  • 8.
    FAT16FAT16 • 一個採用一個採用 FAT16FAT16 檔案系統的檔案系統的volumevolume 包含了四個區域包含了四個區域 • Reserved regionReserved region • 放置放置 Volume boot sectorVolume boot sector • FAT RegionFAT Region • 紀錄紀錄 cluster entrycluster entry 的值的值 • Root directory regionRoot directory region • 放置放置 directory entrydirectory entry • File and directory data regionFile and directory data region
  • 9.
    FAT16FAT16 MM BRBR MM BRBR BootBoot sectorsector OfOf partition 1partition 1 BootBoot sectorsector OfOf partition1partition 1 BootBoot sectorsector OfOf partition 2partition 2 BootBoot sectorsector OfOf partition 2partition 2 BootBoot sectorsector OfOf partition 3partition 3 BootBoot sectorsector OfOf partition 3partition 3 BootBoot sectorsector OfOf partition 4partition 4 BootBoot sectorsector OfOf partition 4partition 4 Partition 1 (Volume 1) Partition 3 (Volume 3) Partition 4 (Volume 4) BootBoot sectorsector OfOf partitionpartition 22 BootBoot sectorsector OfOf partitionpartition 22 FAT regionFAT regionFAT regionFAT region Root DirectoryRoot Directory regionregion Root DirectoryRoot Directory regionregion Data regionData regionData regionData region FAT File System 的示意圖
  • 10.
    Reserved regionReserved region • Volumeboot sectorVolume boot sector 的結構類似的結構類似 MBR,MBR, 包含了包含了 • Code area:Code area: 存放存放 OSOS 開機程式開機程式 .. • 描述檔案系統特徵的資訊描述檔案系統特徵的資訊 :: • Reserved region, FAT region, Root directoryReserved region, FAT region, Root directory region, data regionregion, data region 四個區域的起始位置四個區域的起始位置 • 磁碟的磁碟的 sectorsector 大小大小 .. • 一個一個 clustercluster 所包含的所包含的 sectorsector 數目數目 .. • 在檔案系統的資料操作皆以在檔案系統的資料操作皆以 clustercluster 為單位為單位 ..
  • 11.
    Root directory regionRootdirectory region • Directory entry(32bytes)Directory entry(32bytes) 的概念的概念 :: • 檔案與目錄皆視為檔案與目錄皆視為 directorydirectory • Directory entryDirectory entry 描述描述 directorydirectory 的檔名的檔名 , size,, size, 第一第一 個存放資料的個存放資料的 cluster numbercluster number,, 屬性屬性 (( 檔案或目錄檔案或目錄 )) • 一個一個 dirdir 如果為目錄如果為目錄 ,, 那麼其那麼其 clustercluster ”存放的是 子目”存放的是 子目 ”錄及包含的檔案 的”錄及包含的檔案 的 entryentry • Root directoryRoot directory 為最上層的目錄與檔案為最上層的目錄與檔案 .. 下例將展下例將展 示如何將一個示如何將一個 root directoryroot directory 的資料內容抓取出來的資料內容抓取出來 ..
  • 12.
    FAT regionFAT region • 該區域紀錄該區域紀錄cluster entrycluster entry 的值的值 ,, 每個在每個在 data regiondata region 的的 clustercluster 都會有一個都會有一個 cluster entrycluster entry 的值的值 ,, 來描述狀來描述狀 態是否為壞軌態是否為壞軌 ,, 已使用已使用 ,, 未被使用未被使用 • 0x00000x0000 代表其代表其 clustercluster 為為 freefree 的狀態的狀態 .. • 0xfff70xfff7 代表代表 bad cluster.bad cluster. • 0xffff0xffff 代表檔案的終止代表檔案的終止 cluster.cluster. • 非以上的值非以上的值 ,, 則代表檔案的下一個則代表檔案的下一個 cluster.cluster. 見下個圖見下個圖 例例 ..
  • 13.
    BootBoot sectorsector OfOf partitionpartition 22 BootBoot sectorsector OfOf partitionpartition 22 FAT regionFAT regionFATregionFAT region Root DirectoryRoot Directory regionregion Root DirectoryRoot Directory regionregion Data regionData regionData regionData region77 99 00 xx ff ff ff ff Cluster entry of cluster 5 Cluster entry of cluster 7 Cluster entry of cluster 9 • 如果想要讀取如果想要讀取 nk.nb0nk.nb0 的內容的內容 ,, 必須依照下列步驟必須依照下列步驟 :: • 搜尋搜尋 root directoryroot directory 區域區域 ,, 尋找一個檔名叫做尋找一個檔名叫做 nk.nb0nk.nb0 的的 directory enrty.directory enrty. • 根據此根據此 entryentry 中紀錄的中紀錄的 start cluster number,start cluster number, 查詢對查詢對 應的應的 cluster entry,cluster entry, ”其內容意義為 下一個”其內容意義為 下一個 clustercluster number”.number”. • 以上例而言以上例而言 ,, 最後一個最後一個 clustercluster 為為 cluster 9,cluster 9, 因為其因為其 entryentry 為為 0xffff.0xffff. 代表終止的代表終止的 clustercluster • 由此範例可以得知由此範例可以得知 , nk.nb0, nk.nb0 此檔案分布在此檔案分布在 cluster 5, 7,cluster 5, 7, 99 三個三個 cluster.cluster. 另外由於另外由於 boot sectorboot sector 的資訊可以計算的資訊可以計算 出出 data regiondata region 的起始位置與的起始位置與 clustercluster 大小大小 ,, 因此便可因此便可 以將以將 nk.nb0nk.nb0 的內容讀取出來的內容讀取出來 .. Data of cluster 5 Data of cluster 7 Data of cluster 9 Step 1 Step 2
  • 14.
    檔案的寫入檔案的寫入 • ProgrammerProgrammer 必須自行蒐尋必須自行蒐尋 clusterentrycluster entry 值為值為 0x00000x0000 的的 cluster,cluster, 搜尋到足夠的搜尋到足夠的 free clusterfree cluster 才能才能 把檔案儲存把檔案儲存 .. • 0x00000x0000 代表其代表其 clustercluster 為為 freefree 的狀態的狀態 .. • 0xfff70xfff7 代表代表 bad cluster.bad cluster. • 0xffff0xffff 代表檔案的終止代表檔案的終止 cluster.cluster. • 非以上的值非以上的值 ,, 則代表檔案的下一個則代表檔案的下一個 cluster.cluster.
  • 15.
    ConclusionConclusion • 延伸閱讀延伸閱讀 :: • Directory entryDirectoryentry 只能記錄只能記錄 1111 字元檔名字元檔名 ,, 若要擴充可若要擴充可 參考參考 Microsoft FATMicrosoft FAT 白皮書白皮書 ,, 有更詳細的說明有更詳細的說明 .. • FAT16FAT16 與與 FAT32FAT32 的差別是相當微小的的差別是相當微小的 ,, 除了一些資除了一些資 料結構不太一樣料結構不太一樣 ,, 其原理是一樣的其原理是一樣的 .. 參考書目參考書目 :: 維基百科維基百科 WikipediaWikipedia Microsoft Extensive Firmware Initiative FAT32Microsoft Extensive Firmware Initiative FAT32 File System SpecificationFile System Specification