mke2fs命令的输出如下
root@localhost:~# mke2fs /dev/xvdf
mke2fs 1.42.9 (4-Feb-2023)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
我不明白的是这一行
每组 32768 个块,每组 32768 个片段
据我了解,硬盘中的扇区(通常是512B)首先被分成小组。扇区组称为块。在每个块组中我有 32768 个块。
我不明白这里的是碎片。
这些是什么?它意味着什么?以及是否可以改变我的 FS 中的片段。
答案1
Linux 刻意尝试与 UNIX 兼容。我们在这里讨论的是unixism,ext2/ext3/ext4 文件系统从未发现这个概念足够重要以实现。
1996 年,McKusick 等人。解释了第 14 页上的概念。 《4.4 BSD操作系统的设计与实现》第271页。
本节首先观察到大块大小可能会有所帮助。因此,当从一对文件系统(一个具有 1-KiB,另一个具有 8-KiB 块大小)读取大文件时,我们会看到较大块大小的运行时间更快,开销更少。
但这是有代价的,因为大多数“文件系统主要包含小文件。统一的大块大小会浪费空间。”回想一下,当时和现在购买 1 TB 磁盘存储所花费的美元明显不同。
它还对一些当时典型的文件系统进行了研究,这些文件系统的中值文件大小 < 2 KiB,平均大小为 22 KiB。这建议将一个小文件或较大文件的尾部放入“片段”中。我们可能在 8 KiB 块中有八个 1 KiB 片段,存储八个单独文件的内容。
tl;dr:片段背后的动机是避免浪费大部分 8 KiB 块,这些块只会在小文件末尾存储零。不断变化的存储经济学改变了动机。
答案2
这Debian Stretch 中 mke2fs 的手册页(e2fsprogs 版本 1.43.4)说
mke2fs 接受
-f
选项[指定片段大小],但目前忽略它,因为第二个扩展文件系统尚不支持片段。
而较新的没有任何提及碎片,所以......它可能实际上并不存在。但我不知道那会是什么。