Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 NVDIMMs の 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 Health の監視」 で説明しているように、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 を物理的に交換します。