在现代 Windows Server 环境(Hyper-V、群集和虚拟化)中,多路径 I/O(MPIO)有助于实现存储高可用性和容错。 但是,配置问题、硬件兼容性问题或与第三方设备特定的模块(DSM)的交互会使磁盘不可用,并导致性能问题、路径丢失和意外中断。 本文可帮助你解决 MPIO 存储路径问题。
已知问题
更新固件后,缺少多路径磁盘
此问题会影响某些存储设备。 请联系存储供应商以获取支持。
在 VMware 或虚拟环境中,事件 ID 153 会重复出现。
此行为反映 Storport 驱动程序问题。 确保驱动程序是最新的。 如果问题仍然存在,请联系供应商以获取支持。
故障排除清单
使用此清单进行系统故障排除。
准备进行故障排除
- 备份所有受影响的系统和数据。 测试是否可以还原备份。
- 验证是否已获得更改管理批准和维护窗口以进行故障排除。
- 记录所有观察到的问题、错误消息、事件 ID 和计时。
查看症状
-
检查磁盘管理和故障转移群集管理器工具。 此外,请检查任何受影响的虚拟机(VM)的设置。 磁盘或卷是否缺失?
-
问题是否与一个群集节点、所有节点或所有服务器隔离?
-
检查服务器管理器。 存储控制器和网络路径是否缺失?
-
如果使用的是第三方 DSM,请查看其文档。 它们是否通过了你的操作系统版本认证?
-
检查事件查看器和设备管理器,并在 Windows 命令提示符下运行
mpclaim -s -d。 是否看到任何 MPIO 或存储错误? 具体而言,请关注以下事件:- 事件 ID 153:“在逻辑块地址处的输入输出操作被重试。”
- 事件 ID 129:“设备重置命令...已发出。”
- 事件 ID 140:“指定的设备不存在。
- 事件 ID 51、55、98、1069、1205、5120、5121、5124。 这些事件描述磁盘、文件系统和群集错误。
检查最基本可能的原因
- 是否有最新的硬件更改,例如新的或更换的电缆、主机总线适配器(HBA)或存储交换机和区域?
- 任何设备是否都获得固件或驱动程序更新?
- 最近是否重启了任何服务器?
- 是否安装了相关的 Windows 功能,例如 MPIO? 相关服务是否正在运行?
验证 MPIO 和存储配置
-
若要查看存储硬件的设备 ID,请执行以下步骤:
- 在搜索栏中,键入 mpiocpl,然后在搜索结果中选择 MPIO 。
- 选择“ 发现多路径”。 查看 ID 列表,并修复任何错误。
注释
还可以使用 Windows PowerShell
Get-MPIOAvailableHW和Get-MPIOSettingcmdlet 或命令行mpclaim -e和mpclaim -r -i -a命令执行这些步骤。 -
若要查看和更新存储区域网络 (SAN) 策略,请打开 Windows 命令提示符窗口,然后运行以下命令:
diskpart san policy=OnlineAll -
若要更新路径配置,请遵循以下准则:
- 若要实现冗余,请确保每个 iSCSI 连接使用不同的网络适配器。
- 如果系统仅检测到一个路径,请重新生成 iSCSI 连接。
更新驱动程序和固件
- 将所有存储、网络和多路径驱动程序更新到硬件或存储供应商的最新支持版本。
- 根据需要更新存储或 SAN 控制器固件。
验证文件系统和磁盘的运行状况
- 若要检查和修复文件系统错误,请在 Windows 命令提示符处运行
chkdsk <drive>: /f /r。 - 如果在扫描 RAW 卷时 chkdsk 失败,请尝试恢复数据或从备份还原数据。
- 如果弹性文件系统(ReFS)不稳定,请考虑将文件系统重新格式化为 NTFS。
检查群集和 CSV 磁盘问题
-
若要检查磁盘资源的状态,请使用故障转移群集管理器。
-
如果磁盘资源停滞在“联机挂起”状态,或者磁盘资源无法联机并生成错误 1069 或错误 1205,则超时设置可能太短。 若要增加此值,请在 PowerShell 命令提示符处运行以下 cmdlet:
Get-ClusterResource "<Resource_Name>" | Set-ClusterParameter PendingTimeout 300000注释
- 在这些命令中, <Resource_Name> 是磁盘资源的名称。
- 该属性的值
PendingTimeout以毫秒为单位。 此处显示的值大于默认值。
-
对于过时的 ClusterStorage 文件夹,请停止群集服务、用于
takeown获取所有权和icacls重置权限,然后使用rmdir删除。
检查 MPIO 路径的状态
- 如果只有某些路径可见,请验证服务器和 SAN 上的分区、布线和 HBA 状态。
- 如果观察到事件 ID 153、129 或 140,则可能存在存储或网络瓶颈。 查看基础存储或网络流量。
- 如果在重启后 MPIO 路径丢失或配置错误,请参阅 维护或重新启动后,管理工具不显示磁盘或路径 以获取指示。
调整注册表和策略设置
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 如果您错误地修改注册表,可能会出现严重问题。 因此,请确保仔细执行这些步骤。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和恢复注册表的更多信息,请参见如何在 Windows 中备份和恢复注册表。
-
如果观察到过度日志记录(如Lsass.log文件的异常增长),请设置以下注册表值:
- 子项:
HKLM\SYSTEM\CurrentControlSet\Control\Lsa - 值、数据和类型:
LogToFile=0(DWORD)
更改注册表值后,重新启动计算机。
- 子项:
-
若要配置 MPIO 验证设置,请在 PowerShell 命令提示符窗口中运行以下 cmdlet:
Set-MPIOSetting -NewPathVerifyState Enabled Set-MPIOSetting -CustomPathRecovery Enabled -
若要配置路径验证的间隔和超时,请与硬件供应商合作,确认相应的设置。 在子项中
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mpio\Parameters设置以下值:PathVerifyEnabled(DWORD):1 表示开启PathRecoveryInterval(DWORD):以秒为单位的时间(默认值:30)PDORemovePeriod(DWORD):以秒为单位的时间(默认值:20)
更改注册表值后,重新启动计算机。
修复文件系统损坏或 RAW 磁盘
- 如果磁盘是 RAW 且无法修复,请删除并重新创建分区。 然后,从备份还原数据。
- 如果群集磁盘具有过时的预留,请在 PowerShell 命令提示符处使用
Clear-ClusterDiskReservation以清除它们。
切换 DSM 或删除第三方多路径驱动程序
- 如果使用第三方 DSM,请使用控制面板中的“程序和功能”项卸载它们。
- 重启电脑
- 在 MPIO 工具中,选择 “设备”,然后删除硬件 ID。
- 再次重新启动计算机。 然后,在 MPIO 工具中,还原 MSDSM 的硬件 ID。
- 若要确保 Microsoft DSM 申明您的磁盘,请在 Windows 命令提示符下运行
mpclaim -s -d。
常见问题和解决方案
以下部分介绍了最常见的问题,以及如何解决这些问题。
Windows Server 2022 或 2019:当 Hyper-V 使用弹性更改跟踪时,VM IO 性能会降低(RCT)
如果遇到此问题,请确保计算机是最新的。 2025 年 10 月 23 日 - KB5070884(OS 内部版本 20348.4297)更新和后续更新包含此问题的修补程序。
注释
安装此更新后,以前使用主机级备份应用程序备份的 VM 可能无法启动。 若要解决此问题,请删除与受影响的虚拟硬盘关联的任何 .rct 和 .mrt 文件。 然后,重试启动 VM。 如果问题仍然存在,请联系Microsoft支持部门。
某些群集磁盘资源保持“待上线”状态
对于具有配额或文件服务器资源管理器(FSRM)更改的集群磁盘,PendingTimeout 默认值太低。 因此,群集中的磁盘无法联机。 若要增加此值 PendingTimout ,请在 PowerShell 命令提示符处运行以下 cmdlet:
Get-ClusterResource "<Resource_Name>" | Set-ClusterParameter PendingTimeout 300000
注释
- 在这些命令中, <Resource_Name> 是磁盘资源的名称。
- PendingTimeout 属性的值以毫秒为单位。 此处显示的值高于默认值。
群集磁盘资源联机速度缓慢
你可能会发现群集磁盘资源联机需要三到五分钟。 此行为还会生成事件 ID 1069 和事件 ID 4874。
若要解决此问题,请执行以下步骤:
- 检查集群日志是否存在超时或资源错误。
- 在故障转移群集管理器中,将资源超时从默认值(3 分钟)增加到 5 分钟或更多。
- 检查可能导致资源上线延迟的卷快照或 FSRM 配额。
- 清除任何可能妨碍磁盘访问的群集依赖项或磁盘策略。
维护或重启后,管理工具不会显示磁盘或路径
磁盘管理或故障转移群集管理器工具不显示所有磁盘或路径,并且 “发现 ”选项不可用。 如果在 Windows 命令提示符下运行 mpclaim -s -d ,则可能缺少一些 LUN。 还可以观察事件 ID 46、事件 ID 129 或事件 ID 153。
若要解决此问题,请执行以下步骤:
-
检查物理磁盘连接、交换机分区和存储连接。
-
在设备管理器(启用“显示隐藏”),删除虚影或隐藏设备,或在 Windows 命令提示符下运行
devnode clean。 -
如果使用不支持的 DSM 或重复的 DSM,请使用控制面板中的“程序和功能”项卸载它们。
-
重启、重新安装或重新启用 Multipath-IO 功能。 若要执行此步骤,请在 PowerShell 命令提示符下运行
Install-WindowsFeature Multipath-IO。 -
在 Windows 命令提示符处,按顺序运行以下命令:
mpclaim -e mpclaim -s -d mpclaim -r -i -a -
在 MPIO 工具中,选择“ 发现多路径”,添加缺少的硬件 ID。
-
若要查看和更新存储区域网络 (SAN) 策略,请打开 Windows 命令提示符窗口,然后运行以下命令:
diskpart san policy=OnlineAll -
使用磁盘管理或 Diskpart 将缺少的磁盘联机。
-
若要查看“收藏夹目标”列表,请使用 iSCSI 发起程序工具(在搜索栏中,键入 iscsiocpl,在搜索结果中选择 iSCI 发起程序 ,然后选择 “收藏夹目标”。
在故障转移过程中,MPIO 处于降级状态,速度缓慢或无响应。
在故障转移期间,您可能会观察到超过 30 秒的延迟。 您还可以观察到 IO 错误消息,以及“MPIO 处于降级状态”等信息。此外,您可能会看到以下事件:
- 事件 ID 46
- 事件 ID 129
- 事件 ID 140
- 事件 ID 153
若要解决此问题,请执行以下步骤:
-
更新所有存储、HBA 和多路径驱动程序和固件。
-
若要设置建议的负载均衡策略和故障转移参数,请在 PowerShell 命令提示符处运行以下 cmdlet:
Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy RR Set-MPIOSetting -NotificationState Enabled Set-MPIOSetting -NotificationPeriod 30 Set-MPIOSetting -NewPDORemovePeriod 20 Set-MPIOSetting -CustomPathRecovery Enabled Set-MPIOSetting -NewPathRecoveryInterval 10 reg add HKLM\SYSTEM\CurrentControlSet\Services\mpio\Parameters /v PathVerifyEnabled /t REG_DWORD /d 1 /f如果系统提示这样做,请重新启动。
-
在群集上,增加磁盘资源超时以应对故障转移缓慢的情况。
应用程序遇到停机,并在事件日志中重复事件
重复事件包括以下示例:
- 事件 ID 153(“磁盘重试”)
- 事件 ID 129(“重置为设备”)
- 事件 ID 11 (“控制器错误”)
- 事件 ID 158(相同的磁盘 GUID)
若要解决此问题,请执行以下步骤:
-
验证物理路径和逻辑路径是否存在并且是否正常。
-
更新存储固件和驱动程序。
-
如果事件 ID 158 再次出现,请使用以下 PowerShell cmdlet 来重置 VHD 上的磁盘 GUID:
Set-VHD -Path \<VHD-Path> -ResetDiskIdentifier -
如果重复事件是指第三方数据存储管理器 (DSM),请查阅存储供应商或迁移到受支持的原生 DSM。
重复磁盘或更改的磁盘编号
重启或添加或删除磁盘后,可能会观察到此行为。 若要解决此问题,请执行以下步骤:
- 确保只附加一个多路径解决方案(删除不支持的 DSM,重启系统,再重新安装或重新配置 MPIO)。
- Windows 使用不确定的磁盘顺序。 如果应用程序需要特定的磁盘顺序,请使用持久性标识符(例如 GUID、UUID 或 WWN),而不是使用磁盘号或驱动器号。
高延迟、IO 峰值、低吞吐量、慢备份、SQL 事件 ID 833 或其他性能问题
若要诊断和修复这些性能问题,请执行以下步骤:
-
使用性能监视器(Perfmon)收集性能数据。 在 Windows 命令提示符处运行以下命令:
logman create counter PerfLog -o C:\PerfLog.blg -f bincirc ... -
检查存储卷上是否有安全或防病毒扫描。 可能需要暂时排除卷或暂时禁用扫描以测试对性能的影响。
-
确保 Windows Server 是最新的,并更新驱动程序和固件。
-
对数据卷使用 64K 分配单位。
-
如果可能,请将磁盘分散到多个控制器上。
扩展或调整大小后,集群磁盘资源或 LUN 消失
增加磁盘或 LUN 容量后,磁盘管理或故障转移群集管理器不会显示相关卷。 如果将群集角色脱机后再联机,卷会重新出现。
若要解决此问题,请执行以下步骤:
-
使受影响的群集角色脱机,然后再次将其联机(或将角色移动到另一个节点)。
-
若要运行重新扫描和扩展文件系统的维护进程,请在拥有角色的节点上的 Windows 命令提示符处运行以下命令:
diskpart rescan list vol select vol x extend filesystem exit
服务器必须重启才能检测新的 MPIO 路径
更改布线、分区或存储配置后,管理存储的计算机在重新启动之前不会检测到新路径。
若要解决此问题,请执行以下步骤:
-
在受影响的计算机上的 PowerShell 命令提示符处,运行以下命令:
Update-HostStorageCache mpclaim -n -d重要
如果这些命令不起作用,请重新启动计算机。
-
确保 MPIO、DSM 和 Storport 是最新的。
常见问题快速参考
| 症状 | 原因 | 决议 |
|---|---|---|
| MPIO 属性和磁盘管理中缺少磁盘 | 分区或DSM冲突 | 检查设备管理器,删除虚影设备,重新安装 MPIO,重启 |
| 事件 ID 153/129/11 | 路径丢失、驱动程序或固件问题 | 更新固件或驱动程序,设置 MPIO 策略,检查物理连接 |
| 故障转移延迟,集群资源上线速度缓慢 | 超时、配置错误 | 提高资源超时,修复配额和快照,更新驱动程序 |
| 重复磁盘/错误的磁盘顺序 | DSM 或配置错误 | 删除额外的 DSM,使用持久性标识符(GUID/WWN) |
| 高 IO 延迟,应用速度缓慢,事件 ID 833 | 驱动程序和防病毒 (AV) | 从 AV 中排除存储、更新驱动程序、Perfmon,使用 64K 群集 |
| 磁盘 GUID 重复,事件 ID 158 | 无 MPIO 或克隆虚拟硬盘 (VHD) | 启用 MPIO,Set-VHD -ResetDiskIdentifier |
| 扩展后群集磁盘消失 | 驱动程序或磁盘问题 | 在脱机和联机之间切换角色,重新扫描,使用diskpart进行扩展 |
| 在重启之前未检测到路径 | Storport 配置问题 | Update-HostStorageCache重新 启动 |
| “请求的资源正在使用中”,无法将磁盘联机 | 元数据或磁盘问题 | 使用 chkdsk,检查日志,并联系存储团队 |
数据收集
如果这些过程无法解决问题,请联系Microsoft支持部门。 使用以下工具收集诊断数据,以追加到支持请求中:
-
Windows 故障排除脚本 (TSS):TSS 脚本会自动收集有用的数据。 有关详细信息和说明,请参阅以下文章:
-
进程监视器(Procmon): 对于深入的文件、注册表或进程分析,请在 Windows 命令提示符处运行类似于以下示例的命令:
procmon.exe /BackingFile c:\procmon.pml /Quiet /Minimized /Runtime 60注释
在收集 Windows Server 2016 或更高版本的跟踪之前,请确保安装最新的累积更新。
-
性能监视器(Perfmon): 使用 GUI 或命令行接口。 以下示例按五秒间隔收集数据:
logman create counter PerfLog -o c:\PerfLog.blg -c "\PhysicalDisk(*)\*" -si 00:00:05 logman start PerfLog -
PowerShell: 使用以下 cmdlet 收集信息:
Get-VMNetworkAdapter -VMName \<YourVMName>Import-VM(对于导入验证和错误导出)
-
系统和群集日志:
- Windows 事件查看器:收集来自 Hyper-V 的 VMMS、群集服务和存储的日志。
- 群集验证报告
-
**注册表编辑器:**审核
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Worker下的权限。 -
BIOS/UEFI: 导出设置,或创建这些设置的屏幕截图。
-
小型转储文件 如果观察到停止或错误检查错误(也称为蓝屏错误),请检索这些文件。
-
网络跟踪日志 如果观察到连接问题,请收集网络跟踪。
-
导出的 VM 配置文件: 如果要排查导入或导出问题,请导出受影响 VM 的配置文件。
-
驱动程序版本: 请注意存储组件、网络组件和安全代理使用的当前版本。
-
Storport 跟踪: 在 Windows 命令提示符窗口中运行类似于以下示例的命令:
logman create trace storport -ow -o c:\storport.etl -p Microsoft-Windows-StorPort 0xff -ets logman stop storport -ets