EXT4檔案組織 EXT4檔案系統詳解2

2021-07-08 19:31:40 字數 1920 閱讀 4860

ext4 檔案系統是從 ext2 和 ext3 上發展而來的,這裡我們來分析它們是如何將乙個檔案的內容組織起來,從而在磁碟上「拼湊出乙個檔案」。

出於對ext4檔案系統相容性的考慮,我們嘗試在先從ext2檔案系統的檔案組織方式說起。

ext2檔案節點定義:

ext2 檔案節點變數有點多,我們需要關注i_block這個成員,這個成員是解析 ext2 檔案組織方式的重要入手點。

__le32  i_block[ext2_n_blocks];     /* pointers to blocks */

#define ext2_ndir_blocks 12

#define ext2_ind_block ext2_ndir_blocks

#define ext2_dind_block (ext2_ind_block + 1)

#define ext2_tind_block (ext2_dind_block + 1)

#define ext2_n_blocks (ext2_tind_block + 1)

在上面的**中我們給出了後面五行巨集定義的**,用來解釋ext2_n_blocks數值大小的由來,結合圖1進行說明會更加清晰。

圖 1 ext2/ext3檔案組織索引結構

i_block占用了60 bytes 的固定空間,包含15個32位的無符號整形變數,每乙個變數記錄了乙個塊號(block number, 用來指示磁碟上的乙個block。最前面[0 - 11]這12個塊號都直接標示了乙個資料塊用來儲存資料,因此可以用來記錄 12 * 4kb = 48kb 的檔案內容。這太小了,放不下多少東西!我們再來看後面的內容。

i_block[12]表示一級索引,這個一級索引同樣記錄了乙個塊號,不過這個塊號所指示的block並不用來儲存資料,而是儲存了 4kb / 4b = 1024 個直接索引,這些直接索引在用來指示資料塊的位置。因此,以及索引可以用來儲存 4kb / 4b * 4kb = 4mb 的檔案內容。

依此類推,i_block[13]i_block[14]分別儲存了二級索引和**索引,分別可以用來儲存 4gb 和 4tb 的檔案內容。也就是說通過這種分級索引對映的方式,ext2檔案系統最大可以支援單個檔案的大小是4tb + 4gb + 4mb + 48kb

分析完ext2/3的檔案組織方式,發現這種方法有不少缺陷:首先,檔案儲存會消耗很多額外的磁碟空間,每增加4mb的大小就需要額外的4kb來對映檔案內容;另外,4tb的單個檔案有點小,要知道現在資料庫檔案動輒就要幾十甚至是上百tb。網上說ext4檔案系統支援最大的單個檔案大小是64tb,我也沒弄明白這是怎麼計算出來的,不過從centos 7 開始改為預設採用xfs檔案系統,能夠支援更大的單個檔案尺寸。

ext4檔案系統在組織檔案時使用了extents方法來改進舊的分層索引對映的方式,所謂的extents方法簡單地說就是構建extent樹來組織檔案,並且記錄檔案使用的某片區域的起始位置而非一一對映。extent樹最重要的兩個資料結構式ext4_extent_idxext4_extent_header,先把**貼出來吧。

struct ext4_extent_idx ;

struct ext4_extent_header ;

ext4檔案系統綜述

從本篇部落格起,我們開始研究現代檔案系統ext4,說其現代是因為其相比傳統檔案系統,有著更現代化的設計。這些先進的特性體現在本文所要敘述的以下方面。ext4是linux檔案系統的一次革命。在很多方面,ext4相對於ext3的進步要遠超過ext3相對於ext2的進步。ext3相對於 ext2的改進主要...

剖析ext4檔案系統

簡介 第 4 個擴充套件檔案系統,即 ext4 是下一代的日誌檔案系統,它與上一代檔案系統 ext3 是向後相容的。儘管 ext4 目前還不是標準檔案系統,但它將成為大部分下一代 linux 發行版的預設檔案系統。了解 ext4,以及它為什麼將成為您最喜歡的新檔案系統。linux 核心的每次發行都伴...

ext4 檔案系統的優化

ext4作為ext3的下一代,是linux上的經典檔案系統,功能上雖不及zfs btrfs那麼花哨,但是可靠實用,被廣泛部署在企業級的生產環境中。ext4 作為乙個通用檔案系統,預設情況下已經工作良好。通過下面的調優,可以獲得額外的效能。掛載選項 1 noatime atime,它通常沒有用處,尤其...