必威电竞|足球世界杯竞猜平台

ext
來源:互聯(lián)網(wǎng)

EXT是延伸文件系統(tǒng)(英語:Extended file system,縮寫為 ext或 ext1),也譯為擴(kuò)展文件系統(tǒng),一種文件系統(tǒng),于1992年4月發(fā)表,是為Linux核心所做的第一個(gè)文件系統(tǒng)。采用Unix文件系統(tǒng)(UFS)的元數(shù)據(jù)結(jié)構(gòu),以克服MINIX文件系統(tǒng)性能不佳的問題。它是在linux上,第一個(gè)利用虛擬文件系統(tǒng)實(shí)現(xiàn)出的文件系統(tǒng),在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系統(tǒng)主要包括三個(gè)大的文件:ext-all層疊樣式表,ext-base.js,ext-all.js(包括所有的類庫,您可以根據(jù)需要進(jìn)行刪減。官方網(wǎng)站提供這一接口),在引用ext類庫的時(shí)候,這三個(gè)文件必不可少。它提供了豐富的,非常漂亮的外觀體驗(yàn),成為眾多界面層開發(fā)人員的追捧!其核心的組件基本覆蓋了我們構(gòu)建client的常用的組件。從 Ext 2開始,商業(yè)版(針對(duì)那些以盈利為目的的開發(fā)方)要收費(fèi)了。這可能會(huì)影響一些他的應(yīng)用前景。目前的最新版本為5.0,于2014年6月22日發(fā)布。

系統(tǒng)分區(qū)

它是專門為Linux設(shè)計(jì)的,擁有最快的速度和最小的CPU占用率。

Linux作為自由軟件,贏得了許多用戶,其磁盤分區(qū)格式一種是Linux Native主分區(qū),另一種是Linux Swap交換分區(qū),并且主分區(qū)和交換分區(qū)都采用同一種格式,既Native和Swap格式。

這兩種分區(qū)格式的安全和穩(wěn)定性相當(dāng)好,使用Linux操作系統(tǒng)死機(jī)的機(jī)會(huì)將大大減少。但是,目前支持這類分區(qū)格式的操作系統(tǒng)也有LinuxAndroid

EXT的數(shù)據(jù)存儲(chǔ)

雖然從Ext2ext4,找數(shù)據(jù)的方式發(fā)生了變化,但是,磁盤的布局還是非常相似的。其實(shí)這個(gè)東西也不需要變化,因?yàn)楝F(xiàn)在也沒什么特別巧妙的方式,而且磁盤的吞吐量、效率的瓶頸也不在這里。當(dāng)然,這里排除那些根據(jù)自身文件特點(diǎn)設(shè)計(jì)的數(shù)據(jù)庫,畢竟還是為了支持通用文件。

Boot在第一個(gè)塊,放的應(yīng)該是引導(dǎo)程序,超級(jí)塊就放在了第二個(gè)塊上,如果不是可以在mount的時(shí)候通過參數(shù)sb來設(shè)置。對(duì)于經(jīng)常要訪問(比較重要)的內(nèi)容可以在每個(gè)塊組中都存儲(chǔ)(當(dāng)然這是比較浪費(fèi)空間的,所有有的只選擇在部分),在不同的塊組中訪問這些內(nèi)容的時(shí)候磁頭移動(dòng)的距離就小了。如果開啟了sparse block功能,那么只會(huì)在3、5、7的冪級(jí)的塊組上才冗余這些信息

在超級(jí)塊里面保存了這個(gè)文件系統(tǒng)的統(tǒng)計(jì)信息等,而且從中可以看出這個(gè)文件系統(tǒng)的特點(diǎn)。在內(nèi)存中裝載的時(shí)候也從超級(jí)塊開始,知道了磁盤上的布局之后才能順利的進(jìn)行后面的操作,ext4_super_block的內(nèi)容大概如下:

(1)塊、inode等統(tǒng)計(jì)信息,訪問時(shí)間等。

(2)塊大小、以及每塊數(shù)目等布局信息。

(3)uid、gid。

(4)特性相關(guān)。

(5)預(yù)先分配相關(guān)。

(6)日志支持相關(guān)。

(7)64位的支持,其實(shí)保存了需要的高16位。

