本主题详述Windows 8,Windows 8.1和Windows Server 2012 ,Windows Server 2012 R2 的存储空间上的常见问题。 对于存储空间的基本信息,请参阅存储空间概述 。 有关性能方面的信息,请参阅存储空间-性能设计 。
有三种方式来管理存储空间和相关的存储池还有驱动器:
以下是存储空间的推荐配置的限制:
存储空间提供简单(simple)空间、镜像(mirror)空间和奇偶校验(parity)空间,每个都有独特的特点。
您可以使用各种通过串行连接SCSI(SAS),串行ATA(SATA),或USB连接的驱动器产品。抽象物理磁盘的存储层不兼容存储空间。 这包括VHD文件和虚机的直通磁盘,还有RAID实现的在物理层之上存储子系统层。 iSCSI和光纤通道控制器不被存储空间所支持。
如果使用RAID适配器,必须是在非RAID模并且禁用所有RAID功能。 这种适配器必须不抽象物理磁盘,缓存数据,或者隐藏任何附加设备如简单磁盘捆绑( just-a-bunch-of-disks)(JBOD)设备提供的箱体服务。存储空间是只兼容支持完全禁用所有RAID功能的适配器。
提供直接连接物理磁盘的盒子并且不实现RAID层或者以任何方式抽象磁盘层的存储阵列将兼容存储空间。这样的阵列,也被称为简单磁盘捆绑(just-a-bunch-of-disks,JBOD)。
如果存储空间要使用按插槽识别硬盘并且使用阵列故障和识别/定位指示灯的话,那么阵列必须支持SCSI机箱服务(SES)的第3版(SCSI Enclosure Services (SES) version 3)。有关兼容的阵列列表,请参阅Windows服务器硬件目录。
为了让部署支持更高级别的容错能力,存储空间支持将每个数据副本分配到特定的JBOD机箱中。这种能力被称为箱体意识。 使用箱体意识,当一个箱体故障或者脱机时,数据仍然在一个或多个箱体中可用。
若要存储空间使用箱体意识,你的环境必须满足以下要求:
Windows Server 2012 R2 中支持创建使用镜像(mirror)空间,奇偶校验(parity)空间和简单(simple)空间的群集存储池。Windows Server 2012 不支持奇偶校验(parity)空间的群集存储池。要创建集群存储空间,你的环境必须满足以下要求:
注意:SAS JBOD必须物理连接到所有使用存储池的群集节点。 直接附加存储(DAS)是无法连接到所有群集节点,因此无法用于使用储存空间的群集池。
在创建存储空间(虚拟磁盘)时,某些基本属性已经固定到位。 这些基本属性包括配置类型(精简或固定),复原类型(简单,镜像或奇偶校验),还有存储空间(虚拟磁盘)需求的条带(Striping)列数和条带交错(Interleave)。
创建一个存储空间(虚拟磁盘)后,你可以更改不影响基本参数的属性,如存储空间(虚拟磁盘)的大小和它的名字。
当磁盘发生故障时,Windows会在以下位置显示磁盘故障信息:
物理磁盘经常遇到不同程度的错误,从硬盘可以透明恢复并且不会中断或丢失数据的错误;到可能导致数据丢失的灾难性错误。更多信息,请参见存储空间如何响应物理磁盘上的错误。
为了便于管理,存储空间将记录某些事件到事件日志中。对于存储空间记录事件的详细信息,请参阅以下内容:
如果你使用在控制面板中存储空间项,替换物理磁盘非常简单,只需单击命令来移除旧的磁盘。 之后,你就可以立即断开磁盘。 在后台,存储空间利用复原重建你的数据。 移除磁盘有三个先决条件:
Get-PhysicalDisk -FriendlyName PhysicalDisk1 | Get-VirtualDisk
如果你使用Windows PowerShell,你必须执行以下步骤来移除旧的硬盘,假设你满足移除物理硬盘的先决条件。
以管理员身份打开Windows PowerShell会话。
输入以下命令,替换<diskname> 为硬盘的友好名字:
Set-PhysicalDisk -FriendlyName <diskname> -Usage Retired
如果池是集群,你需要在为池联机的群集资源的那个群集节点上运行此命令。
为每个依赖旧硬盘的存储空间(虚拟磁盘)输入下面的命令,替换 <virtualdiskname> 为存储空间(虚拟磁盘)的友好名字:
Repair-VirtualDisk -FriendlyName <virtualdiskname>
如果池是群集,在某个存储空间(虚拟磁盘)群集资源联机的群集节点上运行此命令,然后再次运行该命令在池群集资源联机的群集节点上。
在执行步骤5之前,你必须等待所有运行的修复任务完成。要检查修复工作的状态,请键入以下命令:
Get-StorageJob
键入以下命令:
Remove-PhysicalDisk -FriendlyName <diskname>
断开旧硬盘的物理连接。
存储空间除了向驱动器故障提供复原能力,还提供将数据条带化存储到多个硬盘来增加性能。存储空间通过两个参数描述一个条带(Stripe) ,列数(NumberOfColumns) 和交错(Interleave) 。
可以通过 Windows PowerShell 或 WMI来访问列数(NumberOfColumns) 和 交错(Interleave) 参数,并确定条带(stripe)的宽度 (条带宽度 stripe_width = 列数(NumberOfColumns)× 交错(Interleave))。条带(stripe)宽度决定了存储空间写入到多个硬盘上的数据和奇偶校验(在奇偶校验空间的情况下)的大小,可以用来增加应用程序性能。
一个简单例子,两列简单空间,使用条带(striping)并且没有复原。
在这个例子中的第一个条带(stripe)数据 ,存储空间会写入256 KB (交错(Interleave)默认值)到存储池的第一个硬盘(列),然后的 256 KB 数据会写入到池中的第二块硬盘。这产生了一个宽度为 512 KB 条带(stripe)(2列×256 KB 交错(interleave))。
另一个简单例子是三列奇偶校验空间(使用256 KB 条带交错),是奇偶校验空间的最简单形式。
在这个例子中的第一个条带(stripe)数据 ,存储空间会写入256 KB到第一个硬盘(列),256 KB 数据到第二块硬盘,还有256KB的奇偶校验到第三块硬盘。这产生一个条带(stripe)大小为756 KB(3列×256 KB 交错(interleave))。随着更多的数据写入到奇偶校验空间,它会在全部的三个硬盘中轮换奇偶校验信息列。
另一个例子是两列双路镜像空间。镜像空间是在条带(stripe)下面添加一个数据拷贝层,这意味着,双路镜像空间会复制每个列的数据到两个硬盘上。
在这个例子中的第一个条带(stripe)数据 ,存储空间会写入256 KB到第一个列,它们会被重复写入到前两块硬盘中。对于第二列数据,存储空间会写入256 KB数据到第二列,它们会被重复写入到接下来两块硬盘中。双路镜像的列到硬盘(column-to-disk)关系是 1:2;三路镜像的关系是1:3。
你可以通过使用 Windows PowerShell 的 New-VirtualDisk 命令并使用NumberOfColumns(列数) 和 Interleave(交替) 参数来控制创建新的存储空间(虚拟磁盘)的列数和条带(stripe)交错(interleave)。
每种存储空间(虚拟磁盘)类型都有最少条带(stripe)列数,可以转换成最少物理硬盘数,给出他们列到硬盘(column-to-disk)关系(见下文)。
复原类型
最少列数
列到硬盘(Column-to-disk)比例
最少硬盘数
简单(不可复原)
1
1:1
双路镜像
1:2
2
三路镜像
1:3
5
单奇偶校验
3
因为条带化,存储空间(虚拟磁盘)可以同时从多个硬盘上分配条带(stripe)需要的容量。因此,当增加池容量时,你可以通过添加存储空间需要的硬盘数的倍数来优化池的利用率。例如,添加4的倍数个硬盘,可以为 一个包含两列双路镜像空间提供最佳容量利用率。(2 列 + 2 数据副本 = 每个条带(stripe) 4 硬��)��
存储空间提供精简配置存储空间(虚拟磁盘)的预先通知功能,当存储池没有足够空间继续把写入的新数据分散到一定数量(构成存储空间(虚拟磁盘)所需数量)硬盘中时。默认的警告点是容量使用率到达70%。要了解存储空间何时产生警告,请考虑下面的例子。
有2个1TB容量的和2个2TB容量的硬盘。因为两列双路镜像空间需要四个硬盘(硬盘数(number_of_disks)= 列数(NumberOfColumns)× 数据副本数(NumberOfDataCopies)),它会均匀地使用四个硬盘来写入新的数据。当两个1TB硬盘容量使用率达到70%时,即到达存储空间发出低容量警告的条件。尽管整个池中有3.2TB可用空间,但是精简配置空间将很快不能写入更多数据,因为1TB硬盘即将用完。
你可简单的让带有低容量警告的存储空间(虚拟磁盘)与其他共存,并跟随下节的指导,“我该如何增加池的容量?”,从创建池的时候到池的后续扩展。
存储空间一般通过添加新硬盘来增加容量,即使只有一个。然而,为了优化容量利用率,应添加数倍于你的存储空间(虚拟磁盘)的列数的硬盘。
例如,想象一个池有四列简单空间和一列双路镜像空间,还有八列奇偶校验空间。四列简单空间建议你使用4个硬盘为一组的方式扩展池容量。一列双路镜像空间建议你使用2个硬盘为一组的方式扩展池容量(对于镜像空间,你必须使用列数乘以副本数)。八列奇偶校验空间建议你使用8个硬盘为一组的方式扩展池容量。在这个例子中,你会使用8个硬盘为一组方式扩展池容量,因为8是池中每个存储空间(虚拟磁盘)列数的共同常见倍数。
存储空间记录有关池和存储空间(虚拟磁盘)的信息到组成存储池的物理硬盘上。因此,当你移动整个存储池的物理硬盘从一个计算机到另一个计算机时,也能保留你的池和存储空间(虚拟磁盘)。
Windows Server 2012 启动存储时处于安全状态,因为有可能处于群集共享中。对于存储空间,这意味着Windows第一次连接到存储池时,池的初始状态是只读并且存储空间(虚拟磁盘)的初始状态也会是分离状态。要访问你的数据,你必须设置存储池为读写(read-write)状态,并连接存储空间(虚拟磁盘)。
这些步骤并不适用于Windows 8 — 存储池初始状态就是 读写(read-write)状态 并且存储空间(虚拟磁盘)初始状态是连接的。
简单空间和镜像空间包含从Windows 8 消费者预览版到Windows 8的自动数据迁移。但是,对于奇偶校验空间,你必须备份您的数据,并删除奇偶校验空间。 自此,你可以升级或执行全新安装windows 8。升级或全新安装完成后,你要重新创建奇偶校验空间并恢复你的数据。
每个存储空间(虚拟磁盘)的健康只能从存储空间(虚拟磁盘)群集资源是联机状态的群集节点上获取。使用故障转移群集管理器,可以找到存储空间(虚拟磁盘)群集资源是联机状态的群集节点。然后使用在服务器管理器中文件和存储服务角色的存储池部分来查看相应的存储空间(虚拟磁盘)的健康。
你也可以使用Get-VirtualDisk 命令在群集资源联机的节点上获取存储空间(虚拟磁盘)的属性。存储空间(虚拟磁盘)的复原健康可以在其属性中查看。要查看存储池的健康状态,在池群集资源联机的群集节点上使用 Get-StoragePool命令即可。
若要让修复操作成功完成,池中至少有同修复数据同样大小的未使用容量。如果存储空间(虚拟磁盘)使用一组硬盘,则未使用的容量必须驻留这些硬盘上。 未使用容量必须驻留在不承载需要修复条带(stripe)内容的硬盘上。因为这一要求随修复时间推移发生,所以必须满足这个直到修复成功完成。
要快速查看修复进程是否成功,可以使用Get-VirtualDisk 命令来查看存储空间(虚拟磁盘)的OperationalStatus(操作状态)。当修复顺利的进行时,OperationalStatus(操作状态)将会是 In Service(运行中)。当修复成功完成,OperationalStatus(操作状态)是 OK。如果修复无法继续,OperationalStatus(操作状态) 返回到 Degraded (已降级)。
由于存储空间(虚拟磁盘)是精简配置,所以根据需要分配新的容量。一旦容量耗尽,将没有空间可以正确的管理在存储空间(虚拟磁盘)上的文件,并且有数据丢失导致文件顺坏的风险。为了防止这个,Windows会脱机存储空间(虚拟磁盘) - 从任何写入方式上移除存储空间(虚拟磁盘),从而保护你的文件安全。一旦池中增加了驱动器,你可以把存储空间(虚拟磁盘)重新联机并继续运行。
当添加的硬盘不是立即可用是,你可以尝试把存储空间(虚拟磁盘)重新联机,然后获取你的文件直到添加的驱动器可用为止。 然而,有时候应用程序或文件系统本身可能会在存储空间(虚拟磁盘)联机后开始写入。 如果出现这种情况,那么Windows的安全措施将再次通过将存储空间(虚拟磁盘)脱机来保护你的文件。
如果添加的硬盘不能立即可用并且存储空间(虚拟磁盘)无法保持联机,那么仍然可以通过使用PowerShell暂时讲你的存储空间(虚拟磁盘)设为只读来获取你的文件。
Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsReadOnly $true
Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsOffline $false
如果你这样做,那么当你的存储池有了新的硬盘后,你需要将你的存储空间(虚拟磁盘)切回读写(read-write)状态。你可以使用PowerShell做到这一点。
Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsOffline $true
Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsReadOnly $false
唉,为什么每次发布都会有 ? 出来