我有一个包含 2 个 3TB 磁盘的存储空间池。从此池中创建一个具有固定大小(非精简配置)的单个镜像卷,并在创建时设置为使用池中的所有空间。
现在,我想向同一个池添加 2 个 4TB 磁盘并扩展同一个卷。我似乎找不到涵盖此场景的文档。
该卷的总可用空间是多少?如果我成对添加驱动器,在同一个池中使用不同大小的驱动器会损失空间吗?
我的理解是,由于这是一列、两个副本的设置,只要成对添加相同大小的磁盘,我就不应该“在桌子上留下任何空间”,即使新对的大小与当前磁盘不同,但我似乎找不到任何文档来证实这一点。
答案1
这是您要查找的文件:什么是列以及存储空间如何决定使用多少列?和存储空间 - 性能设计和 存储空间:了解存储池扩展
我将首先引用所提供的文章中的两件事:
“笔记Windows Server 2012 R2 及更早版本中的存储空间默认使用尽可能最大的列数,具体取决于您拥有的磁盘数量和您选择的弹性类型。” A
“要扩展[存储池],就需要有适当数量的列来适应磁盘的布局。” b
换句话说:如果您将物理磁盘添加到存储池,Windows 将保留该池中的列数。您添加的每一行磁盘都必须为每列提供一个磁盘。
因此,如果您使用 2x3TB 驱动器创建镜像,则最大列数为 1。列与磁盘的关联因为比例是 1:2。这样就形成了一个 3TB 的虚拟磁盘。
现在,如果您将另外两个物理 4TB 磁盘添加到存储池并将它们添加到虚拟驱动器,Windows 将在不更改列数的情况下添加它们。一个磁盘将添加到列中,另一个磁盘将添加到镜像中。从而将虚拟磁盘再扩展 4TB。您的磁盘布局将如下所示:
因此,如果您成对添加同一池中混合大小的驱动器,则不会丢失任何空间。甚至恰恰相反!因为如果你一次性添加它们,就会发生两件事:
- Windows 会创建两列(参见上面的注释)。
- Windows 会限制可用空间。可能通过将每列限制为最小列的大小来实现。[*]
您的布局看起来会像这样,仅提供 6TB,而不是 7TB:
[*] 现在,我不确定限制究竟是如何运作的,以及新大小是如何计算的。我认为这与条带写入磁盘的方式有关。因为如果您在虚拟磁盘上写入 512 KB 的数据,则每列并行接收 256 KB 的条带。如果其中一列已满,则这是不可能的。所以这就是为什么我猜测存储池中的所有列必须具有相同的大小。至少对于 3TB+3TB+4TB+4TB 的磁盘来说,这实际上是正确的,我检查过了。
答案2
如果您反向工作 - 您有一个 3TB 的虚拟磁盘,数据是单向镜像的,您有 2 个大小相同的底层块。正如您所说,定义为一个 2 列的副本。您的其余假设完全正确 - 要利用最大空间,您需要添加 2 个相等体积的块,您可以添加 2 个不等体积的磁盘,但虚拟卷可以消耗的最大值将是该对中最小卷的最大值 - 您可以使用其他选项用剩余部分制作第二个虚拟磁盘,但您不能使用原始虚拟磁盘中的剩余部分。因此,边界指标是虚拟磁盘跨越的物理磁盘数 + 1 或 2 向镜像等选项。
因此,对于具有单向镜像的 3 TB 块上的 9 TB 虚拟磁盘,将需要 3 x 3 用于虚拟磁盘 + 3 x 3 用于镜像,但由于这是单列,因此更容易将底层块可视化为具有 3 行的单列(对于单向镜像,第二列的行数相等)。
所以总而言之,如果您想使用具有单向镜像的单个虚拟磁盘中的所有可用空间,您将必须以相同的大小添加到每一列 - 如果您使用多个虚拟磁盘,那么您可以添加不同大小的磁盘并仍然使用所有可用空间。