28.5. NVDIMM 故障排除


28.5.1. 使用 S.M.A.R.T 监控 NVDIMM 健康状况。

有些 NVDIMM 支持自监控、分析和报告技术(S.M.A.R.T.)接口来检索健康信息。
定期监控 NVDIMM 健康状况以防止数据丢失。如果 S.M.A.R.T. 报告 NVDIMM 健康状态的问题,请替换它,如 第 28.5.2 节 “检测和替换 Broken NVDIMM” 所述。

先决条件

  • 在有些系统中,必须载入 acpi_ipmi 驱动程序才能检索健康信息:
    # modprobe acpi_ipmi

流程

  • 要访问健康信息,请使用以下命令:
    # ndctl list --dimms --health
    ...
        {
          "dev":"nmem0",
          "id":"802c-01-1513-b3009166",
          "handle":1,
          "phys_id":22,
          "health":
          {
            "health_state":"ok",
            "temperature_celsius":25.000000,
            "spares_percentage":99,
            "alarm_temperature":false,
            "alarm_spares":false,
            "temperature_threshold":50.000000,
            "spares_threshold":20,
            "life_used_percentage":1,
            "shutdown_state":"clean"
          }
         }
    ...
    

28.5.2. 检测和替换 Broken NVDIMM

如果您在系统日志或者 S.M.A.R.T. 中发现与 NVDIMM 相关的错误消息,这可能意味着 NVDIMM 设备失败。在这种情况下,需要:
  1. 检测哪个 NVDIMM 设备失败,
  2. 备份存储的数据,以及
  3. 物理替换该设备。

过程 28.3. 检测和替换 Broken NVDIMM

  1. 要检测有问题的 DIMM,请使用以下命令:
    # ndctl list --dimms --regions --health --media-errors --human
    
    badblocks 字段显示哪些 NVDIMM 有问题。注意它在 dev 字段中的名称。在以下示例中,名为 nmem0 的 NVDIMM 有问题:

    例 28.1. NVDIMM 设备的健康状况

    # ndctl list --dimms --regions --health --media-errors --human
    
    ...
      "regions":[
        {
          "dev":"region0",
          "size":"250.00 GiB (268.44 GB)",
          "available_size":0,
          "type":"pmem",
          "numa_node":0,
          "iset_id":"0xXXXXXXXXXXXXXXXX",
          "mappings":[
            {
              "dimm":"nmem1",
              "offset":"0x10000000",
              "length":"0x1f40000000",
              "position":1
            },
            {
              "dimm":"nmem0",
              "offset":"0x10000000",
              "length":"0x1f40000000",
              "position":0
            }
          ],
          "badblock_count":1,
          "badblocks":[
            {
              "offset":65536,
              "length":1,
              "dimms":[
                "nmem0"
              ]
            }
          ],
          "persistence_domain":"memory_controller"
        }
      ]
    }
    
  2. 使用以下命令查找有问题的 NVDIMM 的 phys_id 属性:
    # ndctl list --dimms --human
    
    在上例中,您知道 nmem0 是有问题的 NVDIMM。因此,查找 nmem0phys_id 属性。在以下示例中,phys_id0x10:

    例 28.2. NVDIMM 的 phys_id 属性

    # 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
      }
    ]
    
  3. 使用以下命令查找有问题的 NVDIMM 的内存插槽:
    # dmidecode
    
    在输出中,找到 Handle 标识符与有问题的 NVDIMM 的 phys_id 属性匹配的条目。Locator 字段列出了有问题的 NVDIMM 使用的内存插槽。在以下示例中,nmem0 设备与 0x0010 标识符匹配,并使用 DIMM-XXX-YYYY 内存插槽:

    例 28.3. NVDIMM 内存插槽列表

    # 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)
    ...
    
  4. 备份 NVDIMM 命名空间中的所有数据。如果您在替换 NVDIMM 前没有备份数据,当您从系统中删除 NVDIMM 时数据将会丢失。
    警告
    在某些情况下,比如 NVDIMM 完全无法正常工作,备份可能会失败。
    要防止这种情况,请使用 S.M.A.R.T 定期监控 NVDIMM 设备,如 第 28.5.1 节 “使用 S.M.A.R.T 监控 NVDIMM 健康状况。” 所述,并在它们中断前替换失败的 NVDIMM。
    使用以下命令列出 NVDIMM 上的命名空间:
    # ndctl list --namespaces --dimm=DIMM-ID-number
    在以下示例中,nmem0 设备包含 namespace0.0namespace0.2 命名空间,您需要备份:

    例 28.4. NVDIMM 命名空间列表

    # 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
      }
    ]
    
  5. 以物理方式替换失效的 NVDIMM。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.