写点什么

一文看懂 linux ext4 文件系统工作原理

作者:EquatorCoco
  • 2024-06-11
    福建
  • 本文字数:9401 字

    阅读完需:约 31 分钟

前言


Linux 系统中的 ext2、ext3、ext4 文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级。目前 ext4 是一个相对较成熟、稳定且高效的文件系统,适用于绝大部分规模和需求的 Linux 环境。


ext4 它突出的特点有:数据分段管理、多块分配、延迟分配、持久预分配、日志校验、支持更大的文件系统和文件大小。


ext4 文件系统的具体实现比较复杂,本文尝试用比较简单的方式用一篇文章的篇幅来简单地介绍一下它的工作原理。


(一)创建 ext 文件系统


为了分析 ext4 文件系统的内部结构和原理,这里我们在 Linux 中创建一个 ext4 文件系统镜像,然后通过 loop 虚拟设备将 ext4 镜像文件挂载到某个目录上。具体实现步骤如下:


  1. 创建一个 1GB 的文件

dd if=/dev/zero of=./ext4_image.img bs=1M count=1024
复制代码


  1. 将这个文件格式化成 ext4 文件系统格式

mkfs.ext4 ext4_image.img
复制代码


  1. 通过 Linux 的 loop 虚拟设备将文件挂载到目录上

sudo mount -o loop ext4_image.img /home/biao/test/ext4/ext4_simulator
复制代码


  1. dumpe2fs 查看文件系统基本信息

dumpe2fs ext4_image.img  
复制代码


输出内容信息(中间省略了部分内容):

dumpe2fs 1.44.1 (24-Mar-2018)Filesystem volume name:   <none>Last mounted on:          /home/biao/test/ext4/ext4_simulatorFilesystem UUID:          0169498e-f5f7-4fb8-9e9e-532088e41333Filesystem magic number:  0xEF53Filesystem 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_csumFilesystem flags:         signed_directory_hash Default mount options:    user_xattr aclFilesystem state:         cleanErrors behavior:          ContinueFilesystem OS type:       LinuxInode count:              65536Block count:              262144Reserved block count:     13107Free blocks:              247703Free inodes:              65517First block:              0Block size:               4096Fragment size:            4096Group descriptor size:    64Reserved GDT blocks:      127Blocks per group:         32768Fragments per group:      32768Inodes per group:         8192Inode blocks per group:   512Flex block group size:    16Filesystem created:       Fri May 24 17:18:57 2024Last mount time:          Wed Jun  5 19:15:36 2024Last write time:          Wed Jun  5 19:15:36 2024Mount count:              3Maximum mount count:      -1Last checked:             Fri May 24 17:18:57 2024Check interval:           0 (<none>)Lifetime writes:          6997 kBReserved blocks uid:      0 (user root)Reserved blocks gid:      0 (group root)First inode:              11Inode size:               256Required extra isize:     32Desired extra isize:      32Journal inode:            8Default directory hash:   half_md4Directory Hash Seed:      0faf0e8c-f385-4ecd-b3a4-db2a3329e121Journal backup:           inode blocksChecksum type:            crc32cChecksum:                 0x32dc1b70Journal features:         journal_64bit journal_checksum_v3Journal size:             32MJournal length:           8192Journal sequence:         0x00000017Journal start:            1Journal checksum type:    crc32cJournal 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 的总体磁盘布局如下:


图 2.1 ext4


总体布局其中,每个 Group 中又有 superblock、Group descriptors、bitmap、Inode table、usrer data、还有一些保留空间,细分之后的空间布局如下:


图 2.2 ext4 group 布局


从上图可以看出:


  1. Backup superblock、Group descriptors、Reserved GDT 是分布在 1、3、5、7 这几个 Group 中,2、4、6Group 并没有这些信息。

  2. 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$ 
复制代码


对超级块的部分数据进行解析:


表 3.1 superblock 参数解析


从上表可以看出 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.img00001000  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 的详细信息。


图 4.1 Group_descriptors 参数解析


一个 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.img00081000  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  |................|*00082000biao@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.img00089000  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  |................|*0008a000biao@ubuntu:~/test/ext4$ 
复制代码


(七) Inode table 索引节点表


(1)索引节点介绍


索引节点表是相对比较复杂的一个元文件,从上面《1.1 ext4 文件系统信息表》我们可以知道:

