排查存储空间和存储空间直通的运行状况与操作状态问题

适用于:Azure Stack HCI 版本 22H2 和 21H2;Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012、Windows 10、Windows 8.1

本主题介绍存储空间直通存储空间中的存储池、虚拟磁盘(位于存储空间中的卷下方)和驱动器的运行状况和操作状态。 当你尝试排查各种问题(例如,由于使用只读配置而无法删除虚拟磁盘)时,这些状态可以提供宝贵的信息。 本主题还将讨论为何无法将驱动器添加到池中 (CannotPoolReason)。

存储空间有三个主要对象 - 添加到“存储池”的“物理磁盘”(硬盘驱动器、SSD 等),可以虚拟化存储以便基于池中的可用空间创建“虚拟磁盘”,如下所示。 池元数据写入池中的每个驱动器。 卷是在虚拟磁盘上创建的,用于存储文件,但本主题不讨论卷。

Physical disks are added to a storage pool, and then virtual disks created from the pool space

可以在服务器管理器中或使用 PowerShell 查看运行状况和操作状态。 下面是缺少大部分群集节点的存储空间直通群集上各种(主要是错误的)运行状况和操作状态的示例(右键单击列标题可添加操作状态)。 这不是一个正常的群集。

Server Manager showing the results of two missing nodes in a Storage Spaces Direct cluster - lots of missing physical disks and virtual disks in an unhealthy state

存储池状态

每个存储池都有一种运行状况 -“正常”、“警告”或“未知”/“不正常”,以及一种或多种操作状态。

若要了解池所处的状态,请使用以下 PowerShell 命令:

Get-StoragePool -IsPrimordial $False | Select-Object HealthStatus, OperationalStatus, ReadOnlyReason

以下示例输出显示存储池处于“未知”运行状态和“只读”操作状态:

FriendlyName                OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------                ----------------- ------------ ------------ ----------
S2D on StorageSpacesDirect1 Read-only         Unknown      False        True

以下部分列出了运行状况和工作状态。

池运行状态:正常

操作状态 说明
OK 存储池正常。

池运行状态:警告

如果存储池处于“警告”运行状态,则表示该池可供访问,但一个或多个驱动器有故障或缺失。 因此,该存储池的复原能力可能会降低。

操作状态 说明
已降级 存储池中的驱动器有故障或缺失。 这种状态只会出现在托管池元数据的驱动器上。

操作:检查驱动器的状态,并在出现其他故障之前更换所有出现故障的驱动器。

池运行状态:“未知”或“不正常”

如果存储池处于“未知”或“不正常”运行状态,表示该存储池是只读的,在其恢复“警告”或“正常”运行状态之前无法修改它。

操作状态 只读原因 说明
只读 不完整 如果存储池丢失其仲裁,则可能会出现这种情况,这表示该池中的大多数驱动器发生故障或出于某种原因处于脱机状态。 当池丢失仲裁时,存储空间会自动将该池的配置设置为只读,直到再次有足够的驱动器可用。

操作:
1. 重新连接任何缺失的驱动器,如果使用的是存储空间直通,请将所有服务器联机。
2. 使用管理权限打开 PowerShell 会话并键入以下命令,将池重新设置为读写:

Get-StoragePool <PoolName> -IsPrimordial $False | Set-StoragePool -IsReadOnly $false
策略 管理员将存储池设置为只读。

操作:若要在故障转移群集管理器中将群集存储池设置为读写访问,请转到“池”,右键单击该池,然后选择“联机”。

对于其他服务器和电脑,请使用管理权限打开 PowerShell 会话,然后键入:

Get-StoragePool <PoolName> | Set-StoragePool -IsReadOnly $false

正在启动 存储空间正在启动或等待池中连接的驱动器。 这应该是一种临时状态。 一旦完全启动,该池应该就会转换为不同的操作状态。

操作:如果池保持“正在启动”状态,请确保池中的所有驱动器都已正确连接。

另请参阅 Windows Server 存储论坛

虚拟磁盘状态

在存储空间中,卷放置在从池的可用空间中划分出来的虚拟磁盘(存储空间)上。 每个虚拟磁盘都有一种运行状态 -“正常”、“警告”、“不正常”或“未知”,以及一种或多种操作状态。

若要确定虚拟磁盘所处的状态,请使用以下 PowerShell 命令:

Get-VirtualDisk | Select-Object FriendlyName,HealthStatus, OperationalStatus, DetachedReason

以下输出示例显示了一个分离的虚拟磁盘和一个已降级/不完整的虚拟磁盘:

