在Windows Server 2012 R2上添加驱动器后,存储池上的镜像虚拟磁盘无法展开

我最近已经开始将几个镜像的RAID1arrays转换成一个大的存储池。 我有两个2TB磁盘和两个3TB磁盘,总共10TB,镜像时应该给我5TB的可用空间。

我使用两个2TB磁盘和两个3TB磁盘之一启动存储池,使用最终的3TB磁盘作为旧数据的备份,以移至新的池化存储。 我在新池的顶部设置了“镜像”的虚拟磁盘,并且有一点小于3TB的可用空间。

将备份从额外的3TB驱动器移动到新的池后,我清理它,并将其添加到池中。 但是,我现在无法扩展镜像虚拟磁盘以利用增加的空间。

不幸的是,由于我的首发声望,我无法发布图片,但是我的游泳池显示了9.09TB的容量和2.64TB的可用空间。 当试图扩展虚拟磁盘时,允许的最大容量为3.22TB,而在添加3TB驱动器之前只有一根头发。 物理磁盘显示,几乎没有新的磁盘正在使用,其余的已满。

我已经在其他地方读过,列数可以限制如何扩展虚拟磁盘,但是我的列数设置为1,这应该允许扩展到任意数量的磁盘。

这里是我的虚拟磁盘的PowerShell输出:

ObjectId : {1}\\SERVER\root/Microsoft/Windows/Storage/Providers_v2\SPACES_VirtualDisk.ObjectId ="{fdf741fe-cae8-11e4-80b4-806e6f6e6963}:VD:{d734cabd-cabf-11e4-80bf-000c41ebb9a3}{ d734cad6-cabf-11e4-80bf-000c41ebb9a3}" PassThroughClass : PassThroughIds : PassThroughNamespace : PassThroughServer : UniqueId : D6CA34D7BFCAE41180BF000C41EBB9A3 Access : Read/Write AllocatedSize : 3545495502848 DetachedReason : None FootprintOnPool : 7090991005696 FriendlyName : McAfee Primary HealthStatus : Healthy Interleave : 262144 IsDeduplicationEnabled : False IsEnclosureAware : False IsManualAttach : False IsSnapshot : False LogicalSectorSize : 4096 Name : NameFormat : NumberOfAvailableCopies : NumberOfColumns : 1 NumberOfDataCopies : 2 OperationalStatus : OK OtherOperationalStatusDescription : OtherUsageDescription : ParityLayout : Unknown PhysicalDiskRedundancy : 1 PhysicalSectorSize : 4096 ProvisioningType : Fixed RequestNoSinglePointOfFailure : False ResiliencySettingName : Mirror Size : 3545495502848 UniqueIdFormat : Vendor Specific UniqueIdFormatDescription : Usage : Other WriteCacheSize : 0 PSComputerName : 

这里是池的powershell输出:

 PS H:\> Get-StoragePool -FriendlyName "McAfee Primary Pool" FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly ------------ ----------------- ------------ ------------ ---------- McAfee Primary Pool OK Healthy False False PS H:\> Get-StoragePool -FriendlyName "McAfee Primary Pool" | FL ObjectId : {1}\\SERVER\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StoragePool.ObjectId ="{fdf741fe-cae8-11e4-80b4-806e6f6e6963}:SP:{d734cabd-cabf-11e4-80bf-000c41ebb9a3}" PassThroughClass : PassThroughIds : PassThroughNamespace : PassThroughServer : UniqueId : {d734cabd-cabf-11e4-80bf-000c41ebb9a3} AllocatedSize : 7092601618432 ClearOnDeallocate : False EnclosureAwareDefault : False FriendlyName : McAfee Primary Pool HealthStatus : Healthy IsClustered : False IsPowerProtected : False IsPrimordial : False IsReadOnly : False LogicalSectorSize : 4096 Name : OperationalStatus : OK OtherOperationalStatusDescription : OtherUsageDescription : PhysicalSectorSize : 4096 ProvisioningTypeDefault : Fixed ReadOnlyReason : None RepairPolicy : Parallel ResiliencySettingNameDefault : Mirror RetireMissingPhysicalDisks : Auto Size : 9998683865088 SupportedProvisioningTypes : {Thin, Fixed} SupportsDeduplication : False ThinProvisioningAlertThresholds : {70} Usage : Other Version : Windows Server 2012 R2 WriteCacheSizeDefault : Auto WriteCacheSizeMax : 107374182400 WriteCacheSizeMin : 0 PSComputerName : FileSystem : Unknown 

