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

15
FAT File System FAT File System implememtation from scratch implememtation from scratch Represented by Sneeker Yeh 2010 August.

Upload: sneeker-yeh

Post on 16-Jul-2015

100 views

Category:

Software


3 download

TRANSCRIPT

FAT File System FAT 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 system Introduction of File system

• 介於介於 storage storage 驅動程式與應用程式驅動程式與應用程式 ((或作業系統或作業系統 ))的介的介面面 ,,其任務為組織檔案的存放方式其任務為組織檔案的存放方式

• 若儲存體為若儲存體為 flashflash可能還會有可能還會有 wear leveling, garbage wear leveling, garbage collectioncollection等等的等等的 software layersoftware layer

• 此技術並非在此次討論範圍內此技術並非在此次討論範圍內 , , 而待下回分解而待下回分解 ..

MBR (Master Boot MBR (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 Boot MBR (Master Boot Record)Record)

MBR (Master Boot MBR (Master Boot Record)Record)• MBRMBR讓我們可以自訂與紀錄四個分區讓我們可以自訂與紀錄四個分區 , , 以及各分區的以及各分區的大小與起始位置大小與起始位置

MMBRBRMMBRBR

Boot Boot sectorsector

Of Of partition 1partition 1

Boot Boot sectorsector

Of Of partition 1partition 1

Boot Boot sectorsector

Of Of partition 2partition 2

Boot Boot sectorsector

Of Of partition 2partition 2

Boot Boot sectorsector

Of Of partition 3partition 3

Boot Boot sectorsector

Of Of partition 3partition 3

Boot Boot sectorsector

Of Of partition 4partition 4

Boot Boot sectorsector

Of Of partition 4partition 4

Partition 1(Volume 1)

Partition 2(Volume 2)

Partition 3(Volume 3)

Partition 4(Volume 4)

VBR(Volume Boot VBR(Volume Boot Record)Record)• 各個分區我們可稱之為一個各個分區我們可稱之為一個 volume, volume, 而其第一個而其第一個

sector, sector, 稱為稱為 volume boot sector.volume boot sector.

• 若磁碟不分割若磁碟不分割 , , 則整個則整個 volumevolume也可以放置整個磁碟上也可以放置整個磁碟上, , 此時磁碟的第一個此時磁碟的第一個 sector(sector 0)sector(sector 0)就是就是 volume volume 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

MMBRBRMMBRBR

Boot Boot sectorsector

Of Of partition 1partition 1

Boot Boot sectorsector

Of Of partition 1partition 1

Boot Boot sectorsector

Of Of partition 2partition 2

Boot Boot sectorsector

Of Of partition 2partition 2

Boot Boot sectorsector

Of Of partition 3partition 3

Boot Boot sectorsector

Of Of partition 3partition 3

Boot Boot sectorsector

Of Of partition 4partition 4

Boot Boot sectorsector

Of Of partition 4partition 4

Partition 1(Volume 1) Partition 3

(Volume 3)Partition 4(Volume 4)

Boot Boot sectorsector

Of Of partition partition

22

Boot Boot sectorsector

Of Of partition partition

22

FAT regionFAT regionFAT regionFAT region Root Directory Root Directory regionregion

Root Directory Root 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 directory Reserved 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 entry Directory 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.見下個圖見下個圖例例 ..

Boot Boot sectorsector

Of Of partition partition

22

Boot Boot sectorsector

Of Of partition partition

22

FAT regionFAT regionFAT regionFAT region Root Directory Root Directory regionregion

Root Directory Root Directory regionregion

Data regionData regionData regionData region77 99 00xxffffffff

Cluster entry of cluster 5

Cluster entry of cluster 7 Cluster entry

of cluster 9

• 如果想要讀取如果想要讀取 nk.nb0nk.nb0的內容的內容 , , 必須依照下列步驟必須依照下列步驟 ::

• 搜尋搜尋 root directory root directory 區域區域 , , 尋找一個檔名叫做尋找一個檔名叫做 nk.nb0nk.nb0的的 directory enrty.directory enrty.

• 根據此根據此 entryentry中紀錄的中紀錄的 start cluster number, start cluster number, 查詢對查詢對應的應的 cluster entry, cluster entry, ”其內容意義為下一個”其內容意義為下一個 cluster cluster 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 FAT32 Microsoft Extensive Firmware Initiative FAT32 File System SpecificationFile System Specification