FriendlyName HealthStatus OperationalStatus      DetachedReason
------------ ------------ -----------------      --------------
Volume1      Unknown      Detached               By Policy
Volume2      Warning      {Degraded, Incomplete} None

以下部分列出了运行状况和工作状态。

虚拟磁盘运行状态:正常

操作状态 说明
OK 虚拟磁盘正常。
欠佳 数据未均匀写入到各个驱动器。

操作:通过运行 Optimize-StoragePool cmdlet 优化存储池中的驱动器使用情况。

虚拟磁盘运行状态:警告

如果虚拟磁盘处于“警告”运行状态,则表示数据的一个或多个副本不可用,但存储空间仍可读取至少一个数据副本。

操作状态 说明
运行中 Windows 正在修复虚拟磁盘,例如在添加或删除驱动器之后。 修复完成后,虚拟磁盘应该会恢复“正常”运行状态。
不完整 由于一个或多个驱动器出现故障或缺失,虚拟磁盘的复原能力下降。 但是,缺失的驱动器包含数据的最新副本。

操作
1. 重新连接所有缺失的驱动器,更换所有出现故障的驱动器,如果使用了存储空间直通,请将所有脱机的服务器联机。
2. 如果未使用存储空间直通,接下来请使用 Repair-VirtualDisk cmdlet 修复虚拟磁盘。
重新连接或更换驱动器后,存储空间直通会根据需要自动开始修复。
已降级 由于一个或多个驱动器出现故障或缺失,并且这些驱动器包含已过时的数据副本,因此虚拟磁盘的复原能力下降。

操作
1. 重新连接所有缺失的驱动器,更换所有出现故障的驱动器,如果使用了存储空间直通,请将所有脱机的服务器联机。
2. 如果未使用存储空间直通,接下来请使用 Repair-VirtualDisk cmdlet 修复虚拟磁盘。
重新连接或更换驱动器后,存储空间直通会根据需要自动开始修复。

虚拟磁盘运行状态:不正常

如果虚拟磁盘处于“不正常”运行状态,则表示该虚拟磁盘上的部分或全部数据目前不可访问。

操作状态 说明
无冗余 由于太多驱动器发生故障,虚拟磁盘已丢失数据。

操作:更换有故障的驱动器,然后从备份中还原数据。

虚拟磁盘运行状态:信息/未知

如果管理员将虚拟磁盘脱机或虚拟磁盘已分离,则虚拟磁盘也可能处于“信息”运行状态(如存储空间控制面板项中所示)或“未知”运行状态(如 PowerShell 中所示)。

操作状态 分离原因 说明
已分离 被策略分离 管理员已使虚拟磁盘脱机或将虚拟磁盘设置为需要手动附加,在这种情况下,必须在每次重启 Windows 时手动附加虚拟磁盘。

操作:将虚拟磁盘重新联机。 若要在虚拟磁盘位于群集存储池中时执行此操作,请在故障转移群集管理器中选择“存储”>“池”>“虚拟磁盘”,选择显示为“脱机”状态的虚拟磁盘,然后选择“联机”。

若要使不在群集中的虚拟磁盘重新联机,请以管理员身份打开 PowerShell 会话,然后尝试使用以下命令:

Get-VirtualDisk | Where-Object -Filter { $_.OperationalStatus -eq "Detached" } | Connect-VirtualDisk

若要在重启 Windows 之后自动附加所有非群集虚拟磁盘,请以管理员身份打开 PowerShell 会话,然后使用以下命令:

Get-VirtualDisk | Set-VirtualDisk -ismanualattach $false
多数磁盘不正常 在此虚拟磁盘使用的驱动器中,有过多的驱动器出现故障、缺失或包含过时的数据。

操作
1. 重新连接所有缺失的驱动器,如果使用了存储空间直通,请将所有脱机的服务器联机。
2. 在所有驱动器和服务器都联机后,更换所有出现故障的驱动器。 有关详细信息,请参阅运行状况服务
重新连接或更换驱动器后,存储空间直通会根据需要自动开始修复。
3. 如果未使用存储空间直通,接下来请使用 Repair-VirtualDisk cmdlet 修复虚拟磁盘。

如果有故障的磁盘数超过你的数据副本数,并且在每两次故障之间虚拟磁盘未修复,则虚拟磁盘上的所有数据将永久丢失。 在这种不妙的情况下,请删除虚拟磁盘,创建新的虚拟磁盘,然后从备份中还原。
不完整 没有足够的驱动器可用于读取虚拟磁盘。

