持久内存运行状况管理

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

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

这些简短视频概述了 Windows 对永久性内存的支持:

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

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

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

在 Windows Server 2016 中,存储空间 GUI 将 NVDIMM-N 总线类型显示为 UNKNOWN。 在创建池、存储 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 可以帮助确定哪些持久性内存设备处于故障状态。

若要了解各种健康状况,请参阅以下部分。

健康警告状态

检查永久性内存设备的运行状况并看到其运行状况列为 警告时,会出现此条件,如以下示例输出中所示:

序列号 健康状态 OperationalStatus 运营详情
802c-01-1602-117cb5fc 健康 还行
802c-01-1602-117cb64f 警告 预测失败 {阈值超出,NVDIMM_N错误}

下表列出了有关此条件的一些信息。

标题 描述
可能的条件 警告阈值已超出
根源 永久性内存设备跟踪各种阈值,例如温度、NVM 生存期和/或能源生存期。 超过其中一个阈值时,操作系统会被通知。
常规行为 设备保持完全正常运行。 这是警告,而不是错误。
存储空间行为 设备保持完全正常运行。 这是警告,而不是错误。
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。 事件日志 – Microsoft-Windows-ScmDisk0101/Operational
怎么办 根据超出的警告阈值,更换永久性内存设备可能是明智的。

写入永久性内存设备失败

当您检查持久性内存设备的健康状况时,看到“健康状态”显示为“不健康”,而“运行状态”显示 IO 错误,如以下示例输出中所示:

序列号 健康状态 OperationalStatus 操作详情
802c-01-1602-117cb5fc 健康 还行
802c-01-1602-117cb64f 不健康 {过时元数据, IO 错误, 暂时性错误} {丢失的数据持久性,丢失的数据,NV...}

下表列出了有关此条件的一些信息。

标题 描述
可能的条件 持久性/备份电源丢失
根源 永久性内存设备依赖于备份电源(通常是电池或超级电容)来保障其持久性。 如果此备份电源不可用,或者设备出于任何原因(控制器/闪存错误)无法执行备份,则数据处于危险状态,Windows 将阻止对受影响设备进行进一步写入。 读操作仍然可以转移数据。
常规行为 将卸载 NTFS 卷。
PhysicalDisk 运行状况字段将显示所有受影响的 NVDIMM-N 设备的“不正常”。
存储空间行为 只要只有一个永久性内存模块受到影响,存储空间就会保持运行状态。 如果多个设备受到影响,则写入存储空间将失败。
PhysicalDisk 运行状况字段将显示所有受影响的永久性内存设备的“不正常”。
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。
事件日志 – Microsoft-Windows-ScmDisk0101/Operational
怎么做 建议备份受影响的 PMem 数据。 若要获取读取访问权限,可以手动将磁盘联机(它将显示为只读 NTFS 卷)。

若要完全清除这种情况,必须解决根本原因(即服务电源或更换永久性内存模块,具体取决于问题),模块上的卷必须脱机并再次联机,或者必须重启系统。

若要使永久性内存模块在存储空间中再次可用,请使用 Reset-PhysicalDisk cmdlet,该 cmdlet 重新初始化设备并启动修复过程。

设备以“0”字节的容量或“通用物理磁盘”的形式显示

当永久性内存设备显示容量为 0 字节且无法初始化时,或者被显示为“通用物理磁盘”对象但没有序列号且显示运行状态为 丢失通信时,正如以下示例输出中所示:

序列号 健康状态 OperationalStatus 操作详情
802c-01-1602-117cb5fc 健康 还行
警告 通信丢失

下表列出了有关此条件的一些信息。

标题 描述
可能的条件 BIOS 未向 OS 公开永久性内存模块
根源 永久性内存设备基于 DRAM。 引用损坏的 DRAM 地址时,大多数 CPU 将启动计算机检查并重启服务器。 然后,某些服务器平台会解除持久性内存模块的映射,防止操作系统访问它,并可能触发另一机器检查。 如果 BIOS 检测到永久性内存模块已失败,并且需要更换,则也可能发生这种情况。
常规行为 永久性内存模块显示为未初始化,容量为 0 字节,无法读取或写入。
存储空间行为 存储空间仍可正常运行(前提是只有一个永久性内存模块受到影响)。
PMem PhysicalDisk 对象显示“健康状态警告”,并标记为“普通物理磁盘”
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。
事件日志 – Microsoft-Windows-ScmDisk0101/Operational
怎么办 必须更换或清理永久性内存设备,以便服务器平台再次将其公开给主机 OS。 建议更换设备,因为可能发生更多无法更正的错误。 可以使用 Add-PhysicalDisk cmdlet 将替换设备添加到存储空间配置。

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

检查持久性内存设备的健康状态并看到“运行不正常”和“无法识别元数据的运行状态”时,该条件存在,如以下示例输出中所示:

序列号 健康状态 OperationalStatus 操作详情
802c-01-1602-117cb5fc 健康 还行 {Unknown}
802c-01-1602-117cb64f 不健康 {无法识别的元数据,过时的元数据} {Unknown}

下表列出了有关此条件的一些信息。

标题 描述
可能的条件 备份/还原失败
根源 备份或还原过程中的失败可能会导致永久性内存模块上的所有数据丢失。 当操作系统加载时,它将显示为一个全新的永久性内存设备,没有分区或文件系统,并以 RAW 状态出现,这意味着它没有文件系统。
常规行为 永久性内存将处于只读模式。 需要用户显式进行操作才能再次使用它。
存储空间行为 如果只有一个永久性内存模块受到影响,存储空间将保持正常运行。
PMem 物理磁盘对象的健康状态将显示为“不正常”,不会被存储空间使用。
详细信息 PhysicalDisk 对象的 OperationalStatus 字段。
EventLog – Microsoft-Windows-ScmDisk0101/Operational
怎么办 如果用户不想替换受影响的设备,他们可以使用 Reset-PhysicalDisk cmdlet 清除受影响永久性内存模块上的只读条件。 在存储空间环境中,这也将尝试将永久性内存模块重新集成到存储空间中,并启动修复过程。

后续步骤

有关相关信息,另请参阅: