mkfs.ext4 -G 选项有什么作用?

Sac*_*a K 5 linux ext4

在 Microsoft在 Hyper-V运行 Linux最佳实践页面上,建议使用 ext4 而不是 ext3 并使用mkfs.ext4 –G 4096 /dev/sdX1. 这究竟是在做什么?

手册页说每组的块(-g 选项)不应该改变,使用tune2fs -l我可以看到它设置为 32768。这意味着 128 到 512 GiB 之间的块组(取决于块大小)将被打包在一起,但是这与默认值相比如何?手册页没有说明默认值是什么,我也没有在tune2fs -l输出中看到它。

小智 6

该选项与的选项-g非常非常不同。-Gmkfs.ext4

微软绝对建议更改-G最佳实践文档中的选项,而不是-g明显不鼓励使用/更改/调整的选项,正如您在手册页中指出的那样。

-G 组数

指定将打包在一起以在 ext4 文件系统中创建更大的虚拟块组(或“flex_bg 组”)的块组的数量。这提高了元数据局部性和元数据繁重工作负载的性能。组的数量必须是 2 的幂,并且只有在启用了 flex_bg 文件系统功能时才可以指定。

您可以通过运行dump2fs -h /my/file/system并查找来查看默认值Flex block group size。例如,对于我的ext4分区,结果是:

Flex block group size: 16

这正是 Theodore Tso 在第 17 页他的演讲“加速 ext4 中的文件系统检查”中所说的内容。

默认情况下 mke2fs 使用 16 个块组/flex_bg 组(必须是 2 的幂)

至于它的作用,您可以在Ext4 文件系统概述和 Ext4 在线碎片整理前瞻(从第 14 页开始)中看到fsck大型文件系统操作的性能差异。

根据 Linux 内核 wiki,其工作原理是将元数据分组在一起以加快加载速度,并使较大的文件在磁盘上连续。ext4 内核 wiki:灵活的块组

该 wiki 条目引用的最后一部分enable larger files to be contiguous on disk是关键部分,解释了为什么将其设置为 4096 被认为是 Hyper-V 最佳实践,因为它允许动态 VHDX 文件的实际磁盘空间使用量较小,因为这些文件是“虚拟硬盘上的文件系统不会产生尽可能多的碎片,并且数据结构会更有效地分组。

有关 Linux 方面 Microsoft 最佳实践建议背后的更多详细信息,请参阅 OpenSuSE 12.1 发行说明。在 Windows Server和 Red Hat Enterprise Linux 6 技术说明6.4 虚拟化上格式化大磁盘分区。

我希望这有助于消除您的困惑并回答您的问题。=)