操作
1. 重新连接所有缺失的驱动器,如果使用了存储空间直通,请将所有脱机的服务器联机。
2. 在所有驱动器和服务器都联机后,更换所有出现故障的驱动器。 有关详细信息,请参阅运行状况服务
重新连接或更换驱动器后,存储空间直通会根据需要自动开始修复。
3. 如果未使用存储空间直通,接下来请使用 Repair-VirtualDisk cmdlet 修复虚拟磁盘。

如果有故障的磁盘数超过你的数据副本数,并且在每两次故障之间虚拟磁盘未修复,则虚拟磁盘上的所有数据将永久丢失。 在这种不妙的情况下,请删除虚拟磁盘,创建新的虚拟磁盘,然后从备份中还原。
超时 附加虚拟磁盘花费的时间过长

操作:这种情况不常发生,因此不妨等待一段时间,看看问题是否自行消失。 或者,可以尝试使用 Disconnect-VirtualDisk cmdlet 断开连接虚拟磁盘,然后使用 Connect-VirtualDisk cmdlet 重新连接。

驱动器(物理磁盘)状态

以下部分描述了驱动器可能处于的运行状况。 池中的驱动器在 PowerShell 中表示为物理磁盘对象。

驱动器运行状况:正常

操作状态 说明
OK 驱动器正常。
服务中 驱动器正在执行某些内部保养操作。 操作完成后,驱动器应会恢复“正常”运行状况。

驱动器运行状况:警告

处于“警告”状态的驱动器可以成功读取和写入数据,但存在问题。

操作状态 说明
通信断开 驱动器缺失。 如果使用的是存储空间直通,则原因可能是服务器已关闭。

操作:如果使用的是存储空间直通,请将所有服务器重新联机。 如果这样无法解决问题,请重新连接驱动器、更换驱动器,或者尝试按照“使用 Windows 错误报告进行故障排除 >物理磁盘超时”中的步骤获取有关该驱动器的详细诊断信息。
从池中删除 存储空间正在从其存储池中删除驱动器。

这是一种暂时性的状态。 删除完成后,如果驱动器仍附加到系统,则驱动器将转换为原始池中的另一种操作状态(通常为“正常”)。
启动维护模式 在管理员将驱动器置于维护模式后,存储空间正在将驱动器置于维护模式。 这是一种暂时性的状态 - 驱动器应该很快就会处于“维护中模式”状态。
维护中模式 管理员已将驱动器置于维护模式,从而停止了从该驱动器的读取和写入。 此操作通常在更新驱动器固件之前或者在测试故障时执行。

操作:若要使驱动器退出维护模式,请使用 Disable-StorageMaintenanceMode cmdlet。
停止维护模式 管理员使驱动器退出了维护模式,存储空间正在使驱动器重新联机。 这是一种暂时性状态 - 驱动器应该很快就会处于另一种状态,最好是“正常”状态。
预测性故障 驱动器已报告它即将发生故障。

操作:更换驱动器。
IO 错误 访问驱动器时发生暂时性错误。

操作
1. 如果驱动器未转换回“正常”状态,你可以尝试使用 Reset-PhysicalDisk cmdlet 擦除该驱动器。
2. 使用 Repair-VirtualDisk 还原受影响虚拟磁盘的复原能力。
3. 如果这种情况持续发生,请更换驱动器。
暂时性错误 驱动器出现暂时性错误。 此错误通常表示驱动器无响应,但也可能表示不恰当地从驱动器中删除了存储空间的保护分区。

操作
1. 如果驱动器未转换回“正常”状态,你可以尝试使用 Reset-PhysicalDisk cmdlet 擦除该驱动器。
2. 使用 Repair-VirtualDisk 还原受影响虚拟磁盘的复原能力。
3. 如果这种情况持续发生,请更换驱动器,或者尝试按照“使用 Windows 错误报告进行故障排除 >物理磁盘无法联机”中的步骤获取有关该驱动器的详细诊断信息。
异常延迟 根据存储空间直通中运行状况服务的度量,驱动器运行速度缓慢。

操作:如果这种情况持续发生,请更换驱动器,以免它降低存储空间的整体性能。

驱动器运行状况:不正常

当前无法写入或访问处于“不正常”状态的驱动器。

操作状态 说明
不可用 存储空间不能使用此驱动器。 有关详细信息,请参阅存储空间直通 硬件要求;如果未使用存储空间直通,请参阅存储空间概述
拆分 已从池中分离驱动器。

操作:重置驱动器,擦除驱动器中的所有数据,并将其作为空驱动器添加回池中。 为此,请以管理员身份打开 PowerShell 会话,运行 Reset-PhysicalDisk cmdlet,然后运行 Repair-VirtualDisk

