ext4之內核文檔

最近接觸ext4比較多,所以就想着直接開一個博客專門是ext4的,一方面是爲了系統的學習下ext4,另一方面也是做一個標記,以後如果還有用到的地方可以回來再看看,當然最重要的還是和廣大的技術人員交流,如果能夠幫助到一些人就更好了。

ext4第一次發佈是在linux-2.6.19的內核裏,發展到現在,ext4的代碼已經是非常巨大,我下載linux-4.7的內核代碼一看,居然有50W lines,我估計要是一行一行的看,我也不需要做什麼事了。然而打開linux-2.6.19的代碼,只有大約2W lines,所以還是從起源開始吧,就像沒有人能夠出一本書叫做linux-4.7內核源代碼解析一樣。。。

這次看的是linux-2.6.19/Docment/filesystem/ext4.txt,這是內核關於ext4的文檔,講的還是比較好的。我直接翻譯下,後續的人看着方便一些,但是由於個人英語能力所限,翻譯過程可能有一些問題,歡迎指出。


Ext4 文件系統
===============
這個版本的ext4是一個開發中的版本,一個比ext3性能優秀的fs,不但支持比ext3更加大的文件系統,還兼顧了可擴展性和可靠性。
郵件列表: [email protected],大家如果想訂閱ext4的內核郵件的話,只需要向這個郵件發送subscribe就可以了,不過每天會接受到好多封郵件,不過都是開源社區對於ext4的開發的討論和計劃。
1. 快速使用ext4:
===========================
  - 開發者可以獲得e2fsprogs從以下路徑
    ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs-interim/
    ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
  - 首先格式化 mke2fs -j /dev/hda1
  - 然後掛載文件系統 mount /dev/hda1 /wherever -t ext4dev
  - 如果想打開extents的支持的話,可以在掛載的時候添加這個選項,但是前提是mke2fs的時候加上-o extents的支持。