塊組中其實(shí)沒有保存什么有用的信息(例如超級(jí)塊),ext4_group_desc的存在就是為了把磁盤分成一個(gè)個(gè)的塊組。那分成塊組之后有什么好處呢?試想一下如果沒有塊組,那么是不是位圖這個(gè)關(guān)鍵的數(shù)據(jù)是不是要集中放到磁盤上的一個(gè)固定的位置?訪問當(dāng)然是沒有問題的,但是不管在磁盤上的什么地方訪問的時(shí)候都要跑到一個(gè)相同的地方去再訪問一次位圖,這樣的代價(jià)就比較大了。而且在分配的時(shí)候盡量把文件的數(shù)據(jù)塊放在同一個(gè)組,那么能在分配階段就一定程度地避免了碎片。下面是ext4_group_desc中大概的內(nèi)容(和Ext2中的不同的是對(duì)更大范圍的支持):

(1)塊組中塊位圖、inode位圖、inode表的位置

(2)空閑塊(inode)、目錄的數(shù)目

(3)校驗(yàn)

接下來就是塊位圖、inode位圖了。為什么需要inode位圖呢?因?yàn)閑xt4文件系統(tǒng)在要分配一個(gè)新的inode的時(shí)候并不是像在內(nèi)存中分配其他數(shù)據(jù)結(jié)構(gòu)的時(shí)候需要的時(shí)候分配數(shù)據(jù)結(jié)構(gòu)占用的空間,而是預(yù)先分配好一組放在位圖后面,就像一個(gè)inode池的感覺。那么在需要ext4_inode的時(shí)候就需要知道哪些是空閑的,哪些是用過的,這就是位圖的作用了。位圖具體就沒什么好介紹的了,下面看ext4_inode的內(nèi)容:

(1)mode、uid、gid等我們能看到的信息

(2)各種時(shí)間戳

(3)i_data用來找到數(shù)據(jù)塊

(4)file acl

EXT的數(shù)據(jù)查找

在對(duì)Ext文件系統(tǒng)還什么都不知道的時(shí)候應(yīng)該比較關(guān)心從路徑名到ino的過程。這個(gè)過程的大部分工作量應(yīng)該在VFS中吧,而且感覺沒什么特別的地方。現(xiàn)在查找數(shù)據(jù)對(duì)這部分的內(nèi)容就忽略不計(jì)了。我們關(guān)系的是,給定ino&offset,怎么樣知道在磁盤上的位置呢?在課本上學(xué)到的只是告訴我們這個(gè)地方應(yīng)該是用B樹的,但是從Ext2好像沒看的B樹的影子,反而看到了內(nèi)存管理中見過的東西:間接塊。

間接塊管理磁盤上文件的數(shù)據(jù)塊位置和內(nèi)存中分頁的效果有點(diǎn)像,當(dāng)然細(xì)節(jié)還是不同的。不過這個(gè)地方的壞處就很明顯了,如果是訪問大文件中的兩個(gè)順尋的物理塊,那么即使他們物理上也是相鄰的(如果內(nèi)存中沒有其緩存的話),也要從第一層的間接塊開始訪問,直到最后一層才知道真正的塊號(hào)。在內(nèi)存中分頁當(dāng)然是問題不大的,但是磁盤上這樣高出幾倍的訪問時(shí)間效率會(huì)很差。

日志

什么是日志以及日志的作用就不在這里說了。Ext3Ext2的管理數(shù)據(jù)塊的方式都是差不多的,不同之處是加上了記錄日志的功能,可以從Ext2平滑地過渡到Ext3。Ext3日志文件系統(tǒng)的思想就是對(duì)文件系統(tǒng)任何的高級(jí)操作都分兩步進(jìn)行,首先,把待寫入的塊的一個(gè)副本存放在日志中;其次,當(dāng)發(fā)往日志的I/O數(shù)據(jù)傳送完成時(shí),塊就寫入文件系統(tǒng)。當(dāng)發(fā)往文件系統(tǒng)的I/O數(shù)據(jù)傳送終止時(shí),日志的塊副本就被丟棄。

Ext3既可以只對(duì)元數(shù)據(jù)的修改做日志,也可以記錄所有的日志。有下面的三種日志模式:

(1)journal,把所有數(shù)據(jù)塊的改變都記入日志,最安全也最慢。

(2)ordered,只記錄元數(shù)據(jù)的改動(dòng),Ext3會(huì)把元數(shù)據(jù)和相關(guān)的數(shù)據(jù)塊進(jìn)行分組,以便把元數(shù)據(jù)寫入磁盤之前寫入數(shù)據(jù)塊。

(3)writeback,只記錄元數(shù)據(jù)改動(dòng),最快的一種模式。

參考資料 >

生活家百科家居網(wǎng)