若要获取有关此驱动器的详细诊断信息,请按照“使用 Windows 错误报告进行故障排除 >物理磁盘无法联机”中的步骤操作。
已过时的元数据 存储空间在驱动器上找到旧元数据。

操作:这应该是一种临时状态。 如果驱动器未转换回“正常”状态,你可以运行 Repair-VirtualDisk 以针对受影响的虚拟磁盘执行修复操作。 如果这样无法解决问题,可以使用 Reset-PhysicalDisk cmdlet 重置驱动器,擦除驱动器中的所有数据,然后运行 Repair-VirtualDisk
无法识别的元数据 存储空间在驱动器上找到了无法识别的元数据,这通常表示驱动器包含来自其他池的元数据。

操作:若要擦除驱动器并将其添加到当前池,请重置驱动器。 若要重置驱动器,请以管理员身份打开 PowerShell 会话,运行 Reset-PhysicalDisk cmdlet,然后运行 Repair-VirtualDisk
介质故障 驱动器出现故障,不再可供存储空间使用。

操作:更换驱动器。

若要获取有关此驱动器的详细诊断信息,请按照“使用 Windows 错误报告进行故障排除 >物理磁盘无法联机”中的步骤操作。
设备硬件故障 此驱动器上出现硬件故障。

操作:更换驱动器。
正在更新固件 Windows 正在更新驱动器上的固件。 这是一种暂时性的状态,其持续时间通常小于一分钟,在此期间,池中的其他驱动器会处理所有读取和写入操作。 有关详细信息,请参阅更新驱动器固件
正在启动 驱动器正在为操作做好准备。 这应该是一种暂时性的状态 - 完成后,驱动器应会过渡到另一种工作状态。

驱动器无法入池的原因

某些驱动器尚未准备好放入存储池。 通过查看物理磁盘的 CannotPoolReason 属性,可以确定驱动器为何不符合入池条件。 下面是用于显示 CannotPoolReason 属性的示例 PowerShell 脚本:

Get-PhysicalDisk | Format-Table FriendlyName,MediaType,Size,CanPool,CannotPoolReason

下面是示例输出:

FriendlyName          MediaType          Size CanPool CannotPoolReason
------------          ---------          ---- ------- ----------------
ATA MZ7LM120HCFD00D3  SSD        120034123776   False Insufficient Capacity
Msft Virtual Disk     SSD         10737418240    True
Generic Physical Disk SSD        119990648832   False In a Pool

下表更具体地描述了每种原因。

原因 说明
在池中 驱动器已属于某个存储池。

驱动器只能属于一个存储池。 若要在另一个存储池中使用此驱动器,请先将此驱动器从其当前所在的池中删除,这会告知存储空间将此驱动器上的数据移动到池中的另一驱动器。 或者,如果在未通知存储空间的情况下将驱动器与其所在的池断开连接,请重置该驱动器。

若要安全地从存储池中删除驱动器,请使用 Remove-PhysicalDisk,或转到“服务器管理器”>“文件和存储服务”>“存储池”>“物理磁盘”,右键单击该驱动器,然后选择“删除磁盘”。

若要重置驱动器,请使用 Reset-PhysicalDisk
不正常 该驱动器不处于正常状态,可能需要更换。
可移动媒体 该驱动器分类为可移动驱动器。

存储空间不支持由 Windows 识别为可移动媒体的媒体,例如蓝光驱动器。 尽管许多固定驱动器定位在可移动插槽中,但一般情况下,由 Windows 分类为可移动媒体的媒体不适合与存储空间配合使用。
已由群集使用 该驱动器当前已由故障转移群集使用。
脱机 驱动器已脱机。

若要使所有脱机的驱动器联机并将其设置为读/写,请以管理员身份打开 PowerShell 会话,然后使用以下脚本:

Get-Disk | Where-Object -Property OperationalStatus -EQ "Offline" | Set-Disk -IsOffline $false

Get-Disk | Where-Object -Property IsReadOnly -EQ $true | Set-Disk -IsReadOnly $false
容量不足 当有分区占用了驱动器上的可用空间时,通常会发生这种情况。

操作:删除驱动器上的任何卷,从而擦除驱动器上的所有数据。 为此,可以使用 Clear-Disk PowerShell cmdlet。
正在验证 运行状况服务正在检查服务器管理员是否已批准使用驱动器上的固件。
验证失败 运行状况服务无法检查服务器管理员是否已批准使用驱动器上的固件。
固件不合规 物理驱动器上的固件不在服务器管理员使用运行状况服务指定的已批准固件修订版列表中。
硬件不合规 该驱动器不在服务器管理员使用运行状况服务指定的已批准存储型号列表中。

其他参考