Inode size:               256Inode table at 145-656 (+145)
复制代码


  • 一个索引节点的大小为 256Byte

  • 从 Group 0 信息中可以知道 Group 0 的索引表位置在 145-656 块的位置


查看索引节点信息:

biao@ubuntu:~/test/ext4$ hexdump -s 593920 -n 4096 -C ext4_image.img00091000  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 个索引节点的参数进行解析:


图 7.1 Inode table 参数解析


在 ext4 文件系统中,0~11 号索引是特殊定义的索引节点:


图 7.2 特殊索引节点


(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 filesroot@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 fileDevice: 719h/1817d      Inode: 16          Links: 1Access: (0644/-rw-r--r--)  Uid: ( 1000/    biao)   Gid: ( 1000/    biao)Access: 2024-06-05 10:39:09.000000000 +0800Modify: 2024-05-14 01:01:26.000000000 +0800Change: 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 的数据进行解析:


图 7.4 0033.media i_block


将逻辑块 0 开始的 0x196 个 block 映射到物理 0x84b5 开始的 0x196 个物理块中 0x84b5 = 3397333973 * 4096 = 139,153,408 = 0x84B 5000


查看文件系统的 0x84b5 block 数据,与 0033.media 文件的数据是相同的


第 0x84b5 block

biao@ubuntu:~/test/ext4$ hexdump -s 139153408 -n 4096 -C ext4_image.img084b5000  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  |................|*
复制代码


图 8.1 根目录 inode


通过 inode 上 i_block 信息我们可以知道,根目录 inode 是将逻辑块 0 开始的 1 个 block 映射到物理块号 0x1091 开始的 1 个 block


0x1091 = 4,2414,241 * 4096 = 17,371,136 = 0x109 1000

biao@ubuntu:~/test/ext4$ hexdump -s 17371136 -n 4096 -C ext4_image.img01091000  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.[.|01092000biao@ubuntu:~/test/ext4$ 
复制代码


可以看到根目录上的所有信息,下面是对根目录的目录项进行解析


图 8.2 根目录项解析


同样的方法,可以定位到各子目录上的信息。


(九) 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 标记。


(十) 优缺点


优点


  1. 性能改进延迟分配:数据块分配延迟到实际写入时进行,从而优化文件碎片化和提高写入性能。多块分配:同时分配多个块,提高大文件写入速度,减少碎片。快速 fsck:改进的文件系统检查工具 fsck 能够更快地进行一致性检查,减少系统恢复时间。

  2. 大文件和大文件系统支持:支持单个文件最大 16 TB 和文件系统最大 1 EB 的存储容量,适合现代大规模存储需求。

  3. 向后兼容:Ext4 文件系统可以向后兼容 Ext3 和 Ext2,允许用户在无需格式化的情况下从这些文件系统无缝迁移到 Ext4。

  4. 日志功能:支持元数据日志和数据日志,有助于提高文件系统的可靠性和防止数据损坏。

  5. 在线碎片整理:支持在线碎片整理工具,可以在系统运行时整理文件碎片,提高文件访问速度。

  6. Extent:使用 extent 来代替传统的块映射方式,提高了大文件的存储效率,减少了文件碎片。

  7. 防止文件系统崩溃:使用日志和其他安全机制,确保文件系统崩溃后能快速恢复。


缺点


  1. 碎片整理效率:尽管支持在线碎片整理,但与一些现代文件系统(如 Btrfs、ZFS)相比,Ext4 的碎片整理效率仍然较低。

  2. 新特性限制:虽然 Ext4 引入了许多改进,但由于其设计上依赖于传统的 Ext 系列架构,它在引入某些现代文件系统的新特性(如快照、数据去重、内置 RAID 等)时受到限制。

  3. 文件系统扩展:尽管 Ext4 支持非常大的文件和文件系统,但在线扩展文件系统的操作复杂度较高,尤其是在需要缩小文件系统时。

  4. 元数据缓存:Ext4 在缓存机制上的设计导致在高负载环境下,元数据操作(如创建或删除大量小文件)的性能可能受到影响。


结尾


上面只是简单的介绍了 ext4 文件系统的基础内容,一些更加详细的内容,比如日志、碎片整理、软连接与硬连接等等都还没有介绍,受篇幅限制,这些以后再介绍吧。


文章转载自:liwen01

原文链接:https://www.cnblogs.com/liwen01/p/18237062

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
一文看懂linux ext4文件系统工作原理_Linux_EquatorCoco_InfoQ写作社区