文件系統(tǒng)指文件存在的物理空間。在Linux系統(tǒng)中,每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),都有自己的目錄層次結(jié)構(gòu)。Linux的最重要特征之一就是支持多種文件系統(tǒng),這樣它更加靈活,并可以和許多其它種操作系統(tǒng)共存。Virtual File System(虛擬文件系統(tǒng))使得Linux可以支持多個(gè)不同的文件系統(tǒng)。由于系統(tǒng)已將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)。虛擬文件系統(tǒng)是為L(zhǎng)inux用戶(hù)提供快速且高效的文件訪問(wèn)服務(wù)而設(shè)計(jì)的。
隨著Linux的不斷發(fā)展,它所支持的文件格式系統(tǒng)也在迅速擴(kuò)充。特別是Linux 2.4內(nèi)核正式推出后,出現(xiàn)了大量新的文件系統(tǒng),其中包括日志文件系統(tǒng)ext3、ReiserFS、XFS、JFS和其它文件系統(tǒng)。Linux系統(tǒng)核心可以支持十多種文件系統(tǒng)類(lèi)型:JFS、 ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
下面介紹Linux下幾個(gè)最常用的文件系統(tǒng),其中包括ext、ext2、ext3、JFS、XFS、ReiserFS等。
ext
ext是第一個(gè)專(zhuān)門(mén)為L(zhǎng)inux開(kāi)發(fā)的文件系統(tǒng)類(lèi)型,叫做擴(kuò)展文件系統(tǒng)。它是1992年4月完成的,對(duì)Linux早期的發(fā)展產(chǎn)生了重要作用。但是,由于其在穩(wěn)定性、速度和兼容性上存在許多缺陷,現(xiàn)在已經(jīng)很少使用了。
ext2
ext2是為解決ext文件系統(tǒng)的缺陷而設(shè)計(jì)的可擴(kuò)展的、高性能的文件系統(tǒng),它又被稱(chēng)為二級(jí)擴(kuò)展文件系統(tǒng)。ext2是1993年發(fā)布的,設(shè)計(jì)者是Rey Card。它是Linux文件系統(tǒng)類(lèi)型中使用最多的格式,并且在速度和CPU利用率上較為突出,是GNU/Linux系統(tǒng)中標(biāo)準(zhǔn)的文件系統(tǒng)。它存取文件的性能極好,對(duì)于中、小型的文件更顯示出優(yōu)勢(shì),這主要得益于其簇快取層的優(yōu)良設(shè)計(jì)。ext2可以支持256字節(jié)的長(zhǎng)文件名,其單一文件大小和文件系統(tǒng)本身的容量上限與文件系統(tǒng)本身的簇大小有關(guān)。在常見(jiàn)的Intel x86兼容處理器的系統(tǒng)中,簇最大為4KB,單一文件大小上限為2048GB, 而文件系統(tǒng)的容量上限為6384GB。盡管Linux可以支持種類(lèi)繁多的文件系統(tǒng),但是2000年以前幾乎所有的Linux發(fā)行版都使用ext2作為默認(rèn)的文件系統(tǒng)。
ext2也有一些問(wèn)題。由于它的設(shè)計(jì)者主要考慮的是文件系統(tǒng)性能方面的問(wèn)題,而在寫(xiě)入文件內(nèi)容的同時(shí),并沒(méi)有寫(xiě)入文件的meta-data(和文件有關(guān)的信息,例如權(quán)限、所有者及創(chuàng)建和訪問(wèn)時(shí)間)。換句話(huà)說(shuō),Linux先寫(xiě)入文件的內(nèi)容,然后等到有空的時(shí)候才寫(xiě)入文件的meta-data。如果出現(xiàn)寫(xiě)入文件內(nèi)容之后,但在寫(xiě)入文件的meta-data之前系統(tǒng)突然斷電,就可能造成文件系統(tǒng)就會(huì)處于不一致的狀態(tài)。在一個(gè)有大量文件操作的系統(tǒng)中,出現(xiàn)這種情況會(huì)導(dǎo)致很?chē)?yán)重的后果。另外,由于目前Linux的 2.4內(nèi)核所能使用的單一分割區(qū)最大只有2048GB,盡管文件系統(tǒng)的容量上限為6384G,但是實(shí)際上能使用的文件系統(tǒng)容量最多也只有2048GB。
ext3
在講解ext3、JFS、XFS、ReiserFS日志格式文件系統(tǒng)之前,先介紹一些日志式文件系統(tǒng)基礎(chǔ)。
日志式文件系統(tǒng)起源于Oracle、Sybase等大型數(shù)據(jù)庫(kù)。由于數(shù)據(jù)庫(kù)操作往往是由多個(gè)相關(guān)的、相互依賴(lài)的子操作組成,任何一個(gè)子操作的失敗都意味著整個(gè)操作的無(wú)效性,對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的任何修改都要恢復(fù)到操作以前的狀態(tài)。Linux日志式文件系統(tǒng)就是由此發(fā)展而來(lái)的。日志文件系統(tǒng)通過(guò)增加一個(gè)叫做日志的、新的數(shù)據(jù)結(jié)構(gòu)來(lái)解決這個(gè)“fsck”問(wèn)題。這個(gè)日志是位于磁盤(pán)上的結(jié)構(gòu)。在對(duì)元數(shù)據(jù)做任何改變以前,文件系統(tǒng)驅(qū)動(dòng)程序會(huì)向日志中寫(xiě)入一個(gè)條目,這個(gè)條目描述了它將要做些什么,所以日志文件具有可伸縮性和健壯性。在分區(qū)中保存日志記錄文件好處是:文件系統(tǒng)寫(xiě)操作首先是對(duì)記錄文件進(jìn)行操作,若整個(gè)寫(xiě)操作由于某種原因(如系統(tǒng)掉電)而中斷,則在下次系統(tǒng)啟動(dòng)時(shí)就會(huì)讀日志記錄文件的內(nèi)容,恢復(fù)到?jīng)]有完成的寫(xiě)操作,這個(gè)過(guò)程一般只需要兩三分鐘時(shí)間。
ext3是由開(kāi)放資源社區(qū)開(kāi)發(fā)的日志文件系統(tǒng),早期主要開(kāi)發(fā)人員是Stephen Tweedie。ext3被設(shè)計(jì)成是ext2的升級(jí)版本,盡可能方便用戶(hù)從ext2向ext3遷移。ext3在ext2的基礎(chǔ)上加入了記錄元數(shù)據(jù)的日志功能,努力保持向前和向后的兼容性,也就是在保有目前ext2的格式之下再加上日志功能。和ext2相比,ext3提供了更佳的安全性,這就是數(shù)據(jù)日志和元數(shù)據(jù)日志之間的不同。ext3是一種日志式文件系統(tǒng),日志式文件系統(tǒng)的優(yōu)越性在于由于文件系統(tǒng)都有快取層參與運(yùn)作,如不使用時(shí)必須將文件系統(tǒng)卸下,以便將快取層的資料寫(xiě)回磁盤(pán)中。因此,每當(dāng)系統(tǒng)要關(guān)機(jī)時(shí),必須將其所有的文件系統(tǒng)全部卸下后才能進(jìn)行關(guān)機(jī)。如果在文件系統(tǒng)尚未卸下前就關(guān)機(jī) (如停電),那么重開(kāi)機(jī)后就會(huì)造成文件系統(tǒng)的資料不一致,故這時(shí)必須做文件系統(tǒng)的重整工作,將不一致與錯(cuò)誤的地方修復(fù)。然而,這個(gè)過(guò)程是相當(dāng)耗時(shí)的,特別是容量大的文件系統(tǒng)不能百分之百保證所有的資料都不會(huì)流失,特別在大型的服務(wù)器上可能會(huì)出現(xiàn)問(wèn)題。除了與ext2兼容之外,ext3還通過(guò)共享ext2的元數(shù)據(jù)格式繼承了ext2的其它優(yōu)點(diǎn)。比如,ext3用戶(hù)可以使用一個(gè)穩(wěn)固的fsck工具。由于ext3基于ext2的代碼,所以它的磁盤(pán)格式和ext2的相同,這意味著一個(gè)干凈卸裝的ext3文件系統(tǒng)可以作為ext2文件系統(tǒng)毫無(wú)問(wèn)題地重新掛裝。如果現(xiàn)在使用的是ext2文件系統(tǒng),并且對(duì)數(shù)據(jù)安全性要求很高,這里建議考慮升級(jí)使用ext3。
ext3最大的缺點(diǎn)是,它沒(méi)有現(xiàn)代文件系統(tǒng)所具有的、能提高文件數(shù)據(jù)處理速度和解壓的高性能。此外,使用ext3文件系統(tǒng)要注意硬盤(pán)限額問(wèn)題,在這個(gè)問(wèn)題解決之前,不推薦在重要的企業(yè)應(yīng)用上采用ext3+Disk Quota(磁盤(pán)配額)。
JFS
JFS是一種提供日志的字節(jié)級(jí)文件系統(tǒng)。該文件系統(tǒng)主要是為滿(mǎn)足服務(wù)器(從單處理器系統(tǒng)到高級(jí)多處理器和群集系統(tǒng))的高吞吐量和可靠性需求而設(shè)計(jì)、開(kāi)發(fā)的。JFS文件系統(tǒng)是為面向事務(wù)的高性能系統(tǒng)而開(kāi)發(fā)的。在IBM的AIX系統(tǒng)上,JFS已經(jīng)過(guò)較長(zhǎng)時(shí)間的測(cè)試,結(jié)果表明它是可靠、快速和容易使用的。2000年2月,IBM宣布在一個(gè)開(kāi)放資源許可證下移植Linux版本的JFS文件系統(tǒng)。JFS也是一個(gè)有大量用戶(hù)安裝使用的企業(yè)級(jí)文件系統(tǒng),具有可伸縮性和健壯性。與非日志文件系統(tǒng)相比,它的突出優(yōu)點(diǎn)是快速重啟能力,JFS能夠在幾秒或幾分鐘內(nèi)就把文件系統(tǒng)恢復(fù)到一致?tīng)顟B(tài)。雖然JFS主要是為滿(mǎn)足服務(wù)器(從單處理器系統(tǒng)到高級(jí)多處理器和群集系統(tǒng))的高吞吐量和可靠性需求而設(shè)計(jì)的,但還可以用于想得到高性能和可靠性的客戶(hù)機(jī)配置,因?yàn)樵?strong style="color: rgb(0, 0, 0); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 204, 153); background-position: initial initial; background-repeat: initial initial; ">系統(tǒng)崩潰時(shí)JFS能提供快速文件系統(tǒng)重啟時(shí)間,所以它是因特網(wǎng)文件服務(wù)器的關(guān)鍵技術(shù)。使用數(shù)據(jù)庫(kù)日志處理技術(shù),JFS能在幾秒或幾分鐘之內(nèi)把文件系統(tǒng)恢復(fù)到一致?tīng)顟B(tài)。而在非日志文件系統(tǒng)中,文件恢復(fù)可能花費(fèi)幾小時(shí)或幾天。
JFS的缺點(diǎn)是,使用JFS日志文件系統(tǒng)性能上會(huì)有一定損失,系統(tǒng)資源占用的比率也偏高,因?yàn)楫?dāng)它保存一個(gè)日志時(shí),系統(tǒng)需要寫(xiě)許多數(shù)據(jù)。
ReiserFS
ReiserFS的第一次公開(kāi)亮相是在1997年7月23日,Hans Reiser把他的基于平衡樹(shù)結(jié)構(gòu)的ReiserFS文件系統(tǒng)在網(wǎng)上公布。ReiserFS 3.6.x(作為L(zhǎng)inux 2.4一部分的版本)是由Hans Reiser和他的Namesys開(kāi)發(fā)組共同開(kāi)發(fā)設(shè)計(jì)的。SuSE Linux也對(duì)它的發(fā)展起了重大的幫助。Hans和他的組員們相信最好的文件系統(tǒng)是能夠有助于創(chuàng)建獨(dú)立的共享環(huán)境或命名空間的文件系統(tǒng),應(yīng)用程序可以在其中更直接、有效和有力地相互作用。為了實(shí)現(xiàn)這一目標(biāo),文件系統(tǒng)就應(yīng)該滿(mǎn)足使用者對(duì)性能和功能方面的需要。那樣使用者就能夠繼續(xù)直接地使用文件系統(tǒng),而不必建造運(yùn)行在文件系統(tǒng)之上(如數(shù)據(jù)庫(kù)之類(lèi))的特殊目的層。ReiserFS 使用了特殊的、優(yōu)化的平衡樹(shù)(每個(gè)文件系統(tǒng)一個(gè))來(lái)組織所有的文件系統(tǒng)數(shù)據(jù),這為其自身提供了非常不錯(cuò)的性能改進(jìn),也能夠減輕文件系統(tǒng)設(shè)計(jì)上的人為約束。另一個(gè)使用平衡樹(shù)的好處就是,ReiserFS 能夠像其它大多數(shù)的下一代文件系統(tǒng)一樣,根據(jù)需要?jiǎng)討B(tài)地分配索引節(jié),而不必在文件系統(tǒng)創(chuàng)建時(shí)建立固定的索引節(jié)。這有助于文件系統(tǒng)更靈活地適應(yīng)面臨的各種存儲(chǔ)需要,同時(shí)提供附加的空間有效率。
ReiserFS被看作是一個(gè)更加激進(jìn)和現(xiàn)代的
文件系統(tǒng)。傳統(tǒng)的Unix
文件系統(tǒng)是按磁盤(pán)塊來(lái)進(jìn)行空間分配的,對(duì)于目錄和
文件等的查找使用了簡(jiǎn)單的線(xiàn)性查找。這些設(shè)計(jì)在當(dāng)時(shí)是合適的,但隨著磁盤(pán)容量的增大和應(yīng)用需求的增加,傳統(tǒng)
文件系統(tǒng)在存儲(chǔ)效率、速度和功能上已顯得落后。在ReiserFS的下一個(gè)版本—Reiser 4,將提供了對(duì)事務(wù)的支持。ReiserFS突出的地方還在于其設(shè)計(jì)上著眼于實(shí)現(xiàn)一些未來(lái)的插件程序,這些插件程序可以提供訪問(wèn)控制列表、超級(jí)鏈接,以及一些其它非常不錯(cuò)的功能。在
http://www.namesys.com/v4/v4.html中,有Reiser 4的介紹和性能測(cè)試。
ReiserFS一個(gè)最受批評(píng)的缺點(diǎn)是,每升級(jí)一個(gè)版本都將要將磁盤(pán)重新
格式化一次,而且它的安全性能和穩(wěn)定性與ext3相比有一定的差距。因?yàn)镽eiserFS
文件系統(tǒng)還不能正確處理超長(zhǎng)的
文件目錄,如果創(chuàng)建一個(gè)超過(guò)768字符的
文件目錄,并使用ls或其它echo命令,將有可能導(dǎo)致
系統(tǒng)掛起。在
http://www.namesys.com/ 網(wǎng)站可以了解關(guān)于ReiserFS的更多信息。
XFS
XFS是一種非常優(yōu)秀的日志文件系統(tǒng),它是由SGI于20世紀(jì)90年代初開(kāi)發(fā)的。XFS推出后被業(yè)界稱(chēng)為先進(jìn)的、最具可升級(jí)性的文件系統(tǒng)技術(shù)。它是一個(gè)全64位、快速、穩(wěn)固的日志文件系統(tǒng),多年用于SGI的IRIX操作系統(tǒng)。當(dāng)SGI決定支持Linux社區(qū)時(shí),它將關(guān)鍵的基本架構(gòu)技術(shù)授權(quán)于Linux,以開(kāi)放資源形式發(fā)布了他們自己擁有的XFS的源代碼,并開(kāi)始進(jìn)行移植。此項(xiàng)工作進(jìn)展得很快,目前已進(jìn)入beta版階段。作為一個(gè)64位文件系統(tǒng),XFS可以支持超大數(shù)量的文件(9000×1GB),可在大型2D和3D數(shù)據(jù)方面提供顯著的性能。XFS有能力預(yù)測(cè)其它文件系統(tǒng)薄弱環(huán)節(jié),同時(shí)提供了在不妨礙性能的情況下增強(qiáng)可靠性和快速的事故恢復(fù)。
XFS可為L(zhǎng)inux和開(kāi)放資源社區(qū)帶來(lái)如下新特性:
* 可升級(jí)性 XFS被設(shè)計(jì)成可升級(jí),以面對(duì)大多數(shù)的存儲(chǔ)容量和I/O存儲(chǔ)需求;可處理大型文件和包含巨大數(shù)量文件的大型目錄,以滿(mǎn)足21世紀(jì)快速增長(zhǎng)的磁盤(pán)需求。XFS有能力動(dòng)態(tài)地為文件分配索引空間,使系統(tǒng)形成高效支持大數(shù)量文件的能力。在它的支持下,用戶(hù)可使用的文件遠(yuǎn)遠(yuǎn)大于現(xiàn)在最大的文件系統(tǒng)。
* 優(yōu)秀的I/O 性能 典型的現(xiàn)代服務(wù)器使用大型的條帶式磁盤(pán)陣列,以提供達(dá)數(shù)GB/秒的總帶寬。XFS可以很好地滿(mǎn)足I/O請(qǐng)求的大小和并發(fā)I/O請(qǐng)求的數(shù)量。XFS可作為root文件系統(tǒng),并被LILO支持,也可以在NFS服務(wù)器上使用,并支持軟件磁盤(pán)陣列(RAID)和邏輯卷管理器(Logical Volume Manager,LVM)。
由于XFS比較復(fù)雜,實(shí)施起來(lái)有一些難度(包括人員培訓(xùn)等),所以目前XFS主要應(yīng)用于Linux企業(yè)應(yīng)用的高端。
其它文件系統(tǒng)
上面介紹了六種主要文件系統(tǒng),下面簡(jiǎn)單介紹一些其它文件系統(tǒng)。
* Minix 是Linux支持的第一個(gè)文件系統(tǒng),對(duì)用戶(hù)有很多限制,性能低下,有些沒(méi)有時(shí)間標(biāo)記,文件名最長(zhǎng)l4個(gè)字符。Minix文件系統(tǒng)最大缺點(diǎn)是只能使用64MB的硬盤(pán)分區(qū),所以目前已經(jīng)沒(méi)有人使用它了。
* Xia 是Minix文件系統(tǒng)修正后的版本,在一定程度上解決了文件名和文件系統(tǒng)大小的局限。但是沒(méi)有新的特色,目前很少有人使用。
* ISO9660 標(biāo)準(zhǔn)CDROM文件系統(tǒng),通用的Rock Ridge增強(qiáng)系統(tǒng),允許長(zhǎng)文件名。
* NFS Sun公司推出的網(wǎng)絡(luò)文件系統(tǒng),允許多臺(tái)計(jì)算機(jī)之間共享同一文件系統(tǒng),易于從所有這些計(jì)算機(jī)上存取文件。
* SysV 是System V/Coherent在Linux平臺(tái)上的文件系統(tǒng)。
除了上面這些Linux文件系統(tǒng)外,Linux也可以支持基于Windows和Netware的文件系統(tǒng),例如UMSDOS、MSDOS、VFAT、HPFS、SMB和NCPFS等。兼容這些文件系統(tǒng)對(duì)Linux用戶(hù)也是很重要的,畢竟在桌面環(huán)境下Windows文件系統(tǒng)還是很流行的,而Netware網(wǎng)絡(luò)也有許多用戶(hù),Linux用戶(hù)也需要共享這些文件系統(tǒng)的數(shù)據(jù)。
* UMSDOS Linux下的擴(kuò)展MSDOS文件系統(tǒng)驅(qū)動(dòng),支持長(zhǎng)文件名、所有者、允許權(quán)限、連接和設(shè)備文件。允許一個(gè)普通的MSDOS文件系統(tǒng)用于Linux,而且無(wú)須為它建立單獨(dú)的分區(qū)。
* MSDOS 是在DOS、Windows和某些OS/2操作系統(tǒng)上使用的一種文件系統(tǒng),其名稱(chēng)采用“8+3”的形式,即8個(gè)字符的文件名加上3個(gè)字符的擴(kuò)展名。
* VFAT 是Windows 9x和Windows NT/2000下使用的一種DOS文件系統(tǒng),其在DOS文件系統(tǒng)的基礎(chǔ)上增加了對(duì)長(zhǎng)文件名的支持。
* HPFS 高性能文件系統(tǒng)(High Performance File System,HPFS)是微軟的LAN Manager中的文件系統(tǒng),同時(shí)也是IBM的LAN Server和OS/2的文件系統(tǒng)。HPFS能訪問(wèn)較大的硬盤(pán)驅(qū)動(dòng)器,提供了更多的組織特性,并改善了文件系統(tǒng)的安全特性。
* SMB 是一種支持Windows for Workgroups、Windows NT和Lan Manager的基于SMB協(xié)議的網(wǎng)絡(luò)操作系統(tǒng)。
* NCPFS 是一種Novell NetWare使用的NCP協(xié)議的網(wǎng)絡(luò)操作系統(tǒng)。
* NTFS 是Windows NT/2000操作系統(tǒng)支持的、一個(gè)特別為網(wǎng)絡(luò)和磁盤(pán)配額、文件加密等管理安全特性設(shè)計(jì)的磁盤(pán)格式。
下面介紹些關(guān)于嵌入式 Linux 系統(tǒng)方面的文件格式。
* JFFS/JFFS2 文件系統(tǒng)
JFFS文件系統(tǒng)是瑞典Axis Communications AB為嵌入式系統(tǒng)開(kāi)發(fā)的日志文件系統(tǒng)。
JFFS1應(yīng)用在Linux2.2以上版木中,JFFS2在Linux2.4內(nèi)核和Ecos中。Linux的實(shí)現(xiàn)中,JFFS必須建立在MTD驅(qū)動(dòng)程序的上層。這里MTD的作用是為JFFS提供操作NAND或者NOR芯片的接口。
文件系統(tǒng)層次圖
JFFS是針對(duì)以閃存為存儲(chǔ)介質(zhì)的嵌入式系統(tǒng),所以充分考慮了閃存的物理局限性,使用了盡可能高效的日志系統(tǒng)。和TrueFFS以及其他中間層驅(qū)動(dòng)相比,JFFS是專(zhuān)門(mén)針對(duì)閃存的文件系統(tǒng),這個(gè)文件系統(tǒng)除了有日志功能,還包含了TrueFFS中的負(fù)載平衡、垃圾收集等功能。另外一個(gè)重要特點(diǎn)是這個(gè)文件系統(tǒng)是源代碼公開(kāi)的,方便了學(xué)習(xí)和使用。此外使用了日志系統(tǒng),使文件系統(tǒng)更加可靠。
* YAFFS (Yet Another Flash File System),是一種類(lèi)似于JFFS/JFFS2的專(zhuān)門(mén)為Flash設(shè)計(jì)的嵌入式文件系統(tǒng)。與JFFS相比,它減少了一些功能,因此速度更快、占用內(nèi)存更少。
YAFFS和JFFS都提供了寫(xiě)均衡,垃圾收集等底層操作。它們的不同之處在于:
(1)、JFFS是一種日志文件系統(tǒng),通過(guò)日志機(jī)制保證文件系統(tǒng)的穩(wěn)定性。YAFFS僅僅借鑒了日志系統(tǒng)的思想,不提供日志機(jī)能,所以穩(wěn)定性不如JFFS,但是資源占用少。
(2)、JFFS中使用多級(jí)鏈表管理需要回收的臟塊,并且使用系統(tǒng)生成偽隨機(jī)變量決定要回收的塊,通過(guò)這種方法能提供較好的寫(xiě)均衡,在YAFFS中是從頭到尾對(duì)塊搜索,所以在垃圾收集上JFFS的速度慢,但是能延長(zhǎng)NAND的壽命。
(3)、JFFS支持文件壓縮,適合存儲(chǔ)容量較小的系統(tǒng);YAFFS不支持壓縮,更適合存儲(chǔ)容量大的系統(tǒng)。
YAFFS還帶有NAND芯片驅(qū)動(dòng),并為嵌入式系統(tǒng)提供了直接訪問(wèn)文件系統(tǒng)的API,用戶(hù)可以不使用Linux中的MTD和VFS,直接對(duì)文件進(jìn)行操作。NAND Flash大多采用MTD+YAFFS的模式。MTD( Memory Technology Devices,內(nèi)存技術(shù)設(shè)備)是對(duì)Flash操作的接口,提供了一系列的標(biāo)準(zhǔn)函數(shù),將硬件驅(qū)動(dòng)設(shè)計(jì)和系統(tǒng)程序設(shè)計(jì)分開(kāi)。
* cramfs 在嵌入式的環(huán)境之下,內(nèi)存和外存資源都需要節(jié)約使用。如果使用RAMDISK方式來(lái)使用文件系統(tǒng),那么在系統(tǒng)運(yùn)行之后,首先要把外存(Flash)上的映像文件解壓縮到內(nèi)存中,構(gòu)造起RAMDISK環(huán)境,才可以開(kāi)始運(yùn)行程序。但是它也有很致命的弱點(diǎn)。在正常情況下,同樣的代碼不僅在外存中占據(jù)了空間(以壓縮后的形式存在),而且還在內(nèi)存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環(huán)境下盡量節(jié)省資源的要求。
使用 cramfs 就是一種解決這個(gè)問(wèn)題的方式。cramfs是一個(gè)壓縮式的文件系統(tǒng),它并不需要一次性地將文件系統(tǒng)中的所有內(nèi)容都解壓縮到內(nèi)存之中,而只是在系統(tǒng)需要訪問(wèn)某個(gè)位置的數(shù)據(jù)的時(shí)侯,馬上計(jì)算出該數(shù)據(jù)在cramfs中的位置,將其實(shí)時(shí)地解壓縮到內(nèi)存之中,然后通過(guò)對(duì)內(nèi)存的訪問(wèn)來(lái)獲取文件系統(tǒng)中需要讀取的數(shù)據(jù)。cramfs中的解壓縮以及解壓縮之后的內(nèi)存中數(shù)據(jù)存放位置都是由cramfs文件系統(tǒng)本身進(jìn)行維護(hù)的,用戶(hù)并不需要了解具體的實(shí)現(xiàn)過(guò)程,因此這種方式增強(qiáng)了透明度,對(duì)開(kāi)發(fā)人員來(lái)說(shuō),既方便,又節(jié)省了存儲(chǔ)空間。
cramfs擁有以下一些特性:
采用實(shí)時(shí)解壓縮方式,但解壓縮的時(shí)侯有延遲。
cramfs的數(shù)據(jù)都是經(jīng)過(guò)處理、打包的,對(duì)其進(jìn)行寫(xiě)操作有一定困難。所以cramfs不支持寫(xiě)操作,這個(gè)特性剛好適合嵌入式應(yīng)用中使用Flash存儲(chǔ)文件系統(tǒng)的場(chǎng)合。
在cramfs中,文件最大不能超過(guò)16MB。
支持組標(biāo)識(shí)(gid),但是mkcramfs只將gid的低8位保存下來(lái),因此只有這8位是有效的。
支持硬鏈接。但是cramfs并沒(méi)有完全處理好,硬鏈接的文件屬性中,鏈接數(shù)仍然為1.
cramfs的目錄中,沒(méi)有“.”和“..”這兩項(xiàng)。因此,cramfs中的目錄的鏈接數(shù)通常也僅有一個(gè)。
cramfs中,不會(huì)保存文件的時(shí)間戳(timestamps)信息。當(dāng)然,正在使用的文件由于inode保存在內(nèi)存中,因此其時(shí)間可以暫時(shí)地變更為最新時(shí)間,但是不會(huì)保存到cramfs文件系統(tǒng)中去。
當(dāng)前版本的cramfs只支持PAGE_CACHE_SIZE為4096的內(nèi)核。因此,如果發(fā)現(xiàn)cramfs不能正常讀寫(xiě)的時(shí)侯,可以檢查一下內(nèi)核的參數(shù)設(shè)置。
察看Linux文件類(lèi)型
不同版本的Linux所支持的文件系統(tǒng)類(lèi)型和種類(lèi)都有所不同,如何知道自己使用的Linux發(fā)行版的文件系統(tǒng)類(lèi)型呢?下面以筆者使用的Mandrake Linux 8.2為例,講解如何操作。
以超級(jí)用戶(hù)權(quán)限登陸Linux,進(jìn)入/Lib/modules/2.4.18-6mdk/kernel/fs目錄,執(zhí)行下面命令:#ls
注意,不同Linux發(fā)行版本的fs目錄的位置可能有些不同。/Lib/modules/2.4.18-6mdk/kernel/fs中會(huì)顯示當(dāng)前系統(tǒng)所支持的文件系統(tǒng)種類(lèi)。
Mandrake Linux 8.2支持的文件系統(tǒng)非常多,系統(tǒng)核心支持十多種文件系統(tǒng)類(lèi)型:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
文件系統(tǒng)是操作系統(tǒng)用于明確磁盤(pán)或分區(qū)上文件的方法和數(shù)據(jù)結(jié)構(gòu),即在磁盤(pán)上組織文件的方法。文件系統(tǒng)是整個(gè)操作系統(tǒng)中重要的組成部分,是操作系統(tǒng)正常運(yùn)行的基本條件。了解Linux文件系統(tǒng)對(duì)于深入學(xué)習(xí)、研究Linux是非常重要的。
from:
posted on 2010-01-26 15:34
chatler 閱讀(476)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
storage 、
FileSystem