Red Hat Training

A Red Hat training course is available for RHEL 8

5.8.3. Detección y sustitución de un dispositivo NVDIMM roto

Si encuentra mensajes de error relacionados con NVDIMM reportados en el registro del sistema o por S.M.A.R.T., podría significar que un dispositivo NVDIMM está fallando. En ese caso, es necesario:

  1. Detectar qué dispositivo NVDIMM está fallando
  2. Haz una copia de seguridad de los datos almacenados en él
  3. Sustituir físicamente el dispositivo

Procedimiento

  1. Para detectar el dispositivo roto, utilice el siguiente comando:

    # ndctl list --dimms --regions --health --media-errors --human

    El campo badblocks muestra qué NVDIMM está roto. Anote su nombre en el campo dev.

    Ejemplo 5.7. Estado de salud de los dispositivos NVDIMM

    En el siguiente ejemplo, el NVDIMM llamado nmem0 está roto:

    # 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. Utilice el siguiente comando para encontrar el atributo phys_id del NVDIMM roto:

    # ndctl list --dimms --human

    Por el ejemplo anterior, sabes que nmem0 es el NVDIMM roto. Por lo tanto, encuentra el atributo phys_id de nmem0.

    Ejemplo 5.8. Los atributos phys_id de los módulos NVDIMM

    En el siguiente ejemplo, el phys_id es 0x10:

    # 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. Utilice el siguiente comando para encontrar la ranura de memoria del NVDIMM roto:

    # dmidecode

    En la salida, busque la entrada en la que el identificador Handle coincida con el atributo phys_id del NVDIMM roto. El campo Locator enumera la ranura de memoria utilizada por el NVDIMM roto.

    Ejemplo 5.9. Listado de ranuras de memoria NVDIMM

    En el siguiente ejemplo, el dispositivo nmem0 coincide con el identificador 0x0010 y utiliza la ranura de memoria DIMM-XXX-YYYY:

    # 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. Haga una copia de seguridad de todos los datos de los espacios de nombre del NVDIMM. Si no hace una copia de seguridad de los datos antes de sustituir el NVDIMM, los datos se perderán cuando retire el NVDIMM del sistema.

    Aviso

    En algunos casos, como cuando el NVDIMM está completamente roto, la copia de seguridad podría fallar.

    Para evitarlo, supervise regularmente sus dispositivos NVDIMM utilizando el S.M.A.R.T. como se describe en Sección 5.8.2, “Supervisión del estado de los NVDIMM mediante S.M.A.R.T.” y sustituya los NVDIMM que fallen antes de que se rompan.

    Utilice el siguiente comando para listar los espacios de nombres en el NVDIMM:

    # ndctl list --namespaces --dimm=DIMM-ID-number

    Ejemplo 5.10. Listado de espacios de nombres NVDIMM

    En el siguiente ejemplo, el dispositivo nmem0 contiene los espacios de nombre namespace0.0 y namespace0.2, de los que hay que hacer una copia de seguridad:

    # 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. Reemplace el NVDIMM roto físicamente.

Recursos adicionales

  • La página de manual ndctl-list(1)
  • La página de manual dmidecode(8)