在ext4檔案系統管理下的磁碟分割槽會被分成一系列的塊組 (block groups),檔案被盡可能的放在同一塊組中,以降低檔案塊尋找時間。每個塊組有sb.s_blocks_per_group個塊,這個值也可以用8 * block_size_in_bytes來計算。例如:
+ 當 block 大小為 4kib 時,每個塊組會包含 32768 個塊,即大小為 128mib
block groups的數量計算方法是:
+ 分割槽大小 除以 塊組大小
+sizeof_device_in_bytes / sizeof_block_group_in_bytes
ext4中的所有域都以小端序 (little-endian) 的形式寫在儲存裝置中
注:jbd2 會以大端序 (big-endian) 的方式將資料寫入磁碟
ext4將儲存裝置以塊 (block) 為單位劃分,乙個塊就是一組扇區 (sectors) ,塊的大小可以指定為 1kib 到 64kib,每一塊中包含的sector的數量必須是 2 的整數次方。塊的大小在為儲存裝置製作檔案系統的時候 (mkfs) 時被指定,並在一般情況下為 4kib 。使用以下工具可以檢視磁碟元資料:
當磁碟塊的大小大於系統記憶體頁面 (page size) 大小時,例如:在i386上記憶體頁面大小為 4kib,當塊大小為 64kib 時,會發生掛載問題,即磁碟塊的大小一般不應大於記憶體的頁面大小。在預設情況下檔案系統可以容納 2^32 個塊,如果啟用了 『64bit』 功能時,檔案系統可以包含 2^64 個塊。
32位模式下:item
1kib
2kib
4kib
64kib
blocks
2^32
2^32
2^32
2^32
inodes
2^32
2^32
2^32
2^32
file system size
4tib
8tib
16tib
256pib
blocks per block group
8192
16384
32768
524288
inodes per block group
8192
16384
32768
524288
block group size
8mib
32mib
128mib
32gib
blocks per file, extents
2^32
2^32
2^32
2^32
blocks per file, block maps
16843020
134480396
1074791436
4398314962956
file size, extents
4tib
8tib
16tib
256tib
file size, block maps
16gib
256gib
4tib
256tib
64位模式下:item
1kib
2kib
4kib
64kib
blocks
2^64
2^64
2^64
2^64
inodes
2^32
2^32
2^32
2^32
file system size
16zib
32zib
64zib
1yib
blocks per block group
8192
16384
32768
524288
inodes per block group
8192
16384
32768
524288
block group size
8mib
32mib
128mib
32gib
blocks per file, extents
2^32
2^32
2^32
2^32
blocks per file, block maps
16843020
134480396
1074791436
4398314962956
file size, extents
4tib
8tib
16tib
256tib
file size, block maps
16gib
256gib
4tib
256tib
乙個大致的磁碟布局如下:
group 0 padding
ext4 super block
group descriptors
reserved gdt blocks
data block bitmap
inode bitmap
inode table
data blocks
1024 bytes
1 block
many blocks
many blocks
1 block
1 block
many blocks
many more blocks
因為一些特殊原因block group 0的開始1024 bytes是不被使用的,預留給x86安裝boot sectors或其他特殊用處。所以super block會偏移1024 bytes,當block的大小為1024 bytes時,定義稍微發生了一點變化,這個時候block 0會被標記為已占用 (in use by padding) 然後super block從block 1開始。在所有其他的塊組 (block groups) 中是沒有填充 (padding) 的。
ext4檔案系統驅動主要與block group 0中的super block和group descriptors打交道。所以為了防止分割槽頭部 (beginning of the disk) 被意外』弄髒』,會將super block和group descriptors的冗餘複製 (redundant copy) 寫到儲存裝置的一些其他的塊組 (block group) 中,當然並不是所有的塊組 (block group) 中都有super block和group descriptors的冗餘複製。當乙個塊沒有此冗餘複製的時候,此塊組會從data block bitmap開始 (begins with the data block bitmap)。
待續
ext4檔案系統綜述
從本篇部落格起,我們開始研究現代檔案系統ext4,說其現代是因為其相比傳統檔案系統,有著更現代化的設計。這些先進的特性體現在本文所要敘述的以下方面。ext4是linux檔案系統的一次革命。在很多方面,ext4相對於ext3的進步要遠超過ext3相對於ext2的進步。ext3相對於 ext2的改進主要...
剖析ext4檔案系統
簡介 第 4 個擴充套件檔案系統,即 ext4 是下一代的日誌檔案系統,它與上一代檔案系統 ext3 是向後相容的。儘管 ext4 目前還不是標準檔案系統,但它將成為大部分下一代 linux 發行版的預設檔案系統。了解 ext4,以及它為什麼將成為您最喜歡的新檔案系統。linux 核心的每次發行都伴...
EXT4檔案組織 EXT4檔案系統詳解2
ext4 檔案系統是從 ext2 和 ext3 上發展而來的,這裡我們來分析它們是如何將乙個檔案的內容組織起來,從而在磁碟上 拼湊出乙個檔案 出於對ext4檔案系統相容性的考慮,我們嘗試在先從ext2檔案系統的檔案組織方式說起。ext2檔案節點定義 ext2 檔案節點變數有點多,我們需要關注i bl...