ext4 檔案系統在儲存裝置中的布局

2021-10-05 19:25:13 字數 4180 閱讀 6212

在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 blockblock 1開始。在所有其他的塊組 (block groups) 中是沒有填充 (padding) 的。

ext4檔案系統驅動主要與block group 0中的super blockgroup descriptors打交道。所以為了防止分割槽頭部 (beginning of the disk) 被意外』弄髒』,會將super blockgroup descriptors的冗餘複製 (redundant copy) 寫到儲存裝置的一些其他的塊組 (block group) 中,當然並不是所有的塊組 (block group) 中都有super blockgroup 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...