ext4檔案系統是從ext2/ext3檔案系統上繼承和發展而來的,ext4也使用ext2/ext3的一些元資料的概念,如超級塊,塊組描述符,塊組位圖,節點位圖,節點資料,在ext2/ext3中還有間接資料塊,ext4的節點如果不用content結構的話,也應該有間接資料塊的概念,因為ext4在某些情況下會與ext3檔案系統相容。
在ext2/ext3/ext4檔案系統中乙個塊組最大為128m,塊組描述符在ext2/ext3中為32個位元組,在ext4中為64個位元組;下面就專門討論ext4的情況。在ext4中,支援的最大塊組數為2^21 個,是這樣計算出來的,塊組數最多時其塊組描述符占用滿乙個塊組,乙個塊組大小為128m, 即塊組數為128m/64= 2^27/2^6= 2^21;所以支援的最大空間數為2^21x128m= 2^21x2^27=2^48=256t,即為檔案系統磁碟的最大空間。
為了突破256t空間的限制,引入了meta_block_group的方法;在該方法中將多個塊組組成乙個meta_block_group。那個數為多少呢?組成的方法如下,在meta_block_group中拿出乙個資料塊來儲存塊組描述符,資料塊大小假設現在的大小是4k,塊組描述符就描述本meta_block_group中的塊組,那乙個meta_block_group中的塊組個數可以是4k/64=2^12/2^6=2^6=64,即為64個塊組。這樣,塊組數就不受空間大小的限制了,空間不夠只要在最後加上去就可以了;因此,磁碟定址的時候,48個bit的位址空間(兩個32bit的位址組合起來,可以是64bit,但是現在只支援到48bit)就都可以利用起來,磁碟空間塊大小為4k的話,總的定址空間就可以有2^48x4k= 2^48x2^12=2^60=1eb,所以這是ext4檔案系統的最大的空間。
在生成ext4檔案系統時可以加入特性flex_bg引數,生成的檔案系統就支援flexibleblock group的特性。原來每個塊組中都有描述該塊組內部的資料塊點陣圖,節點位圖,節點表;引入該特性後,每個塊組中這些資料就被移動到第乙個塊組中去了,後面的塊組就沒有資料塊點陣圖,節點位圖,節點表了,就剩下資料塊了,不過偶爾會插入塊組描述符和備份的超級塊了,他們會在塊組的開頭。這樣就使資料塊部分緊密的聯絡在一起,保證大檔案儲存的高效性。
乙個flexible blockgroup中塊組的個數,是由超級塊中該變數定義的s_log_groups_per_flex,個數為2^s_log_groups_per_flex。現在假設取4,那麼2^4=16,即乙個flexibleblock group中有16個塊組,那麼其結構如下:
a:super block超級塊
b:block group des 磁碟上所有塊組的塊描述符
c:data block bitmap 塊組0-15的所有資料塊的使用位圖
d:inode bitmap 塊組0-15的所有節點表的使用位圖
e:inode table 塊組0-15的的所有節點表
f:block data 塊組0-15的資料塊。
a,b,c,d,e的位置是在塊組0上的,而f資料塊是塊組0中剩下的部分和塊組1到塊組15,在塊組1-塊組15的開頭有時有超級塊的備份或者塊組描述符的備份,餘下全部為資料塊。
在生成ext4檔案系統的時候,如果使用了特性meta_bg,則檔案系統就支援meta block group的格式。如上文計算,如果磁碟塊大小為4k,乙個meta block group支援的塊組數值為64個塊組,具體結構如下:
附:sb 超級塊
gdt屬於本meta block group的塊組描述符
bb 該塊組的資料塊點陣圖
ib 該塊組的節點位圖
it 該塊組的節點表
data blocks該塊組的資料塊
值得指出的是在塊組0到塊組63組成的乙個meta block group中,只有三個塊組中儲存了屬於本meta block group的塊組描述符,儲存的位置在塊組0,塊組1和塊組63,也在上表的表現出來了。
在生成ext4檔案系統的時候,使用的特性結合了meta_bg和flexible_bg,那麼磁碟的布局與單個引數的情況有點不一樣了。假設磁碟塊大小為4k,s_log_groups_per_flex為4,那麼如上文分析的,flexible block group為16個塊組乙個單位,meta block group為64個塊組為乙個單位,兩者結合的結構如下:
如上圖所示,在乙個metablock group中,共有64個塊組,裡面又細分為4個flexible block group,每個flexible block group又包含16個塊組,得16x4共64個塊組。
對於總的64個塊組中,其儲存了metablock group的特性,塊組0包含超級塊,本group的塊組描述符,bb, ib, it;塊組1同樣包含超級塊,本group的塊組描述符;塊組63,包含本group的塊組描述符。
對於細分的4個flexibleblock group,第乙個flex_bg,塊組0到塊組15;第二個flex_bg,塊組16到塊組31;第三個flex_bg,塊組32到塊組47;最後乙個flex_bg,塊組48到塊組63;對於具體的每個小組,以第乙個flex_bg為例,塊組0的bb是塊組0-15的資料塊點陣圖,ib是塊組0-15的節點位圖,it是塊組0-15的節點表,以下皆為資料塊。
在生成ext4檔案系統中,如果使用了特性uninit_bg,有的塊組就不會被初始化,磁碟格式化的速度會加快。四中的flexible block group結合meta block group的情況,假設塊組1沒被初始化,但是sb和gdt會寫入塊組1,後面的資料沒被初始化,該塊組也不會被加入到flexible block group中去,放入flexible block group的塊組會跳過未初始化的塊組1,選擇下個塊組,比如初始化的塊組2,以下類推,未初始化的跳過。
如果使用了sparse_super引數,備份的超級塊會出現在3,5,7為冪的塊組中,其他塊組中不會出現。
ext4檔案系統布局設計
block group的大小是不固定的,主要是最後乙個group可能會小一點,因為總大小不一定是正常block group大小的倍數,餘數就是最後乙個block group的大小。乙個inode對應乙個file,inode中的i block欄位記錄file中的內容與硬碟中的位址對應關係。擴充套件之後...
ext4檔案系統綜述
從本篇部落格起,我們開始研究現代檔案系統ext4,說其現代是因為其相比傳統檔案系統,有著更現代化的設計。這些先進的特性體現在本文所要敘述的以下方面。ext4是linux檔案系統的一次革命。在很多方面,ext4相對於ext3的進步要遠超過ext3相對於ext2的進步。ext3相對於 ext2的改進主要...
剖析ext4檔案系統
簡介 第 4 個擴充套件檔案系統,即 ext4 是下一代的日誌檔案系統,它與上一代檔案系統 ext3 是向後相容的。儘管 ext4 目前還不是標準檔案系統,但它將成為大部分下一代 linux 發行版的預設檔案系統。了解 ext4,以及它為什麼將成為您最喜歡的新檔案系統。linux 核心的每次發行都伴...