21.10. 检测和替换断开问题的 NVDIMM 设备
如果您发现与系统日志中报告的 Non-Volatile Dual In-line Memory Modules (NVDIMM) 相关的错误消息,或者 S.M.A.R.T.,这可能意味着 NVDIMM 设备失败。在这种情况下,需要:
- 检测哪个 NVDIMM 设备失败
- 备份保存的数据
- 物理替换该设备
流程
检测有问题的设备:
ndctl list --dimms --regions --health
# ndctl list --dimms --regions --health { "dimms":[ { "dev":"nmem1", "id":"8089-a2-1834-00001f13", "handle":17, "phys_id":32, "security":"disabled", "health":{ "health_state":"ok", "temperature_celsius":35.0, [...] } [...] }
Copy to Clipboard Copied! 查找有问题的 NVDIMM 的
phys_id
属性:ndctl list --dimms --human
# ndctl list --dimms --human
Copy to Clipboard Copied! 在上例中,您知道
nmem0
是有问题的 NVDIMM。因此,查找nmem0
的phys_id
属性。例 21.7. NVDIMM 的 phys_id 属性
在以下示例中,
phys_id
是0x10
:ndctl list --dimms --human
# ndctl list --dimms --human [ { "dev":"nmem1", "id":"XXXX-XX-XXXX-XXXXXXXX", "handle":"0x120", "phys_id":"0x1c" }, { "dev":"nmem0", "id":"XXXX-XX-XXXX-XXXXXXXX", "handle":"0x20", "phys_id":"0x10", "flag_failed_flush":true, "flag_smart_event":true } ]
Copy to Clipboard Copied! 查找有问题的 NVDIMM 的内存插槽:
dmidecode
# dmidecode
Copy to Clipboard Copied! 在输出中,找到 Handle 标识符与有问题的 NVDIMM 的
phys_id
属性匹配的条目。Locator 字段列出了有问题的 NVDIMM 使用的内存插槽。例 21.8. NVDIMM 内存插槽列表
在以下示例中,
nmem0
设备与0x0010
标识符匹配,并使用DIMM-XXX-YYYY
内存插槽:dmidecode
# dmidecode ... Handle 0x0010, DMI type 17, 40 bytes Memory Device Array Handle: 0x0004 Error Information Handle: Not Provided Total Width: 72 bits Data Width: 64 bits Size: 125 GB Form Factor: DIMM Set: 1 Locator: DIMM-XXX-YYYY Bank Locator: Bank0 Type: Other Type Detail: Non-Volatile Registered (Buffered) ...
Copy to Clipboard Copied! 备份 NVDIMM 命名空间中的所有数据。如果您在替换 NVDIMM 前没有备份数据,当您从系统中删除 NVDIMM 时数据将会丢失。
警告在某些情况下,比如 NVDIMM 完全无法正常工作,备份可能会失败。
要防止这种情况,请使用 S.M.A.R.T.T 定期监控 NVDIMM 设备,如 使用 S.M.A.R.T.T 监控 NVDIMM 健康状况 中所述,并在它们中断前替换失败的 NVDIMM。
列出 NVDIMM 上的命名空间:
ndctl list --namespaces --dimm=DIMM-ID-number
# ndctl list --namespaces --dimm=DIMM-ID-number
Copy to Clipboard Copied! 例 21.9. NVDIMM 命名空间列表
在以下示例中,
nmem0
设备包含namespace0.0
和namespace0.2
命名空间,您需要备份:ndctl list --namespaces --dimm=0
# ndctl list --namespaces --dimm=0 [ { "dev":"namespace0.2", "mode":"sector", "size":67042312192, "uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "raw_uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sector_size":4096, "blockdev":"pmem0.2s", "numa_node":0 }, { "dev":"namespace0.0", "mode":"sector", "size":67042312192, "uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "raw_uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sector_size":4096, "blockdev":"pmem0s", "numa_node":0 } ]
Copy to Clipboard Copied! - 以物理方式替换失效的 NVDIMM。