持久性内存运行状况管理

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

本文提供了特定于持久性内存 (PMem)(通常称为存储类内存 (SCM),是一种可用作顶层存储的非易失性介质)设备的错误处理和运行状况管理的相关信息。

以下短视频概述了 Windows 对 PMEM 的支持:

另请参阅了解和部署持久性内存

从 Windows Server 2016 和 Windows 10(版本 1607)开始,本机驱动程序支持持久性内存设备。 虽然持久性内存设备的行为与其他磁盘(HDD 和 SSD)类似,但也存在一些差别。

常见用例是将两个持久性内存模块用作存储空间中的镜像回写缓存。 要设置此配置,请参阅配置具有 NVDIMM-N 回写式缓存的存储空间

在 Windows Server 2016 中,存储空间 GUI 显示 NVDIMM N 总线类型的状态为“未知”。 它在创建池、存储 VD 时不会丢失任何功能,也没有任何功能缺陷。 可以通过运行以下 cmdlet 来验证总线类型:

Get-PhysicalDisk | fl

输出中的参数 BusType 会将总线类型正确显示为 SCM。

查看持久性内存运行状况

本部分介绍如何查看持久性内存模块的运行状况。 在使用持久性内存时,监视体验存在一些不同之处:

  • 持久性内存不会创建物理磁盘性能计数器,因此,你不会看到它在 Windows Admin Center 的图表上显示。
  • 持久性内存不会创建 Storport 505 数据,因此你不会获得主动离群值检测。

在其他方面,监视体验与其他任何物理磁盘的监视体验相同。

可以通过运行以下 cmdlet 来查询持久性内存磁盘的运行状况:

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Unhealthy    None          True         {20, 120}         2
3          252 GB Healthy      None          True         {1020, 1120}      0

Get-PmemDisk | Get-PhysicalDisk | select SerialNumber, HealthStatus, OperationalStatus, OperationalDetails

SerialNumber               HealthStatus OperationalStatus  OperationalDetails
------------               ------------ ------------------ ------------------
802c-01-1602-117cb5fc      Healthy      OK
802c-01-1602-117cb64f      Warning      Predictive Failure {Threshold Exceeded,NVDIMM_N Error}

值得注意的是,通过使用 Get-PhysicalDisk cmdlet 并将 BusType 指定为 SCM,可以获取相同的信息:

Get-PhysicalDisk | where BusType -eq "SCM" | select SerialNumber, HealthStatus, OperationalStatus, OperationalDetails

注意

若要查找事件中指定的持久性内存设备的物理位置,在事件查看器中事件的“详细信息”选项卡上,转到“EventData”>“Location” 。 请注意,Windows Server 2016 列出的持久性内存设备位置是错误的,但这在 Windows Server 版本 1709 中已得到修复。

HealthStatus 显示持久性内存磁盘的运行状况是否正常。

UnsafeshutdownCount 值跟踪可能导致此逻辑磁盘上数据丢失的关闭次数。 它是此磁盘的所有底层持久性内存设备的不安全关闭次数的总和。 有关运行状况的详细信息,请使用 Get-PmemPhysicalDevice cmdlet 来查找 OperationalStatus 等信息。

Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------------
1020     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_C1     102005310        126 GB                 0 GB
1120     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_F1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB
20       Intel INVDIMM device Unhealthy    {HardwareError}   CPU1_DIMM_C1     102005310        126 GB                 0 GB

此 cmdlet 显示哪些持久性内存设备运行不正常。 运行不正常的设备 (DeviceId 20) 与上一示例中的情况匹配。 BIOS 中的 PhysicalLocation 可帮助确定哪些持久性内存设备处于错误状态。

有关了解各种运行状况的帮助,请参阅以下部分。

“警告”运行状况

在检查持久性内存设备的运行状况并看到其运行状况列为“警告”时,会出现此情况,如以下示例输出所示:

SerialNumber HealthStatus OperationalStatus OperationalDetails
802c-01-1602-117cb5fc 正常 确定
802c-01-1602-117cb64f 警告 预计故障 {Threshold Exceeded,NVDIMM_N Error}

下表列出了有关此情况的一些信息。

方位 说明
可能的情况 超过警告阈值
根本原因 持久性内存设备跟踪各种阈值,例如温度、NVM 生存期和/或能量源生存期。 当超出其中一个阈值时,操作系统将会收到通知。
常规特性 设备保持完全正常运行。 这是警告,不是错误。
存储空间性能 设备保持完全正常运行。 这是警告,不是错误。
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。 EventLog – Microsoft-Windows-ScmDisk0101/Operational
要执行的操作 根据超过的警告阈值,替换持久性内存设备可能是谨慎的做法。

向持久性内存设备的写入失败

在检查持久性内存设备的运行状况,看到运行状况列为“不正常”,并且操作状态提及“IO 错误”时,会出现此情况,如以下示例输出所示 :

