3.8. NVDIMM 永続メモリーのトラブルシューティング

NVDIMM デバイスで、さまざまな種類のエラーの検出および修正を行うことができます。

前提条件

  • NVDIMM デバイスがシステムに接続され、設定されている。

3.8.1. ndctl のインストール

この手順では、NVDIMM デバイスの設定および監視に使用する ndctl ユーティリティーをインストールします。

手順

  • ndctl ユーティリティーをインストールするには、次のコマンドを使用します。

    # yum install ndctl

3.8.2. S.M.A.R.T. を使用した NVDIMM 正常性 (ヘルス) の監視

一部の NVDIMM デバイスは、正常性情報を取得する S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) インターフェースに対応しています。

重要

NVDIMM 正常性を定期的に監視して、データの損失を防ぎます。「破損した NVDIMM デバイスの検出と交換」で説明しているように、S.M.A.R.T. が 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"
          }
         }
    ...

関連情報

  • man ページの ndctl-list(1)

3.8.3. 破損した NVDIMM デバイスの検出と交換

システムログまたは S.M.A.R.T. に NVDIMM 関連のエラーメッセージが記録される場合は、NVDIMM デバイスがエラーを起こしていることが考えられます。この場合は、以下を行う必要があります。

  1. NVDIMM デバイスがエラーしていることを検出
  2. そこに格納されているデータをバックアップ
  3. デバイスを物理的に交換

手順

  1. 破損したデバイスを検出するには、次のコマンドを使用します。

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

    badblocks フィールドは、NVDIMM が破損していることを示しています。dev フィールドに名前を書き留めます。

    例3.7 NVDIMM デバイスの正常性ステータス

    以下の例では、nmem0 という名前の 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 属性を確認します。

    例3.8 NVDIMMs の phys_id 属性

    以下の例では、phys_id0x10 です。

    # 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 が使用するメモリースロットの一覧を表示します。

    例3.9 NVDIMM メモリースロットリスティング

    以下の例では、nmem0 デバイスが 0x0010 の識別子に一致し、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. NVDIMM 上の名前空間にある全データのバックアップを作成します。NVDIMM を交換する前にデータのバックアップを作成しないと、システムから NVDIMM を削除したときにデータが失われます。

    警告

    時折、NVDIMM が完全に破損すると、バックアップが失敗することがあります。

    これを回避するためにも、「S.M.A.R.T. を使用した NVDIMM 正常性 (ヘルス) の監視」で説明しているように、S.M.A.R.T. を使用して NVDIMM デバイスを定期的に監視して、破損する前にエラーを起こしている NVDIMM を交換してください。

    次のコマンドを使用して、NVDIMM の名前空間を一覧表示します。

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

    例3.10 NVDIMM 名前空間の一覧表示

    以下の例では、nmem0 デバイスには、バックアップが必要な名前空間の namespace0.0namespace0.2 が含まれます。

    # 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 を物理的に交換します。

関連情報

  • man ページの ndctl-list(1)
  • man ページの dmidecode(8)