任何想法如何我可以回收我的空间?

我遇到了同样的问题。 Neograph的评论在这种情况下是无关紧要的,他谈论的是传统的Windows Server磁盘镜像,而不是Storage Spaces。 精简configuration在这种情况下也是非常不相关的。 你可以用它作为解决方法,但是我认为更谨慎的计划在预算和性能方面都会更好,只要阅读,你就会看到。

经过一段时间在服务器pipe理器中阅读和玩耍之后,我想我已经知道了发生了什么事情。 事情是,SS有这个东西叫“列”。 这定义了跨越多less个磁盘数据。 如果你的虚拟磁盘是用4列创build的,那么数据只能分布在具有简单布局(即RAID0)的4个磁盘或者具有双向镜像 (即RAID10)的8个磁盘上,而不是全部。 现在这可能会让来自传统硬件RAID(比如我)的人感到困惑,但事实就是如此。

注意:从现在开始,我将列的列数作为列的大小,因为这对我来说更直观。

所以无论如何,列大小还定义了如何扩展虚拟磁盘。 显然,如果你当前的VD有4个磁盘组(=列大小为4),则不能通过添加2个新磁盘来添加“半”组。 所以扩展所需的磁盘数量基本上是

 nx NumberOfColumns x NumberOfDataCopies 

所以如果你有一个双向镜像和一个1的列大小,你只能添加磁盘对。 如果镜像的列大小为3,则只能添加6,12,18个磁盘。

据我所知,VD的默认列大小是磁盘数除以拷贝数,但最多8,例如,如果你有一个双向镜像10磁盘,列大小将是5,如果你有16磁盘,列大小将为8,但是如果您有24个磁盘,列大小仍然是8 – 默认情况下。 注意:你可以在VD属性下检查这些数字( NumberOfColumnsNumberOfDataCopies属性不详细 )。

这里来了很多头痛的问题:

  • 默认的列大小要求你增加磁盘数如果你想扩大VD(在大多数情况下)
  • 如果在创build池时将磁盘使用设置为手动 ,则只能select列大小
  • 默认磁盘使用率是自动的 (当然)
  • 一旦VD创build,你就不能改变列的大小
  • 创build池后,您不能将磁盘使用更改为手动

因此,要正确设置,您需要删除:

  • 音量
  • 虚拟磁盘
  • 存储池

即一切。 作为旁注,如果磁盘使用被设置为自动,条带大小(在SS中称为Interleave大小 )也是不可用的。

现在你可能想知道为什么会有人使用大于1的列大小。 答案当然是性能。 列大小越大,performance越好。 事实上,这可能是相当戏剧性的,这是一个列1和6列的基准:

NumberOfColumns:1

NumberOfColumns:6

你需要明智的计划。 只有使用较高的列大小,如果您确信一旦磁盘空间用完,您将能够购买大量的磁盘。

关于这个话题的一些很好的解读

  • 逐步:如何扩大和调整双向镜像存储分层空间?
  • 存储空间 – 性能devise

