歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux文件系統ext3與ext4主要區別手記

Linux文件系統ext3與ext4主要區別手記

日期:2017/2/28 15:54:23   编辑:Linux教程

很長一段時間以來,ext3是很多linux發行版默認的文件系統,現在ext4已經發布,並且已經有發行版開始使用ext4作為默認的文件系統了(其實最初的時候ext4是作為ext3的擴展,但是為了保證ext3的穩定性等原因,很多人反對直接對ext3進行擴展,所以單獨作為了ext4項目)。

ext3還是使用15個inode來查找數據塊,前12個為直接數據塊,直接指向存儲數據的數據塊,接下來分別為一級間接塊,二級間接塊,三級間接塊,如下圖:

650) this.width=650;" border=0>

其中point本來也是數據塊,現在拿來做數據塊的索引用,其中ext3的頭文件定義為:__u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */,所以可以計算ext3文件系統的極限:

最大分區:
因為定義的是無符號32位數,所以可能定位的block范圍為2^32,也就是4G,如果一個block大小為4KB,所以為4G * 4KB = 16TB

最大文件:

前面直接指向12個數據塊,一級間接塊最大為block size / 4,block size就是數據塊的大小,因為一個索引是4個字節,所以除以4,這樣計算下來,最大的文件可以使用的總塊數為:12 + (block size/4) + (block size/4)^2 + (block size/4)^3,如果block size大小為4K,則為(12 + 2^10 + 2^20 + 2^30) * 2^12 約等於4T。

為了突破ext3這個大小限制,ext4使用了48位的數據塊索引空間,同時使用了如下結構代替inode索引的方式:
struct ext3_extent {
__u32 ee_block; /* first logical block extent covers */
__u16 ee_len; /* number of blocks covered by extent */
__u16 ee_start_hi; /* high 16 bits of physical block */
__u32 ee_start; /* low 32 bigs of physical block */
};

這樣查找數據塊的時候就不是每個塊建立一個索引,而且使用連續的數據塊,也就是分別指示起始位置,以及連續的塊數,這樣在大文件的時候,磁盤io效率以及查找數據塊效率上都有很大的提高,所以ext4的文件系統也比ext3出色。因為使用了48位的索引空間,所以在4KB塊大小的情況下,文件系統的極限是2^48 * 4KB = 1EB,不過,目前由於工具的限制,只能使用16TB的分區。

EXT3與EXT4的主要區別

Linux kernel自2.6.28開始正式支持新的文件系統 Ext4。 Ext4是Ext3的改進版,修改了Ext3中部分重要的數據結構,而不僅僅像Ext3對Ext2那樣,只是增加了一個日志功能而已。Ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能:

1.與Ext3兼容。執行若干條命令,就能從Ext3在線遷移到Ext4,而無須重新格式化磁盤或重新安裝系統。原有Ext3數據結構照樣保留,Ext4作用於新數據,當然,整個文件系統因此也就獲得了Ext4所支持的更大容量。

2.更大的文件系統和更大的文件。較之Ext3目前所支持的最大16TB文件系統和最大2TB文件,Ext4分別支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系統,以及16TB 的文件。

3.無限數量的子目錄。Ext3目前只支持32,000個子目錄,而Ext4支持無限數量的子目錄。

4.Extents。Ext3采用間接塊映射,當操作大文件時,效率極其低下。比如一個 100MB 大小的文件,在Ext3中要建立25,600個數據塊(每個數據塊大小為 4KB)的映射表。而Ext4引入了現代文件系統中流行的extents概念,每個 extent 為一組連續的數據塊,上述文件則表示為“該文件數據保存在接下來的25,600個數據塊中”,提高了不少效率。

Copyright © Linux教程網 All Rights Reserved