Linux文件系統(tǒng)類(lèi)型引領(lǐng)入門(mén)
linux經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶(hù)都很了解Linux文件系統(tǒng)類(lèi)型,這里我發(fā)表一下個(gè)人理解,和大家討論討論。很詳細(xì)地了解某個(gè)操作系統(tǒng)的實(shí)際工作方式是非常困難的,因?yàn)榇蠖鄶?shù)操作系統(tǒng)的源代碼都是嚴(yán)格保密的。在以實(shí)際使用為目標(biāo)的操作系統(tǒng)中,讓任何人都可以自由獲取系統(tǒng)源代碼,無(wú)論目的是要了解、學(xué)習(xí)還是修改,這樣的系統(tǒng)并不多。本論文的主題就是這些少數(shù)操作系統(tǒng)中的一個(gè):Linux。
Linux是一個(gè)性能穩(wěn)定、功能強(qiáng)大、效率高的操作系統(tǒng)。它在功能特性方面與Unix系統(tǒng)相似,同時(shí)又具有多任務(wù)、多用戶(hù)、多平臺(tái)等若干特性。Linux的源代碼是開(kāi)放的,閱讀Linux源代碼,無(wú)疑是深入學(xué)習(xí)Linux的***方法。
文件系統(tǒng)是Linux操作系統(tǒng)的重要組成部分,Linux文件具有強(qiáng)大的功功能。文件系統(tǒng)中的文件是數(shù)據(jù)的集合,文件系統(tǒng)不僅包含著文件中的數(shù)據(jù)而且還有文件系統(tǒng)的結(jié)構(gòu),所有Linux 用戶(hù)和程序看到的文件、目錄、軟連接及文件保護(hù)信息等都存儲(chǔ)在其中。
Linux 最早的文件系統(tǒng)是Minix,但是專(zhuān)門(mén)為L(zhǎng)inux 設(shè)計(jì)的文件系統(tǒng)——擴(kuò)展文件系統(tǒng)第二版或EXT2被設(shè)計(jì)出來(lái)并添加到Linux中,這對(duì)Linux產(chǎn)生了重大影響。EXT2文件系統(tǒng)功能強(qiáng)大、易擴(kuò)充、性能上進(jìn)行了全面優(yōu)化優(yōu)化,也是現(xiàn)在所以Linux發(fā)布和安裝的標(biāo)準(zhǔn)文件系統(tǒng)類(lèi)型。
每個(gè)實(shí)際文件系統(tǒng)從操作系統(tǒng)和系統(tǒng)服務(wù)中分離出來(lái),它們之間通過(guò)一個(gè)接口層:虛擬文件系統(tǒng)或VFS來(lái)通訊。VFS使得Linux可以支持多個(gè)不同的文件系統(tǒng),每個(gè)表示一個(gè)VFS 的通用接口。由于軟件將Linux 文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行了轉(zhuǎn)換,所以Linux核心的其它部分及系統(tǒng)中運(yùn)行的程序?qū)⒖吹浇y(tǒng)一的文件系統(tǒng)。Linux 的虛擬文件系統(tǒng)允許用戶(hù)同時(shí)能透明地安裝許多不同的文件系統(tǒng)。
Linux文件系統(tǒng)類(lèi)型,作為一種特殊類(lèi)型/proc文件系統(tǒng)只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問(wèn)系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。/proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng),用戶(hù)和應(yīng)用程序可以通過(guò)/proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。
Linux文件系統(tǒng)類(lèi)型,EXT2文件系統(tǒng)、虛擬文件系統(tǒng)、/proc文件系統(tǒng)是三個(gè)具有代表性的文件系統(tǒng),本論文試圖通過(guò)對(duì)他們的分析來(lái)研究Linux文件系統(tǒng)機(jī)制。并且在分析這三種文件系統(tǒng)的基礎(chǔ)上對(duì)Linux文件系統(tǒng)操作進(jìn)行了解、研究(本論文選取了open和 close兩種操作進(jìn)行研究)。在第二部分中將介紹EXT2文件系統(tǒng);第三部分論述虛擬文件系統(tǒng)的特點(diǎn);第四部分簡(jiǎn)要介紹/proc文件系統(tǒng);***,介紹兩種具體文件系統(tǒng)操作的實(shí)現(xiàn)。
EXT2文件系統(tǒng)在Linux中普通文件和目錄文件保存在稱(chēng)為塊物理設(shè)備的磁盤(pán)或者磁帶上。一套 Linux系統(tǒng)支持若干物理盤(pán),每個(gè)物理盤(pán)可定義一個(gè)或者多個(gè)文件系統(tǒng)。(類(lèi)比于微機(jī)磁盤(pán)分區(qū))。每個(gè)文件系統(tǒng)由邏輯塊的序列組成,一個(gè)邏輯盤(pán)空間一般劃分為幾個(gè)用途各不相同的部分,即引導(dǎo)塊、超級(jí)塊、inode區(qū)以及數(shù)據(jù)區(qū)等。
引導(dǎo)塊:在文件系統(tǒng)的開(kāi)頭,通常為一個(gè)扇區(qū),其中存放引導(dǎo)程序,用于讀入并啟動(dòng)操作系統(tǒng);超級(jí)塊:用于記錄文件系統(tǒng)的管理信息。特定的文件系統(tǒng)定義了特定的超級(jí)塊;inode區(qū)(索引節(jié)點(diǎn)):一個(gè)文件或目錄占據(jù)一個(gè)索引節(jié)點(diǎn)。***個(gè)索引節(jié)點(diǎn)是該文件系統(tǒng)的根節(jié)點(diǎn)。利用根節(jié)點(diǎn),可以把一個(gè)文件系統(tǒng)掛在另一個(gè)文件系統(tǒng)的非葉節(jié)點(diǎn)上;數(shù)據(jù)區(qū):用于存放文件數(shù)據(jù)或者管理數(shù)據(jù)。
Linux最早引入的文件系統(tǒng)類(lèi)型是MINIX。MINIX文件系統(tǒng)由MINIX操作系統(tǒng)定義,有一定的局限性,如文件名最長(zhǎng)14個(gè)字符,文件最長(zhǎng)64M字節(jié)。***個(gè)專(zhuān)門(mén)為L(zhǎng)inux設(shè)計(jì)的文件系統(tǒng)是EXT(Extended File System),但目前流行最廣的是EXT2。
第二代擴(kuò)展文件系統(tǒng)由Rey Card 設(shè)計(jì),其目標(biāo)是為L(zhǎng)inux 提供一個(gè)強(qiáng)大的可擴(kuò)展文件系統(tǒng)。它同時(shí)也是Linux界中設(shè)計(jì)最成功的文件系統(tǒng)。通過(guò)VFS的超級(jí)塊(struct ext2_sb_info ext2_sb)可以訪問(wèn)EXT2的超級(jí)塊,通過(guò)VFS的inode(struct ext2_inode_info ext2_i)可以訪問(wèn)EXT2的inode。
文件系統(tǒng)EXT2的源代碼在/usr/src/linux/fs/ext2目錄下,它的數(shù)據(jù)結(jié)構(gòu)在文件/usr/src/linux/include/linux/ext2_fs.h以及同一目錄下的文件ext2_fs_i.h和ext2_fs_sb.h中定義。EXT2文件系統(tǒng)將它所占用的邏輯分區(qū)劃分成塊組(block group)。
EXT2文件系統(tǒng)邏輯分區(qū):
和很多文件系統(tǒng)一樣, EXT2 建立在數(shù)據(jù)被保存在數(shù)據(jù)塊中的文件內(nèi)這個(gè)前提下。這些數(shù)據(jù)塊長(zhǎng)度相等且這個(gè)長(zhǎng)度可以變化,某個(gè)EXT2 文件系統(tǒng)的塊大小在創(chuàng)建(使用mke2fs)時(shí)設(shè)置。每個(gè)文件的大小和剛好大于它的塊大小正數(shù)倍相等。如果塊大小為1024 字節(jié)而一個(gè)1025 字節(jié)長(zhǎng)的文件將占據(jù)兩個(gè)1024 字節(jié)大小的塊。這樣你不得不浪費(fèi)差不多一般的空間。我們通常需要在CPU 的內(nèi)存利用率和磁盤(pán)空間使用上進(jìn)行折中。而大多數(shù)操作系統(tǒng),包括Linux 在內(nèi),為了減少CPU 的工作負(fù)載而被迫選擇相對(duì)較低的磁盤(pán)空間利用率。并不是文件中每個(gè)塊都包含數(shù)據(jù),其中有些塊被用來(lái)包含描敘此文件系統(tǒng)結(jié)構(gòu)的信息。EXT2通過(guò)一個(gè) inode 結(jié)構(gòu)來(lái)描敘文件系統(tǒng)中文件并確定此文件系統(tǒng)的拓?fù)浣Y(jié)構(gòu)。inode 結(jié)構(gòu)描敘文件中數(shù)據(jù)占據(jù)哪個(gè)塊以及文件的存取權(quán)限、文件修改時(shí)間及文件類(lèi)型。EXT2 文件系統(tǒng)中的每個(gè)文件用一個(gè)inode 來(lái)表示且每個(gè)inode 有唯一的編號(hào)。文件系統(tǒng)中所有的inode都被保存在inode 表中。 EXT2 目錄僅是一個(gè)包含指向其目錄入口指針的特殊文件(也用inode表示)。
對(duì)文件系統(tǒng)而言文件僅是一系列可讀寫(xiě)的數(shù)據(jù)塊。文件系統(tǒng)并不需要了解數(shù)據(jù)塊應(yīng)該放置到物理介質(zhì)上什么位置,這些都是設(shè)備驅(qū)動(dòng)的任務(wù)。無(wú)論何時(shí)只要文件系統(tǒng)需要從包含它的塊設(shè)備中讀取信息或數(shù)據(jù),它將請(qǐng)求底層的設(shè)備驅(qū)動(dòng)讀取一個(gè)基本塊大小整數(shù)倍的數(shù)據(jù)塊。EXT2 文件系統(tǒng)將它所使用的邏輯分區(qū)劃分成數(shù)據(jù)塊組。每個(gè)數(shù)據(jù)塊組將那些對(duì)文件系統(tǒng)完整性最重要的信息復(fù)制出來(lái), 同時(shí)將實(shí)際文件和目錄看作信息與數(shù)據(jù)塊。為了發(fā)生災(zāi)難性事件時(shí)文件系統(tǒng)的修復(fù),這些復(fù)制非常有必要。
【編輯推薦】



















