liwen01 2024.06.09
前言
Linux系統中的ext2、ext3、ext4 檔案系統,它們都有很強的向後和向前相容性,可以在資料不丟失的情況下進行檔案系統的升級。目前ext4是一個相對較成熟、穩定且高效的檔案系統,適用於絕大部分規模和需求的Linux環境。
ext4它突出的特點有:資料分段管理、多塊分配、延遲分配、持久預分配、日誌校驗、支援更大的檔案系統和檔案大小。
ext4檔案系統的具體實現比較複雜,本文嘗試用比較簡單的方式用一篇文章的篇幅來簡單地介紹一下它的工作原理。
(一)建立ext檔案系統
為了分析ext4 檔案系統的內部結構和原理,這裡我們在Linux中建立一個ext4檔案系統映象,然後透過loop虛擬裝置將ext4映象檔案掛載到某個目錄上。具體實現步驟如下:
- 建立一個1GB的檔案
dd if=/dev/zero of=./ext4_image.img bs=1M count=1024
- 將這個檔案格式化成 ext4 檔案系統格式
mkfs.ext4 ext4_image.img
- 透過Linux的loop虛擬裝置將檔案掛載到目錄上
sudo mount -o loop ext4_image.img /home/biao/test/ext4/ext4_simulator
- dumpe2fs 檢視檔案系統基本資訊
dumpe2fs ext4_image.img
輸出內容資訊(中間省略了部分內容):
dumpe2fs 1.44.1 (24-Mar-2018)
Filesystem volume name: <none>
Last mounted on: /home/biao/test/ext4/ext4_simulator
Filesystem UUID: 0169498e-f5f7-4fb8-9e9e-532088e41333
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 262144
Reserved block count: 13107
Free blocks: 247703
Free inodes: 65517
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 127
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Fri May 24 17:18:57 2024
Last mount time: Wed Jun 5 19:15:36 2024
Last write time: Wed Jun 5 19:15:36 2024
Mount count: 3
Maximum mount count: -1
Last checked: Fri May 24 17:18:57 2024
Check interval: 0 (<none>)
Lifetime writes: 6997 kB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 0faf0e8c-f385-4ecd-b3a4-db2a3329e121
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x32dc1b70
Journal features: journal_64bit journal_checksum_v3
Journal size: 32M
Journal length: 8192
Journal sequence: 0x00000017
Journal start: 1
Journal checksum type: crc32c
Journal checksum: 0xa3c1b983
Group 0: (Blocks 0-32767) csum 0xf19b [ITABLE_ZEROED]
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-128
Block bitmap at 129 (+129), csum 0x8efc34cf
Inode bitmap at 137 (+137), csum 0x49f91ed6
Inode table at 145-656 (+145)
28517 free blocks, 8176 free inodes, 3 directories, 8176 unused inodes
Free blocks: 4251-32767
Free inodes: 17-8192
..........
..........
..........
Group 7: (Blocks 229376-262143) csum 0x7daa [INODE_UNINIT, ITABLE_ZEROED]
Backup superblock at 229376, Group descriptors at 229377-229377
Reserved GDT blocks at 229378-229504
Block bitmap at 136 (bg #0 + 136), csum 0x5bd8cca0
Inode bitmap at 144 (bg #0 + 144), csum 0x00000000
Inode table at 3729-4240 (bg #0 + 3729)
32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 229505-262143
Free inodes: 57345-65536
(二)ext4 磁碟佈局
從上面dumpe2fs的資料上我們可以看出,一個1GB大小的空間,ext4 檔案系統將它分隔成了0~7的8個Group。
ext4 的總體磁碟佈局如下:
從上圖可以看出:
- Backup superblock、Group descriptors、Reserved GDT 是分佈在1、3、5、7 這幾個Group中,2、4、6Group並沒有這些資訊。
- Block bitmap、Inode bitmap、Inode table 這些元檔案在每個Group中的位置並不一樣,而是相差1個Block。
為什麼需要這樣設計?這個下面稍晚點再介紹
(三) superblock超級塊
從上面《1.1 ext4檔案系統資訊表》中可以知道Primary superblock在第0號block,每個block的大小為4096Byte。
用hexdump 命令檢視超級塊的資料
biao@ubuntu:~/test/ext4$ hexdump -s 0 -n 4096 -C ext4_image.img
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000400 00 00 01 00 00 00 04 00 33 33 00 00 97 c7 03 00 |........33......|
00000410 ed ff 00 00 00 00 00 00 02 00 00 00 02 00 00 00 |................|
00000420 00 80 00 00 00 80 00 00 00 20 00 00 9c c1 5d 66 |......... ....]f|
00000430 00 d0 5f 66 02 00 ff ff 53 ef 01 00 01 00 00 00 |.._f....S.......|
00000440 81 5b 50 66 00 00 00 00 00 00 00 00 01 00 00 00 |.[Pf............|
00000450 00 00 00 00 0b 00 00 00 00 01 00 00 3c 00 00 00 |............<...|
00000460 c2 02 00 00 6b 04 00 00 01 69 49 8e f5 f7 4f b8 |....k....iI...O.|
00000470 9e 9e 53 20 88 e4 13 33 00 00 00 00 00 00 00 00 |..S ...3........|
00000480 00 00 00 00 00 00 00 00 2f 68 6f 6d 65 2f 62 69 |......../home/bi|
00000490 61 6f 2f 74 65 73 74 2f 65 78 74 34 2f 65 78 74 |ao/test/ext4/ext|
000004a0 34 5f 73 69 6d 75 6c 61 74 6f 72 00 00 00 00 00 |4_simulator.....|
000004b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000004c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7f 00 |................|
000004d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000004e0 08 00 00 00 00 00 00 00 00 00 00 00 0f af 0e 8c |................|
000004f0 f3 85 4e cd b3 a4 db 2a 33 29 e1 21 01 01 40 00 |..N....*3).!..@.|
00000500 0c 00 00 00 00 00 00 00 81 5b 50 66 0a f3 01 00 |.........[Pf....|
........
biao@ubuntu:~/test/ext4$
對超級塊的部分資料進行解析:
從上表可以看出superblock的主要內容有:
檔案系統資訊、塊大小和塊組資訊、Inode 相關資訊、檔案系統大小和使用情況、日誌相關資訊、掛載資訊、校驗和和備份資訊。
其實使用dumpe2fs命令檢視的ext4檔案系統資訊就是從superblock上的資料解析而來。
除了Primary superblock,還在不同的group中有備份superblock,其內容與Primary superblock原始資料相同,Primary superblock損壞的時候可以從備份區恢復回來。
(四) Group descriptors組描述
在 ext4 檔案系統中,Group Descriptor(塊組描述符)是一個關鍵的結構,用於描述和管理檔案系統的塊組(Block Group)。每個塊組包含檔案系統中的一部分資料塊和 inode,並且有自己的後設資料來管理這些資源。Group Descriptor 在超級塊之後緊隨其後,是檔案系統的組織和管理的核心部分
從上面《1.1 ext4檔案系統資訊表》中可以知道group0 的 Group descriptors 在第1個資料塊中,其大小為1個block
group 0 中 Group descriptors 的資料如下:
biao@ubuntu:~/test/ext4$ hexdump -s 4096 -n 4096 -C ext4_image.img
00001000 81 00 00 00 89 00 00 00 91 00 00 00 65 6f f0 1f |............eo..|
00001010 03 00 04 00 00 00 00 00 cf 34 d6 1e f0 1f 9b f1 |.........4......|
00001020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00001030 00 00 00 00 00 00 00 00 fc 8e f9 49 00 00 00 00 |...........I....|
00001040 82 00 00 00 8a 00 00 00 91 02 00 00 b5 79 fd 1f |.............y..|
00001050 03 00 04 00 00 00 00 00 c2 fd 0a 43 fd 1f c2 4a |...........C...J|
00001060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00001070 00 00 00 00 00 00 00 00 8e a7 8c 58 00 00 00 00 |...........X....|
.........
biao@ubuntu:~/test/ext4$
對Group descriptors 的資料進行解析,可以看到詳細當前group的詳細資訊。
一個Group descriptors 佔用一個block,它不僅僅記錄自己Group上的資訊,還包括了其它group的Group descriptors
(五) Block bitmap塊點陣圖
Block bitmap 塊點陣圖用於管理塊組(Block Group)中的資料塊,Block Bitmap 記錄了塊組中每個塊的使用狀態,標識哪些塊是已使用的,哪些塊是空閒的,裡面資料是按位標記,為1表示該塊已經被使用。
檢視Block bitmap中的資料
biao@ubuntu:~/test/ext4$ hexdump -s 528384 -n 4096 -C ext4_image.img
00081000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00081210 ff ff ff 07 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00081220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00082000
biao@ubuntu:~/test/ext4$
(六) Inode bitmap索引節點點陣圖
與Block bitmap工作原理類似,Inode bitmap 是用於管理塊組(Block Group)中的inode。Inode Bitmap記錄了塊組中每個inode的使用狀態,標識哪些inode是已使用的,哪些inode是空閒的。
biao@ubuntu:~/test/ext4$ hexdump -s 561152 -n 4096 -C ext4_image.img
00089000 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00089010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00089400 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0008a000
biao@ubuntu:~/test/ext4$
(七) Inode table索引節點表
(1)索引節點介紹
索引節點表是相對比較複雜的一個元檔案,從上面《1.1 ext4檔案系統資訊表》我們可以知道:
Inode size: 256
Inode table at 145-656 (+145)
- 一個索引節點的大小為256Byte
- 從 Group 0資訊中可以知道Group 0 的索引表位置在145-656 塊的位置
檢視索引節點資訊:
biao@ubuntu:~/test/ext4$ hexdump -s 593920 -n 4096 -C ext4_image.img
00091000 00 00 00 00 00 00 00 00 81 5b 50 66 81 5b 50 66 |.........[Pf.[Pf|
00091010 81 5b 50 66 00 00 00 00 00 00 00 00 00 00 00 00 |.[Pf............|
00091020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00091070 00 00 00 00 00 00 00 00 00 00 00 00 6f 16 00 00 |............o...|
00091080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00091100 ed 41 00 00 00 10 00 00 78 15 61 66 e5 5d 50 66 |.A......x.af.]Pf|
00091110 e5 5d 50 66 00 00 00 00 00 00 07 00 08 00 00 00 |.]Pf............|
00091120 00 00 08 00 04 00 00 00 0a f3 01 00 04 00 00 00 |................|
00091130 00 00 00 00 00 00 00 00 01 00 00 00 91 10 00 00 |................|
00091140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00091170 00 00 00 00 00 00 00 00 00 00 00 00 fa d3 00 00 |................|
00091180 20 00 98 7a 60 ea ef 8e 60 ea ef 8e 78 f5 3f a0 | ..z`...`...x.?.|
00091190 81 5b 50 66 00 00 00 00 00 00 00 00 00 00 00 00 |.[Pf............|
000911a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00091270 00 00 00 00 00 00 00 00 00 00 00 00 8d 16 00 00 |................|
00091280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
對第2個索引節點的引數進行解析:
在ext4檔案系統中,0~11號索引是特殊定義的索引節點:
(2)inode.i_block介紹
在 ext4 檔案系統中,inode 是一個資料結構,代表檔案系統中的每個檔案和目錄。每個 inode 包含了有關檔案的後設資料,例如檔案大小、許可權、所有者資訊等。inode.i_block 是 inode 結構中用於指向檔案資料塊的欄位,是檔案系統如何找到並訪問檔案內容的核心部分.
inode.i_block 是 ext4 檔案系統中確保檔案資料高效儲存和訪問的關鍵元件,i_block裡的資料型別,需要根據i_flags中的引數來確認,上面《圖7.1 Inode table引數解析》i_flags 的值是0x080000,同使用的是 Inode uses extents (EXT4_EXTENTS_FL)
iblock的長度是60位元組,我們下面透過iblock裡的引數找到該inode對應檔案所在的block。
(3)透過inode定位到檔案block
檔案系統中檔案資訊如下:
root@ubuntu:/home/biao/test/ext4/ext4_simulator# tree
.
├── lost+found
├── test1
│ └── 0000.media
├── test2
│ └── 0011.media
├── test3
│ └── 0022.media
└── test4
└── 0033.media
5 directories, 4 files
root@ubuntu:/home/biao/test/ext4/ext4_simulator#
如果我們要找到0033.media檔案所在block,我們先透過stat 檢視0033.media 的inode節點
biao@ubuntu:~/test/ext4/ext4_simulator/test4$ stat 0033.media
File: 0033.media
Size: 1662591 Blocks: 3248 IO Block: 4096 regular file
Device: 719h/1817d Inode: 16 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ biao) Gid: ( 1000/ biao)
Access: 2024-06-05 10:39:09.000000000 +0800
Modify: 2024-05-14 01:01:26.000000000 +0800
Change: 2024-06-05 10:39:09.423416410 +0800
Birth: -
biao@ubuntu:~/test/ext4/ext4_simulator/test4$
定位到索引所在的位置:
145 * 4096 +(16-1)*256 = 593,920 + 3,840 = 597,760 = 0x91F00
索引節點資料
*
00091f00 a4 81 e8 03 7f 5e 19 00 cd cf 5f 66 cd cf 5f 66 |.....^...._f.._f|
00091f10 66 47 42 66 00 00 00 00 e8 03 01 00 b0 0c 00 00 |fGBf............|
00091f20 00 00 08 00 01 00 00 00 0a f3 01 00 04 00 00 00 |................|
00091f30 00 00 00 00 00 00 00 00 96 01 00 00 b5 84 00 00 |................|
00091f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
i_block 的偏移量是0x28,對i_block的資料進行解析:
將邏輯塊0開始的0x196個block對映到物理0x84b5開始的0x196個物理塊中
0x84b5 = 33973
33973 * 4096 = 139,153,408 = 0x84B 5000
檢視檔案系統的0x84b5 block資料,與0033.media檔案的資料是相同的
第 0x84b5 block
biao@ubuntu:~/test/ext4$ hexdump -s 139153408 -n 4096 -C ext4_image.img
084b5000 01 00 00 00 25 25 01 00 7a 34 9e 74 8f 01 00 00 |....%%..z4.t....|
084b5010 8c d1 0f f2 ff ff ff ff 00 00 00 01 40 01 0c 01 |............@...|
084b5020 ff ff 01 40 00 00 03 00 90 00 00 03 00 00 03 00 |...@............|
084b5030 96 bc 09 00 00 00 01 42 01 01 01 40 00 00 03 00 |.......B...@....|
084b5040 90 00 00 03 00 00 03 00 96 a0 01 20 20 05 11 67 |........... ..g|
084b5050 be e4 4a 17 25 05 05 05 e1 00 00 03 00 01 00 00 |..J.%...........|
084b5060 03 00 14 2f 84 02 08 00 00 00 01 44 01 c0 73 c0 |.../.......D..s.|
084b5070 c6 d9 00 00 00 01 26 01 ac 39 80 1f cd 51 b5 b2 |......&..9...Q..|
084b5080 70 02 84 80 26 99 cd b5 f6 00 cf a3 06 b7 71 6b |p...&.........qk|
0033.media
biao@ubuntu:~/test/ext4/ext4_simulator/test4$ hexdump -s 0 -n 4096 -C 0033.media
00000000 01 00 00 00 25 25 01 00 7a 34 9e 74 8f 01 00 00 |....%%..z4.t....|
00000010 8c d1 0f f2 ff ff ff ff 00 00 00 01 40 01 0c 01 |............@...|
00000020 ff ff 01 40 00 00 03 00 90 00 00 03 00 00 03 00 |...@............|
00000030 96 bc 09 00 00 00 01 42 01 01 01 40 00 00 03 00 |.......B...@....|
00000040 90 00 00 03 00 00 03 00 96 a0 01 20 20 05 11 67 |........... ..g|
00000050 be e4 4a 17 25 05 05 05 e1 00 00 03 00 01 00 00 |..J.%...........|
00000060 03 00 14 2f 84 02 08 00 00 00 01 44 01 c0 73 c0 |.../.......D..s.|
00000070 c6 d9 00 00 00 01 26 01 ac 39 80 1f cd 51 b5 b2 |......&..9...Q..|
00000080 70 02 84 80 26 99 cd b5 f6 00 cf a3 06 b7 71 6b |p...&.........qk|
(八) Directory Entries目錄項
(1)根目錄
透過上面《圖7.2 特殊索引節點》我們知道根目錄的inode是2,檢視根目錄的索引節點位置:
根目錄 inode 位置
145 * 4096 +(2-1)*256 = 593,920 + 256 = 594,176 = 0x91100
根目錄 inode 資料
*
00091100 ed 41 00 00 00 10 00 00 77 be 5f 66 e5 5d 50 66 |.A......w._f.]Pf|
00091110 e5 5d 50 66 00 00 00 00 00 00 07 00 08 00 00 00 |.]Pf............|
00091120 00 00 08 00 04 00 00 00 0a f3 01 00 04 00 00 00 |................|
00091130 00 00 00 00 00 00 00 00 01 00 00 00 91 10 00 00 |................|
00091140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0x1091 = 4,241
4,241 * 4096 = 17,371,136 = 0x109 1000
biao@ubuntu:~/test/ext4$ hexdump -s 17371136 -n 4096 -C ext4_image.img
01091000 02 00 00 00 0c 00 01 02 2e 00 00 00 02 00 00 00 |................|
01091010 0c 00 02 02 2e 2e 00 00 0b 00 00 00 14 00 0a 02 |................|
01091020 6c 6f 73 74 2b 66 6f 75 6e 64 00 00 0c 00 00 00 |lost+found......|
01091030 10 00 05 02 74 65 73 74 31 00 00 00 01 20 00 00 |....test1.... ..|
01091040 10 00 05 02 74 65 73 74 32 00 00 00 02 20 00 00 |....test2.... ..|
01091050 10 00 05 02 74 65 73 74 33 00 00 00 03 20 00 00 |....test3.... ..|
01091060 98 0f 05 02 74 65 73 74 34 00 00 00 00 00 00 00 |....test4.......|
01091070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
01091ff0 00 00 00 00 00 00 00 00 0c 00 00 de 67 85 5b 11 |............g.[.|
01092000
biao@ubuntu:~/test/ext4$
可以看到根目錄上的所有資訊,下面是對根目錄的目錄項進行解析
同樣的方法,可以定位到各子目錄上的資訊。
(九) ext4 實現原理
1. 檔案系統初始化和掛載
- 掛載檔案系統時,核心讀取超級塊以獲取檔案系統的基本資訊。
- 核心讀取塊組描述符,以瞭解每個塊組中後設資料的佈局。
2. 建立檔案
- 查詢空閒 inode:透過檢查 inode 點陣圖找到一個空閒的 inode,並在 inode 點陣圖中標記為已使用。
- 分配資料塊:透過檢查塊點陣圖找到空閒的資料塊,並在塊點陣圖中標記為已使用。
- 更新 inode:將新檔案的後設資料寫入 inode 表中的相應位置。
- 更新目錄項:在目標目錄的 inode 資料塊中新增一個新的目錄項,包含檔名和對應的 inode 號。
3. 讀取檔案
- 查詢 inode:根據檔名在目錄項中查詢對應的 inode 號,然後讀取 inode 表中的相應 inode。
- 讀取資料塊:根據 inode 中的塊指標,讀取檔案資料塊。
4. 刪除檔案
- 釋放資料塊:根據 inode 中的塊指標,更新塊點陣圖以標記這些塊為空閒。
- 釋放 inode:在 inode 點陣圖中將該 inode 標記為空閒。
- 更新目錄項:從目錄的 inode 資料塊中刪除相應的目錄項。
5. 檔案系統檢查和修復
fsck
工具利用超級塊、塊組描述符、塊點陣圖和 inode 點陣圖來檢查檔案系統的一致性。- 修復損壞的結構,例如修復丟失的塊或 inode 標記。
(十) 優缺點
優點
- 效能改進:
- 延遲分配:資料塊分配延遲到實際寫入時進行,從而最佳化檔案碎片化和提高寫入效能。
- 多塊分配:同時分配多個塊,提高大檔案寫入速度,減少碎片。
- 快速 fsck:改進的檔案系統檢查工具
fsck
能夠更快地進行一致性檢查,減少系統恢復時間。
- 大檔案和大檔案系統支援:
- 支援單個檔案最大 16 TB 和檔案系統最大 1 EB 的儲存容量,適合現代大規模儲存需求。
- 向後相容:
- Ext4 檔案系統可以向後相容 Ext3 和 Ext2,允許使用者在無需格式化的情況下從這些檔案系統無縫遷移到 Ext4。
- 日誌功能:
- 支援後設資料日誌和資料日誌,有助於提高檔案系統的可靠性和防止資料損壞。
- 線上碎片整理:
- 支援線上碎片整理工具,可以在系統執行時整理檔案碎片,提高檔案訪問速度。
- Extent:
- 使用 extent 來代替傳統的塊對映方式,提高了大檔案的儲存效率,減少了檔案碎片。
- 防止檔案系統崩潰:
- 使用日誌和其他安全機制,確保檔案系統崩潰後能快速恢復。
缺點
- 碎片整理效率:
- 儘管支援線上碎片整理,但與一些現代檔案系統(如 Btrfs、ZFS)相比,Ext4 的碎片整理效率仍然較低。
- 新特性限制:
- 雖然 Ext4 引入了許多改進,但由於其設計上依賴於傳統的 Ext 系列架構,它在引入某些現代檔案系統的新特性(如快照、資料去重、內建 RAID 等)時受到限制。
- 檔案系統擴充套件:
- 儘管 Ext4 支援非常大的檔案和檔案系統,但線上擴充套件檔案系統的操作複雜度較高,尤其是在需要縮小檔案系統時。
- 後設資料快取:
- Ext4 在快取機制上的設計導致在高負載環境下,後設資料操作(如建立或刪除大量小檔案)的效能可能受到影響。
結尾
上面只是簡單的介紹了ext4檔案系統的基礎內容,一些更加詳細的內容,比如日誌、碎片整理、軟連線與硬連線等等都還沒有介紹,受篇幅限制,這些以後再介紹吧。