SerialNumber HealthStatus OperationalStatus OperationalDetails
802c-01-1602-117cb5fc 正常 确定
802c-01-1602-117cb64f 不正常 {元数据已过时, IO 错误, 暂时性错误} {丢失数据持久性, 丢失数据, NV...}

下表列出了有关此情况的一些信息。

方位 说明
可能的情况 持久性/备份电源丢失
根本原因 持久性内存设备依赖备份电源(通常是电池或超级电容)获得持久性。 如果此备份电源的源不可用或设备出于任何原因(控制器/闪存错误)无法执行备份,那么数据将处于危险之中,Windows 将阻止对受影响设备的任何进一步写入操作。 仍有可能执行“读取”操作以疏散数据。
常规特性 NTFS 卷将被卸除。
所有受影响的 NVDIMM-N 设备的 PhysicalDisk 运行状况状态字段将显示为“不正常”。
存储空间性能 只有一个持久性内存模块受影响的情况下,存储空间仍可正常运行。 如果多个设备受到影响,则将无法写入到存储空间。
所有受影响的持久性内存设备的 PhysicalDisk 运行状况字段将显示为“不正常”。
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。
EventLog – Microsoft-Windows-ScmDisk0101/Operational
要执行的操作 我们建议备份受影响的 PMem 的数据。 要获得读取访问权限,可以手动使磁盘联机(将以只读 NTFS 卷形式出现)。

要完全清除这种情况,必须解决根本原因(即提供电源或更换持久性内存模块,视具体问题而定),模块上的卷必须脱机并再次进入联机状态或重新启动系统。

要使持久性内存模块在存储空间中再次可用,请使用 Reset-PhysicalDisk cmdlet,它会重新集成设备并启动修复过程。

设备显示“0”字节容量,或显示为“通用物理磁盘”

当 PMEM 设备显示 0 字节容量且无法初始化时,或者公开为不具备序列号且显示“通信中断”操作状态的“通用物理磁盘”对象时,会出现此情况,如以下示例输出所示:

SerialNumber HealthStatus OperationalStatus OperationalDetails
802c-01-1602-117cb5fc 正常 确定
警告 通信中断

下表列出了有关此情况的一些信息。

方位 说明
可能的情况 BIOS 未向操作系统公开持久性内存模块
根本原因 持久性内存设备基于 DRAM。 当引用损坏的 DRAM 地址时,大多数 CPU 将启动计算机检查并重新启动服务器。 然后,某些服务器平台取消映射持久性内存模块,以阻止操作系统访问该模块,并可能会引起其他计算机检查。 如果 BIOS 检测到持久性内存模块已失败并且需要替换,也可能会出现此情况。
常规特性 持久性内存模块显示为未初始化、容量为 0 字节,并且无法读取或写入。
存储空间性能 存储空间仍可操作(前提是只有一个持久性内存模块受到影响)。
PMem PhysicalDisk 对象的运行状况显示为“警告”,并且该对象显示为“常规物理磁盘”
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。
EventLog – Microsoft-Windows-ScmDisk0101/Operational
要执行的操作 必须替换或清理持久性内存设备,以便服务器平台再次将其公开给主机操作系统。 建议替换设备,因为可能会发生更多无法纠正的错误。 可以使用 Add-PhysicalDisk cmdlet 将替换设备添加到存储空间配置。

重启后,设备显示为 RAW 或空磁盘

在检查持久性内存设备的运行状况,看到运行状况为“不正常”且操作状态为“未识别的元数据”时,会出现此情况,如以下示例输出所示 :

SerialNumber HealthStatus OperationalStatus OperationalDetails
802c-01-1602-117cb5fc 正常 确定 {未知}
802c-01-1602-117cb64f 不正常 {无法识别的元数据, 元数据已过时} {未知}

下表列出了有关此情况的一些信息。

方位 说明
可能的情况 备份/还原失败
根本原因 备份或还原过程失败可能会导致持久性内存模块上的所有数据都丢失。 当操作系统加载时,它将显示为没有分区或文件系统的全新持久性内存设备,并显示为 RAW,表明它没有文件系统。
常规特性 持久性内存将处于只读模式。 执行显式用户操作才能再次使用。
存储空间性能 存储空间仍可操作(如果只有一个持久性内存模块受到影响)。
PMem PhysicalDisk 对象的运行状况将显示为“不正常”,且它无法由存储空间使用。
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。
EventLog – Microsoft-Windows-ScmDisk0101/Operational
要执行的操作 如果用户不想替换受影响的设备,可使用 Reset-PhysicalDisk cmdlet 清除受影响持久性内存模块上的只读条件。 在存储空间环境中,这也会尝试将持久性内存模块重新集成到存储空间并启动修复进程。

后续步骤

如需相关信息,另请参阅: