**:
很長一段時間以來,ext3是很多linux發行版預設的檔案系統,現在ext4已經發布,並且已經有發行版開始使用ext4作為預設的檔案系統了(其實最初的時候ext4是作為ext3的擴充套件,但是為了保證ext3的穩定性等原因,很多人反對直接對ext3進行擴充套件,所以單獨作為了ext4專案)。
ext3還是使用15個inode來查詢資料塊,前12個為直接資料塊,直接指向儲存資料的資料塊,接下來分別為一級間接塊,二級間接塊,**間接塊,如下圖:
其中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 ;
這樣查詢資料塊的時候就不是每個塊建立乙個索引,而且使用連續的資料塊,也就是分別指示起始位置,以及連續的塊數,這樣在大檔案的時候,磁碟io效率以及查詢資料塊效率上都有很大的提高,所以ext4的檔案系統也比ext3出色。因為使用了48位的索引空間,所以在4kb塊大小的情況下,檔案系統的極限是2^48 * 4kb = 1eb,不過,目前由於工具的限制,只能使用16tb的分割槽。
ext3與ext4的主要區別
linux kernel自2.6.28開始正式支援新的檔案系統 ext4。 ext4是ext3的改進版,修改了ext3中部分重要的資料結構,而不僅僅像ext3對ext2那樣,只是增加了乙個日誌功能而已。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個資料塊中」,提高了不少效率。
5.多塊分配。當 寫入資料到 ext3 檔案系統中時,ext3 的資料塊分配器每次只能分配乙個 4kb 的塊,寫乙個 100mb 檔案就要呼叫 25,600 次資料塊分配器,而 ext4 的多塊分配器「multiblock allocator」(mballoc) 支援一次呼叫分配多個資料塊。
6.延遲分配。ext3的資料塊分配策略是盡快分配,而 ext4 和其它現代檔案作業系統的策略是盡可能地延遲分配,直到檔案在 cache 中寫完才開始分配資料塊並寫入磁碟,這樣就能優化整個檔案的資料塊分配,與前兩種特性搭配起來可以顯著提公升效能。
7.快速 fsck。以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 ext4 給每個組的 inode 表中都新增了乙份未使用 inode 的列表,今後 fsck ext4 檔案系統就可以跳過它們而只去檢查那些在用的 inode 了。
8.日誌校驗。日誌是最常用的部分,也極易導致磁碟硬體故障,而從損壞的日誌中恢復資料會導致更多的資料損壞。ext4的日誌校驗功能可以很方便地判斷日誌資料是否損壞,而且它將 ext3 的兩階段日誌機制合併成乙個階段,在增加安全性的同時提高了效能。
9.「無日誌」(no journaling)模式。日誌總歸有一些開銷,ext4允許關閉日誌,以便某些有特殊需求的使用者可以藉此提公升效能。
11.inode 相關特性。ext4支援更大的inode,較之ext3預設的inode大小128位元組,ext4為了在 inode 中容納更多的擴充套件屬性(如納秒時間戳或inode版本),預設inode大小為256位元組。ext4 還支援快速擴充套件屬性(fast extended attributes)和inode保留(inodes reservation)。
13.預設啟用 barrier。磁碟上配有內部快取,以便重新調整批量資料的寫操作順序,優化寫入效能,因此檔案系統必須在日誌資料寫入磁碟之後才能寫commit記錄,若commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響資料完整性。ext4預設啟用barrier,只有當barrier之前的資料全部寫入磁碟,才能寫barrier之後的資料。(可通過「mount -o barrier=0″命令禁用該特性。)
Linux檔案系統ext3與ext4主要區別手記
ext3還是使用15個inode來查詢資料塊,前12個為直接資料塊,直接指向儲存資料的資料塊,接下來分別為一級間接塊,二級間接塊,間接塊,如下圖 其中point本來也是資料塊,現在拿來做資料塊的索引用,其中ext3的標頭檔案定義為 u32 i block ext3 n blocks pointers...
ext2 ext3與ext4的區別
ext2與ext3 linux ext2 ext3檔案系統使用索引節點來記錄檔案資訊,作用像windows的檔案分配表。索引節點是乙個結構,它包含了乙個檔案的長度 建立及修改時間 許可權 所屬關係 磁碟中的位置等資訊。乙個檔案系統維護了乙個索引節點的陣列,每個檔案或目錄都與索引節點陣列中的唯一乙個元...
如何從ext3公升級到ext4?
首先,我們需要保證系統支援ext4,一般來說,核心版本在2.6.28及以上的版本才支援ext4 其次,如果 boot分割槽目前是ext3,那麼最好保留,因為現在系統上的 grub 很可能不支援 ext4,需要有個commit 的特別版本grub 才能支援 ext4 最後,我們使用以下命令即可將ext...