内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12
前面我們更多的集中在Linux系統(tǒng)下文件系統(tǒng)的介紹,是時候介紹一下其它文件系統(tǒng)了。今天我們介紹一下Windows操作系統(tǒng)下的文件系統(tǒng),也就是FAT文件系統(tǒng)。嚴格的來說其實是DOS的文件系統(tǒng)。今天我們介紹一下FAT最古老的版本,FAT12文件系統(tǒng)的內容。
FAT文件系統(tǒng)的磁盤布局
在學習文件系統(tǒng)更多細節(jié)之前我們有必要了解一下它的整體磁盤布局,也就是數(shù)據(jù)是如何放置的。這樣便于我們對該文件系統(tǒng)進行更加深入的理解。
如上圖所示,FAT文件系統(tǒng)分為5個主要區(qū)域,分別是引導程序區(qū),FAT1,FAT2,目錄文件項和文件數(shù)據(jù)。其中FAT1和FAT2也就是文件分配表(File Allocate Table),它是FAT文件系統(tǒng)的核心,用于描述磁盤空間的使用情況。需要注意的是,這里的數(shù)值只是一個示例,并非固定不變,通常需要根據(jù)引導扇區(qū)的數(shù)據(jù)進行計算得到。
引導扇區(qū)
引導扇區(qū)是Windows操作系統(tǒng)下特有的,包含操作系統(tǒng)引導的作用。對于文件系統(tǒng)而言,這個扇區(qū)的作用其實與Linux文件系統(tǒng)的超級塊很像,其中包含著對文件系統(tǒng)整體的描述信息。如下圖所示是該扇區(qū)的前部分內容,其中偏移22的地方描述了FAT表的大小。
可以看出,其實FAT文件系統(tǒng)的磁盤布局是動態(tài)的。在圖一中描述的偏移信息并非一成不變的,而是在格式化的時候確定的,而且該信息可以在啟動扇區(qū)中找到。
目錄文件項
這里相當于FAT文件系統(tǒng)的根目錄。所有的文件或者目錄都要以這里為起始位置。這里每個文件或者目錄都是通過下面這個結構圖描述的。這里面包含文件名稱,擴展名,文件屬性和文件的數(shù)據(jù)位置等內容。
上述數(shù)據(jù)結構與Linux中的inode類似,可以看出每一項占用32字節(jié)的空間。這樣磁盤布局中的目錄文件項空間就可以細化成下圖這樣。其中每一個方塊代表上圖中的一個數(shù)據(jù)結構。這個數(shù)據(jù)結構里面比較重要的內容是文件名和文件數(shù)據(jù)的首地址。
有了文件數(shù)據(jù)的首地址,我們就知道文件的數(shù)據(jù)存儲在什么地方了。那么其它數(shù)據(jù)如何找到呢?這個時候就用到文件分配表了。
FAT-文件分配表
如果我們將FAT表放大,對于FAT12來說,它是由很多12位的數(shù)字構成。這些12位的數(shù)字稱為一個FAT表項,每一項與文件數(shù)據(jù)區(qū)的一個簇相對應。這個表項即表示了對應的數(shù)據(jù)簇是否被使用,又表示了所在文件的下一個數(shù)據(jù)簇的位置,具體差異由其中的數(shù)值表示。
為了便于理解FAT的作用,我們舉一個具體的例子,具體如下圖所示。假設有個文件file1.txt,我們根據(jù)目錄文件項知道其其實的簇地址是0x05,這個是該文件第一個簇的位置,然后根據(jù)簇地址就能找到FAT中對應的表項。根據(jù)表項內容,我們可以知道下一個簇的位置,以此類推,我們可以找到該文件的所有數(shù)據(jù)。
如果我們簡化一下這個結構,其實整個關系就是一個單向鏈表的關系,我們可以將FAT表項理解為next指針,簇則是data數(shù)據(jù)。只不過FAT表項和簇是通過地址偏移建立了兩者之間的關系。上圖可以簡化為下圖所示的樣子。
數(shù)據(jù)實例分析
我們可以通過實例來分析一下FAT的數(shù)據(jù)布局情況。假設我們采用Ubuntu18.04平臺。此時我們可以通過dd命令生成一個1MB的文件。然后通過loop設備將文件模擬成一個塊設備。之后就可以通過mkfs.fat進行格式化了。下面是格式化完后創(chuàng)建的文件。
完成上述操作后,我們其實就相當于在文件中創(chuàng)建了一個FAT文件系統(tǒng)了。然后我們可以通過vim打開這個文件分析其中的數(shù)據(jù)。比如下面是引導扇區(qū)的內容,我們可以將其中的內容與前面表格中相關數(shù)據(jù)對應來學習,這樣我們就可以有更深入的理解。
今天的內容先到這里,希望對大家有所幫助。后面我們專門寫一篇文章,介紹如何對磁盤數(shù)據(jù)進行分析。
總結
以上是生活随笔為你收集整理的内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12如何隐藏dock栏_iPhone边框
- 下一篇: 腐蚀rust服务器命令_RUST++ M