什么是mkfs.ext4 -G选项?

根据微软在Hyper-V上运行Linux的最佳实践,build议使用ext4而不是ext3,并使用mkfs.ext4 –G 4096 /dev/sdX1 “指定组数为4096”。 这是干什么的?

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

-g选项与mkfs.ext4-G选项非常不同。

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

-G组数

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

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

Flex block group size: 16

这正是Theodore Tso所说的应该从他的演示文稿中加速第17页的ext4中的文件系统检查 。

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

至于它的function,您可以从第14页开始,在“Ext4文件系统概述”和“Ext4在线碎片整理预测”中查看大型文件系统上fsck操作的性能差异。

根据linux内核维基百科,这是通过将元数据分组在一起以加快载入速度,并使较大的文件在磁盘上连续。 ext4内核wiki:灵活块组

该维基条目引用的最后一部分enable larger files to be contiguous on disk是关键的一部分,为什么它被认为是一个Hyper-V的最佳实践,将其设置为4096,因为它允许使用较小的dynamic磁盘空间VHDX文件,因为文件在虚拟硬盘上的文件系统上没有多less碎片,并且数据结构被更有效地分组。

有关Linux端Microsoft最佳实践build议背后原因的更多细节可以在OpenSuSE 12.1发行说明中find。 格式化Windows Server上的大型磁盘分区和Red Hat Enterprise Linux 6.4技术说明6.4虚拟化 。

我希望这有助于澄清你的困惑并回答你的问题。 =)