关于微软在 Hyper-V 上运行 Linux 的最佳实践页面建议使用 ext4 而不是 ext3,并使用“指定组数为 4096” mkfs.ext4 –G 4096 /dev/sdX1
。这到底在做什么?
手册页说每组的块数(-g 选项)不应更改,使用时tune2fs -l
我可以看到它设置为 32768。这意味着 128 到 512 GiB(取决于块大小)之间的块组将打包在一起,但这与默认值相比如何?手册页没有说明默认值是多少,我在输出中tune2fs -l
也没有看到它。
答案1
该选项与的选项-g
有非常非常大的不同。-G
mkfs.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 在他的演讲中所说的加快 ext4 中的文件系统检查在第17页。
默认情况下,mke2fs 使用 16 个块组/flex_bg 组(必须是 2 的幂)
至于它的作用,你可以看到fsck
在大型文件系统上操作的性能差异Ext4 文件系统概述和 Ext4 在线碎片整理展望,从第 14 页开始。
根据 Linux 内核 wiki,其通过将元数据分组在一起来实现更快的加载,并使更大的文件在磁盘上连续。ext4 内核 wiki:灵活块组
该 wiki 条目引述的最后一部分enable larger files to be contiguous on disk
是为什么将其设置为 4096 被视为 Hyper-V 最佳实践的关键部分,因为它允许动态 VHDX 文件使用更小的实际磁盘空间,因为文件在虚拟硬盘上的文件系统上没有那么多碎片,并且数据结构更有效地分组。
关于微软在 Linux 方面最佳实践建议背后的原因的更多详细信息,可以参阅 OpenSuSE 12.1 发行说明。在 Windows Server 上格式化大磁盘分区以及 Red Hat Enterprise Linux 6 技术说明6.4 虚拟化也。
我希望这有助于消除您的困惑并回答您的问题。=)