Red Hat Training

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

28.5. NVDIMM のトラブルシューティング

28.5.1. S.M.A.R.T を使用した NVDIMM の正常性の監視

一部の NVDIMMs は、正常性情報を取得する Self-Monitoring, Analysis and Reporting Technology (S.M.A.R.T.) インターフェイスに対応しています。
NVDIMM 正常性を定期的に監視して、データの損失を防ぎます。S.M.A.R.T. が NVDIMM の正常性ステータスで問題を報告する場合は、「破損した 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. 破損した NVDIMM の検出と置き換え

システムログまたは S.M.A.R.T. に NVDIMM 関連のエラーメッセージが記録される場合は、NVDIMM デバイスがエラーを起こしていることが考えられます。この場合は、以下を行う必要があります。
  1. どの NVDIMM デバイスに障害が発生しているかを検出する
  2. 保存されているデータのバックアップを作成する
  3. デバイスを物理的に交換する

手順28.3 破損した 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 の正常性の監視」 の説明に従って、S.M.A.R.T. を使用して NVDIMMs デバイスを定期的に監視し、破損する前にエラーを起こしている NVDIMMs を交換してください。
    次のコマンドを使用して、NVDIMM の名前空間をリスト表示します。
    # ndctl list --namespaces --dimm=DIMM-ID-number
    以下の例では、nmem0 デバイスには、バックアップする必要がある namespace 0.0 および namespace 0.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 を物理的に交換します。