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