Ext
全稱Linux extended file system, extfs,即Linux擴展文件系統,Ext2就代表第二代文件擴展系統,Ext3/Ext4以此類推,它們都是Ext2的升級版,只不過增加了日志功能,且彼此向下兼容,所以Ext2被稱為索引式文件系統,而Ext3/Ext4被稱為日志式文件系統。
備注:Linux支持很多文件系統,包括網絡文件系統(NFS)、Windows的Fat文件系統。
查看Linux支持的文件系統:ls -l /lib/modules/$(uname -r)/kernel/fs
查看Linux支持的文件系統(已載入到內存中):cat /proc/filesystems
核心設計
數據區
這些元素相對穩定,磁盤格式化后,就固定下來了。
1、inode(索引節點)
記錄文件的權限、屬性和數據所在塊block的號碼,每個文件都有且僅有一個的inode,每個inode都有自己的編號,可以把inode簡單地理解為文檔索引。
2、block(數據區塊)
存儲的文件內容,也叫數據區塊(data block),每個block都有自己的編號,Ext2支持的單位block容量僅為1k、2k、4k。
備注:為了方便inode的記錄,在磁盤格式化后,block的大小都已經固定了。每一個塊只能存放一個文件的數據,若文件太大,將占用多個block;若文件太小,block剩余空間就不能被使用了,就會導致磁盤空間浪費,所以在磁盤分區后,文件系統格式化前,請先仔細想想文件系統的預計使用情況。
中介數據(metadata)
這些元素是為了維持文件系統狀態而設計出來的,主要代表的是文件系統的動態配置信息,屬于描述性信息。
1、superblock(超級塊)
記錄文件系統(filesystem)的整體信息,包括inode/block的總量、使用量、剩余量、大小、以及文件系統的格式和相關信息。
備注:整個文件系統的基本信息全部記錄在superblock,它的大小一般為1024Bytes,如果它死掉,將會花費大量的時間去補救哦!!!
2、block group(區塊群組)
試想一下,假如我們的磁盤容量高達數百G,當我們格式后,inode和block會非常龐大,為了便于管理,Ext文件系統在格式化時,引入了區塊群組(block group)的概念,每個區塊群組都保持獨立inode/block/superblock,擁有固定數量的block,這樣就分成了一群一群最基礎的子文件系統。
備注:superblock對于文件系統太重要了,但是文件系統的superblock又只有一個,所以除了第一個block group含有superblock外,后續block group都可能會含有備份的superblock,目的就是為了避免superblock單點無法救援的問題。
3、block bitmap(區塊對照表)
一個block只能被一個文件使用,當我們新增文件時,肯定需要使用新的block來記錄文件數據。那么如何快速地知道,哪些block是新的?哪些block是已經使用了的?block bitmap就是這樣被設計出來,記錄所有使用和未使用的block號碼。同樣的,當我們刪除文件時,先從block bitmap中找到對應的block號碼,然后更新標志為未使用,最后釋放block。
inode bitmap(inode 對照表)
和block bitmap一樣的設計理念,只不過它記錄地是已使用和未使用的inode號碼,這里就不再敖述了。
group descriptor
描述每個區段(block group)開始和結束的block號碼,以及說明每個區段(inodemap、blockmap、inode table)分別介于哪些block號碼之間。
列出目前系統所有被格式化的設備:blkid
挑選一個已格式化好的設備,查看文件系統的詳細信息:dumpe2fs /dev/vda1
備注:通過上面的Magic簽名為0xEF53,說明我們的磁盤分區是一個的ext2和ext3文件系統。類似于通過文件開頭的Magic,可以判斷文件類型一樣。
總結
Ext家族是Linux支持度最廣、最完整的文件系統,當我們格式化磁盤后,就已經為我們規劃好了所有的inode/block/metadate等數據,這樣系統可以直接使用,不需要再進行動態的配置,這也是它最優秀的特點,不過這也是它最顯著的缺點,磁盤容量越大,格式化越慢,centos7.x已經選用xfs作為默認文件系統。