在 VmWare/Linux 中创建“奇数”大小的磁盘

Joe*_*Joe 2 linux performance storage lvm vmware-vcenter

我相信我患有“一切都必须是 2 的幂”综合症。当要求在 VmWare 中为 VM 创建 30G 磁盘时,我想创建一个 32G 磁盘。如果有人需要使用 LVM 的 256G 存储空间,我会创建 1 256、2 128 或 4 64...

问题很简单,创建“奇数”大小的磁盘是否有性能影响或缺点,即使我将它们放入 Linux 上的卷组?如果有人要求 80G 是否可以创建 10、20 和 50 来完成它?或者如果可以的话,我应该尝试坚持 2 的幂吗?

dsm*_*k80 6

我宁愿建议您密切关注分区是否是所谓的 I/O 对齐,因为这可能会真正影响 I/O 性能。如今,安装程序或配置向导通常不会在某些"power of 2"边界上自动对齐分区,但当您手动创建分区时,了解它的工作原理可能仍然很有用。

我将尝试解释从虚拟环境借用的简单示例的概念。为简单起见,让我们假设 VMware vSphere 基础设施和 VMFS 文件系统。我们总共必须考虑三层 - 一个磁盘阵列,它有一定大小的块用于请求数据,VMFS 文件系统有一定大小的块,最后是一个以块/集群组织的客户操作系统文件系统。

通常,您不必花时间将 VMFS 文件系统与磁盘阵列对齐,因为它会在您使用 vCenter 创建新的 VMFS 数据存储时自动执行。来宾操作系统的情况更糟。下面是未对齐图层的图片:

在此处输入图片说明

当来宾操作系统读取/写入单个块/集群时,底层 hypervizor/磁盘阵列必须从 VMFS 文件系统请求一个块和两个磁盘阵列块,因为该块跨越多个块。这可能意味着从多个磁盘轴读取或写入,因为这些块可能会根据 RAID 配置在多个磁盘上进行条带化。这当然不是最佳配置。更好的是对齐的:

在此处输入图片说明

然后,一个文件系统块请求生成一个磁盘阵列块请求。尽管如此,大多数现代操作系统都记得在安装过程中自动 I/O 对齐分区。例如,Windows Server 2008 或 RedHat Enterprise Linux 6 会这样做,但 Windows Server 2003 或更早的发行版则不会。

所以仍然值得记住它,因为自动 I/O 对齐通常取决于存储设备的特性来指示它们的首选 I/O 对齐和 I/O 块大小。现代 Linux I/O 堆栈(例如 RHEL 6、parted、LVM、mkfs)可以使用此类信息并自动执行。但是如果它没有按预期工作,你应该手工完成。