mount /dev/hda1 /wherever -t ext4dev -o extents
  - ext4對於ext3是向後兼容的,除非添加一個支持extents的文件。比如: `mount -o extents’,然後在這個文件系統上創建一個文件.
  - ext3/4相比較於其他的文件系統,提供了更高的數據完整性。
2. ext4特性
===========
2.1 當前版本支持的
* 文件系統大小 > 16TB
* extent格式的文件具有更強的健壯性,在面對磁盤上的衝突的時候。
* 內部的B+樹減少一些浪費的空間
2.1 之前可用的功能,以後會被"mkefs.ext4”支持:
* dir_index和可變更大小的inode
2.2 後續可能會支持的屬性
以下的都是正在討論中的屬性:
* 修改的文件分配功能 (一次多塊分配, 延遲分配)
* 去除32000個子目錄的限制 (這方面的補丁已經做好了, 還需要e2fs的支持)
* nsec的時間戳,在mtime, atime, ctime上使用, (這方面的補丁已經做好了, 還需要e2fs的支持)
* 增加inode的版本字段在磁盤存儲上
* 減少mke2fs/e2fsck的消耗的時間 
* 日誌的校驗和
* 文件的預分配功能 (e.g 特別是對於一些流媒體應用和數據庫應用)
比如元數據的校驗和已經經過了大量的討論和計劃,但是還沒有開發出補丁,所以我還不確定他是不是在近期會發出。
mballoc和delalloc會實現性能上的巨大提升.CFS已經使用了mballoc好多年了,IBM + Bull也做了很多的測試在這個上邊。這個特性之所以沒有在第一版的ext4就加進來,我認爲是管理上的原因,而且因爲這個特性直接影響了磁盤上的部署格式,所以,在第一版就加進來就引起了一些爭議,我相信後續的版本一定會支持的。
3. 掛載選項
==========
當你掛載ext4文件系統的時候,以下的選項在當前版本是支持的:
(*) == 缺省的
extents ext4把文件的數據話分成一個一個的區域,這樣的文件系統就不能再被ext3掛載了.
journal=update 更新ext4的日誌到當前格式.
journal=inum 當有日誌存在的話,這個選項會被忽略,否則,這個選項制定了會有多少個inode代表ext4的日誌文件.
journal_dev=devnum 當外部的日誌設備的主設備號和次設備號變化的時候,這個選項允許用戶指定新的日誌文件的存放地點,就是通過devnum來指定主設備號和次設備號.
noload 在掛載的時候不載入日誌.
data=journal 所有的數據寫入都會被日誌記錄下來.
data=ordered (*)所有的元數據寫入都會被記錄下來,但是數據的寫入會直接寫入不會被記錄下來.
data=writeback 包括元數據在內的所有數據都會被直接寫入ext4而不會有日誌記錄.
commit=nrsec (*)ext4在每過nrsec秒以後就會同步所有的數據,把這些數據寫入到掉電非易失存儲介質上去,缺省的值是5s.這就意味着如果掉電了,你最多丟失5s內寫入的數據,感謝日誌的存在,你的文件系統並不會崩潰,但是這個值會造成性能上的損失,但是對於數據安全是有好處的,如果設置爲0的話,就意味着設置爲缺省值5s,設置爲比較大的值會提升ext4的讀寫性能,但是同時也帶來了安全性的降低。
barrier=1 這個選項打開/關閉隔離,barrier=0的時候關閉,barrier=1的時候打開.
orlov (*) 這個選項會啓用新的orlov塊分配器.
oldalloc 這個選項會關閉掉新的orlov塊分配器,啓用原先的塊分配器. Orlov應當擁有更好的性能,如果在你那裏運行的結果不是這樣的話,你可以反饋給我們
user_xattr 啓用擴展用戶屬性功能,此外,你還需要在內核配置選項中加上(CONFIG_EXT4_FS_XATTR).你可以看attr(5)用戶手冊以及http://acl.bestbits.at/ 來對用戶擴展屬性瞭解更多。
nouser_xattr 關閉擴展用戶屬性.
acl 打開POSIX標準支持的用戶控制權限列表,此外,你還需要在內核配置選項中添加(CONFIG_EXT4_FS_POSIX_ACL).你可以看acl(5)用戶手冊和http://acl.bestbits.at/來了解更多信息。
noacl 這個選項關閉POSIX標準支持的用戶控制權限列表功能T.
reservation
noreservation
bsddf (*) 使得'df’命令的執行表現的像在BSD上.
minixdf 使得'df’命令的執行表現的像在Minix上.
check=none 在掛載的時候不做多餘的對於位圖的檢查.
nocheck
debug debug信息將會被髮送到syslog.
errors=remount-ro(*) 當有錯誤發生的時候,就會重新掛載爲只讀的.
errors=continue 當有錯誤發生的時候繼續運行,不做任何操作.
errors=panic 當有錯誤發生的時候直接報內核Panic.
grpid 給予所有的文件統一的組ID.
bsdgroups
nogrpid (*) 新的文件擁有統一的組ID.
sysvgroups
resgid=n 組ID爲n的文件可以使用保留的塊.
resuid=n 用戶ID爲n的文件可以使用保留的塊.
sb=n 使用第n塊作爲超級塊.
quota
noquota
grpquota
usrquota
bh (*) ext4把緩衝區首部和數據頁連接起來以緩存塊的信息。
nobh bh選項表示強制使用緩衝區首部,nobh選項表示儘量避免緩衝區首部(僅僅在data=writeback模式下支持).
數據模式
---------
有三種數據模式:
* writeback
在data=writeback模式下,ext4並不進行任何日誌操作,這個模式提供了一個簡單的日誌就像 XFS, JFS, ReiserFS等文件系統的缺省模式一樣,一個文件系統的崩潰然後再修復可能會導致正確的數據出現在文件崩潰之前寫入的地方,但是這個模式下ext4擁有最好的性能。
* ordered
在data=ordered模式下,ext4僅僅提供元數據的日誌,但是把一個組的元數據和一些數據塊放在一個單元裏叫做一個事務,當是時候把元數據寫入到磁盤上的時候,與之聯繫的數據塊會首先寫入。一般情況下,這種模式的性能會略遜色於writeback但是比journal模式要快的多。
* journal
data=journal模式提供了完全的數據塊和元數據快的日誌,所有的新的數據都會被首先寫入到日誌裏,然後在寫入掉電非易失存儲介質上。在文件系統崩潰的時候,日誌就可以進行重放,把數據和元數據帶回到一個一致性的狀態,這個模式是最慢的,因爲所有的數據都需要日誌來記錄.

引用
==========
內核源代碼: <file:fs/ext4/>
<file:fs/jbd2/>
programs: http://e2fsprogs.sourceforge.net/
http://ext2resize.sourceforge.net
有用的鏈接: http://fedoraproject.org/wiki/ext3-devel
http://www.bullopensource.org/ext4/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章