ext4

Linux系統下的日誌檔案系統

第四代擴充套件檔案系統(英語:Fourth extended filesystem,縮寫為ext4)是Linux系統下的日誌檔案系統,是ext3檔案系統的後繼版本。

ext4
開發者Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh, others
全稱Fourth extended file system
發佈穩定版: 2008年10月21日
不穩定版: 2006年10月10日 (Linux 2.6.28, 2.6.19)
分區標識0x83(MBR
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(GPT
結構
目錄內容鏈結串列, hashed B-tree
檔案分配Extents/Bitmap
壞塊表格
限制
最大檔案尺寸16 TiB(for 4k block filesystem)
最大檔案數量40億(在檔案系統建立時指定)
最長檔名256位元組
最大卷容量1 EiB
檔案名字符集除NULL('\0')和 '/'外之所有字元(大小寫敏感)
功能
日期記錄修改(mtime),屬性修改(ctime),讀取(atime),刪除(dtime),建立(crtime)
日期範圍1901年12月14日 - 2514年4月25日
日期解像度納秒
岔流
屬性extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
檔案系統權限POSIX
透明壓縮
透明加密
單一實例儲存(SIS)
作業系統支援LinuxAndroidWindows(通過Ext2Fsd

歷史

ext4原始的開發目標是一系列的向下相容ext3、移除其64位元限制與提升其效能的延伸套件[1]。然而,某些Linux開發者因穩定性原因而拒絕將這些延伸套件應用在ext3上[2],並要求其作為ext3的分支,改名為ext4並另行開發,以免影響到目前的ext3用戶。該要求被接受以後,ext3維護者曹子德(Theodore Ts'o)在2006年6月28日公開了ext4的開發計劃[3]

在Linux核心2.6.19版中,首次匯入ext4的一個先期開發版本[4]。在2008年10月11日,ext4被當成穩定版本,加入Linux 2.6.29版的原始碼中,ext4的開發階段進入尾聲[5]。2008年12月25日,Linux 2.6.29版公開釋出之後,ext4成為Linux官方的建議預設檔案系統。

2010年1月15日,Google宣佈將他們公司使用的檔案系統,由ext2,升級為ext4。在同年12月14日,Google也宣佈他們將在Android 2.3版中,使用ext4來取代之前的YAFFS

特色

大型檔案系統
ext4檔案系統可支援最高1 EB大小的分區[6]與最大16 TB大小的檔案。
Extents
ext4引進了Extent檔案儲存方式,以取代ext2/3使用的block mapping方式。Extent指的是一連串的連續實體block,這種方式可以增加大型檔案的效率並減少分裂檔案。ext4支援的單一Extent,在單一block為4KB的系統中最高可達128MB[1]。單一inode中可儲存4筆Extent;超過四筆的Extent會以Htree方式被索引。
向下相容
ext4向下相容於ext3ext2,因此可以將ext3和ext2的檔案系統掛載為ext4分區。由於某些ext4的新功能可以直接運用在ext3和ext2上,直接掛載即可提升少許效能。
ext3檔案系統可以部分向上相容於ext4(也就是說ext4檔案系統可以被掛載為ext3分區)。然而若是使用到Extent技術的ext4將無法被掛載為ext3。
預留空間
ext4允許對一檔案預先保留磁碟空間。目前大多數檔案系統做到這點的方式是直接產生一個填滿0的檔案;ext4和XFS可以使用Linux核心中的一個新的系統呼叫「fallocate()」取得足夠的預留空間。
延遲取得空間
ext4使用一種稱為allocate-on-flush英語Allocate on flush的方式,可以在資料將被寫入磁碟(sync)前才開始取得空間;大多數檔案系統會在之前便取得需要的空間。這種方式可以增加效能並減少檔案分散程度。
突破32000子目錄限制
ext3的一個目錄下最多只能有32000個子目錄。ext4的子目錄最高可達64000,且使用「dir_nlink」功能後可以達到更高(雖然父目錄的link count會停止增加)。為了避免效能受到大量目錄的影響,ext4預設開啟Htree英語Htree(一種特殊的B樹)索引功能。該功能已經實作於Linux核心2.6.23版。
紀錄檔校驗和
Ext4使用校驗和特性來提高檔案系統可靠性,因為紀錄檔是磁碟上被讀取最頻繁的部分之一。這個特性還有一個好處就是可以安全地避免紀錄檔處理時磁碟I/O的等待,而稍微提高一些效能。紀錄檔校驗和的技術源於威斯康辛大學的一篇名為IRON File Systems的研究論文(見第六節transaction checksums校驗和處理)[7]
線上磁碟整理
對於線上磁碟整理工具有許多草案,但是這些草案都沒有被包含在主流的內核當中。即使Ext4包含有許多避免磁碟碎片的技術,但是磁碟碎片還是難免會在一個長時間使用過的檔案系統中存在。Ext4將會有一個具有磁碟整理功能的工具[8]
快速檔案系統檢查
Ext4將未使用的區塊標記在inode當中,這樣可以使諸如e2fsck之類的工具在磁碟檢查時將這些區塊完全跳過,而節約大量的檔案系統檢查的時間。這個特性已經在2.6.24版本的Linux內核中實現。

參見

參考資訊

  1. ^ 1.0 1.1 Mathur, Avantika; Cao, MingMing; Bhattacharya, Suparna; Dilger, Andreas; Tomas, Alex; Vivier, Laurent. The new ext4 filesystem: current status and future plans (PDF). Proceedings of the Linux Symposium. Ottawa, ON, CA: Red Hat. 2007 [2008-01-15]. [永久失效連結]
  2. ^ Torvalds, Linus. extents and 48bit ext3. LKML. 2006-06-09 [2009-10-23]. (原始內容存檔於2017-08-22). 
  3. ^ Ts'o, Theodore. Proposal and plan for ext2/3 future development work. LKML. 2006-06-28 [2009-10-23]. (原始內容存檔於2009-02-19). 
  4. ^ Leemhuis, Thorsten. Higher and further: The innovations of Linux 2.6.28(page 2). Heise Online. 2008-12-23 [2010-01-09]. (原始內容存檔於2009-01-03). 
  5. ^ ext4: Rename ext4dev to ext4. Linus' kernel tree. [2008-10-20]. (原始內容存檔於2019-12-10). 
  6. ^ Migrating to Ext4. DeveloperWorks. IBM. [2008-12-14]. (原始內容存檔於2008-12-01). 
  7. ^ Vijayan Prabhakaran; et al. IRON File Systems (PDF). CS Dept, University of Wisconsin. [2009-10-23]. (原始內容存檔 (PDF)於2010-06-15). 
  8. ^ ext4新功能#在线磁盘碎片整理. [2010-09-07]. (原始內容存檔於2018-01-10). 

相關介紹