现在我不能倒下,但我想概述一下,在bviktors post中给出的基本信息是错误的 – 他仍然Raid中说, 你不能用半个磁盘组来扩展

  • 如果您有一个4列存储池 – 您可以使用任意数量的磁盘,从4开始。
  • 存储空间将永远利用您拥有的所有磁盘!
  • 列数只是定义了同时写入多less个磁盘数据(这被称为条带化
  • 下一个Stripe (默认情况下,大小为256 KB,称为Interleave )可以(也将会)写入4个不同的磁盘!

因此,要扩展4列的存储池 – 不需要添加 4个磁盘 – 只需要确保4个磁盘剩余的磁盘空间保留在池中

所以,如果1满了,而剩下3个空间,那么在添加一个磁盘之后,这个池将会重新开始运行!

(这可以根据需要混合容量 – 不需要保持相同磁盘大小的RAID)

作为最佳做法 ,您应该始终添加更多的磁盘,而不是#NumberOfDataCopies * #NumberofColumns将是:

考虑一个2列2复制磁盘 – 它至less需要4个磁盘。 如果你丢失了一个磁盘,你仍然可以访问你的数据 – 但是你不能再写任何东西,因为你没有剩下4列可以存储数据的地方!

考虑一下,你可能已经添加了5个磁盘到这个池(根据存储空间子系统的大小使用磁盘,使用最好的方式填充所有磁盘同时达到100%) – 丢失一个磁盘仍然保留数据 – 并保持您的池为新的写入工作,因为您仍然有最less4个左列。

此外,这可以让您在一个磁盘出现故障时立即重build池,而无需先购买新磁盘!

  Set-PhysicalDisk -FriendlyName "BrokenDisk" -Usage Retired Get-PhysicalDisk -FriendlyName "BrokenDisk" | Get-VirtualDisk | Repair-VirtualDisk -AsJob 

如果剩下足够的空间,数据现在将被“移动”到剩余的磁盘上。 重build之后:

  $disk = Get-PhysicalDisk -FriendlyName "BrokenDisk" Remove-PhysicalDisk -StoragePoolFriendlyName "My Pool" -PhysicalDisks $disk 

(您可以使用相同的命令来删除“function性”磁盘并将数据移动到其他磁盘 – 一旦添加磁盘,这将允许某种types的重新分配数据 – 但最终您将永远有一个磁盘“空”。但是在这种情况下,由于磁盘数量太less,无法工作,例如,在10个磁盘池中,您可以释放一个2 TB的磁盘,每个磁盘只需分配200 MB的磁盘空间。现在写空白的磁盘优先,存储空间基本上总是说:“我必须写:8块(NumberOfColumns * NumberOfDataCopies)大小为64 KB(交错/列数)每个 – 给我8个不同的磁盘这10个磁盘的使用率最低,所以我可以把数据扔到那里!“)


在你提到的例子中:

我使用两个2TB磁盘和两个3TB磁盘之一启动存储池,使用最终的3TB磁盘作为旧数据的备份,以移至新的池化存储。 我在新池的顶部设置了“镜像”的虚拟磁盘,并且有一点小于3TB的可用空间。

您开始使用2 + 2 + 3 TB – 存储空间现在将在3TB磁盘上存储大约1/3的数据,而不是在其他磁盘上,同时维护所需的镜像,因此它们填满了平均值。

(“2 Datacopies,1列:我必须写:2块(NumberOfColumns * NumberOfDataCopies)大小为256 KB(交错/列数)每个 – 给我两个不同的磁盘中的3个磁盘使用百分比最less,所以我可以把数据扔到那里!“)

物理磁盘显示,几乎没有新的磁盘正在使用,其余的已满。

现在,您的磁盘“几乎已满”,并添加了一个“新”磁盘:

 disk | size | usage 1 | 2TB | 1.9 TB 2 | 2TB | 1.9 TB 3 | 3TB | 2.8 TB 4 | 3TB | 0 TB 

现在,请记住,您在那里获得了一个镜像虚拟磁盘:如果要扩展该磁盘,则存储空间需要两个磁盘上至less有1MB ,才能将虚拟磁盘扩展1MB

您的游泳池现在将执行以下操作:每个数据写入磁盘4 – 每个COPY写入1,2或3,因为这会给你可用的磁盘空间。

在扩展(固定)这个时,将会评估下面的等式:

 MAX_EXTEND = Math.MIN(100+100+200 , 3000) = 400 MB 

精简configuration可以扩展到可用的物理尺寸之外 – 一旦写入了400 MB,它就会停止接受数据!

因此,对于100 + 100 + 200的空闲磁盘空间,您的虚拟磁盘只能增加 400MB,因为磁盘1,2,3已满,而磁盘4剩下2.6TB空间。 没有更多的存储空间来保持双镜运行。

现在,你只需要添加1个磁盘 – 假设8TB能够再次将你的虚拟磁盘扩展2.6TB(在磁盘4上是2.6,在“新的8TB磁盘”上是2.6)