Red Hat Training

A Red Hat training course is available for RHEL 8

5.8.3. Detecção e substituição de um dispositivo NVDIMM quebrado

Se você encontrar mensagens de erro relacionadas ao NVDIMM relatadas em seu log de sistema ou por S.M.A.R.T., isso pode significar que um dispositivo NVDIMM está falhando. Nesse caso, é necessário:

  1. Detectar qual dispositivo NVDIMM está falhando
  2. Cópia de segurança dos dados nele armazenados
  3. Substituir fisicamente o dispositivo

Procedimento

  1. Para detectar o dispositivo quebrado, use o seguinte comando:

    # lista ndctl --dimms --regiões --saúde --mídia-errores --humano

    O campo badblocks mostra qual NVDIMM está quebrado. Anote seu nome no campo dev.

    Exemplo 5.7. Status de saúde dos dispositivos NVDIMM

    No exemplo a seguir, o NVDIMM chamado nmem0 está quebrado:

    # 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. Use o seguinte comando para encontrar o atributo phys_id do NVDIMM quebrado:

    # lista ndctl --dimms --humano

    Pelo exemplo anterior, você sabe que nmem0 é o NVDIMM quebrado. Portanto, encontre o atributo phys_id de nmem0.

    Exemplo 5.8. The phys_id attributes of NVDIMMs

    No exemplo a seguir, o phys_id é 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. Use o seguinte comando para encontrar o slot de memória do NVDIMM quebrado:

    # dmidecode

    Na saída, encontre a entrada onde o identificador Handle corresponde ao atributo phys_id do NVDIMM quebrado. O campo Locator lista o slot de memória utilizado pelo NVDIMM quebrado.

    Exemplo 5.9. Lista de Slot de Memória NVDIMM

    No exemplo a seguir, o dispositivo nmem0 combina com o identificador 0x0010 e utiliza o slot de memória 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. Faça backup de todos os dados nos namespaces do NVDIMM. Se você não fizer o backup dos dados antes de substituir o NVDIMM, os dados serão perdidos quando você remover o NVDIMM de seu sistema.

    Atenção

    Em alguns casos, como quando o NVDIMM está completamente quebrado, o backup pode falhar.

    Para evitar isso, monitore regularmente seus dispositivos NVDIMM usando S.M.A.R.T. como descrito em Seção 5.8.2, “Monitoramento da saúde NVDIMM usando S.M.A.R.T.” e substitua os NVDIMMs com defeito antes que eles se quebrem.

    Use o seguinte comando para listar os espaços de nomes no NVDIMM:

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

    Exemplo 5.10. NVDIMM lista de NVDIMM namespaces

    No exemplo a seguir, o dispositivo nmem0 contém os namespaces namespace0.0 e namespace0.2, os quais você precisa fazer backup:

    # 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. Substituir fisicamente o NVDIMM quebrado.

Recursos adicionais

  • A página do homem ndctl-list(1)
  • A página do homem dmidecode(8)