第5章 NVDIMM 永続メモリーストレージの使用

システム管理者は、システムに接続した NVDIMM (Non-Volatile Dual In-line Memory Modules) デバイス上にあるさまざまなタイプのストレージの有効化および管理を行うことができます。

NVDIMM ストレージに Red Hat Enterprise Linux 8 をインストールする場合は、代わりに「NVDIMM デバイスへのインストール」を参照してください。

5.1. NVDIMM 永続メモリーテクノロジー

ストレージクラスメモリーまたは pmem と呼ばれる NVDIMM 永続メモリーは、メモリーとストレージを組み合わせたものになります。

NVDIMM は、ストレージの耐久性に加え、低アクセスレイテンシーと動的な DRAM の広帯域幅を採用しています。

  • NVDIMM ストレージはバイト単位でアドレスを指定できるため、CPU 読み込みおよびストア命令でアクセスできます。従来のブロックベースのストレージへのアクセスに必要なシステムコール read() および write() の他に、NVDIMM はダイレクトロードとストアプログラミングモデルにも対応しています。
  • NVDIMM のパフォーマンス特性は、アクセスレイテンシーが非常に低い DRAM と似ています。通常、数万 ~ 数十万ナノ秒です。
  • NVDIMM に格納されたデータは、ストレージのように電源がオフになった際に保持されます。
  • ダイレクトアクセス (DAX) テクノロジーでは、システムページキャッシュを介することなく、アプリケーションが直接ストレージをマッピングできるようになります。これにより、別の目的で DRAM を解放します。

NVDIMM は、次のようなユースケースでメリットがあります。

データベース
NVDIMM のストレージのアクセスのレイテンシーを削減すると、データベースのパフォーマンスが大幅に向上する可能性があります。
高速な再起動

高速な再起動は、ウォームキャッシュ効果とも呼ばれます。たとえば、ファイルサーバーは起動後、メモリー内にファイルコンテンツを持ちません。クライアントがデータを接続して読み書きすると、そのデータはページキャッシュにキャッシュされます。最終的に、キャッシュには、ほとんどのホットデータが含まれます。再起動後、システムは従来のストレージで再度プロセスを開始する必要があります。

NVDIMM により、アプリケーションが適切に設計されていれば、アプリケーションで再起動間のウォームキャッシュを維持できるようになります。この例には、ページキャッシュは含まれません。アプリケーションは、永続メモリーに直接データをキャッシュします。

高速書き込みキャッシュ
ファイルサーバーは多くの場合、耐久性のあるメディアにデータが存在するまで、クライアントの書き込み要求を承認しません。NVDIMM を高速書き込みキャッシュとして使用することで、ファイルサーバーは、低レイテンシーにより迅速に書き込み要求を確認できるようになります。

5.2. NVDIMM のインターリービングおよび地域

NVDIMM デバイスは、インターリーブリージョンへのグループ化に対応しています。

NVDIMM デバイスは、通常の DRAM と同じ方法でインターリーブセットにグループ化できます。インターリーブセットは、複数の DIMM にまたがる RAID 0 レベル (ストライプ) 設定と似ています。インターリーブセットは、リージョン とも呼ばれます。

インターリービングには、以下の利点があります。

  • NVDIMM は、インターリーブセットに設定するとパフォーマンスが向上します。
  • インターリービングは、複数の小さな NVDIMM デバイスを大きな論理デバイスに組み合わせます。

NVDIMM インターリーブセットは、システムの BIOS または UEFI ファームウェアで設定されます。

Red Hat Enterprise Linux は、各インターリーブセットにリージョンデバイスを作成します。

5.3. NVDIMM 名前空間

NVDIMM リージョンは複数の名前空間に分けられます。名前空間では、名前空間のタイプに基づいて、別の方法を使用してデバイスにアクセスできるようになります。

一部の NVDIMM デバイスは、任意のリージョンでの複数の名前空間に対応していません。

  • お使いの NVDIMM デバイスがラベルに対応している場合は、リージョンを名前空間に分割できます。
  • NVDIMM デバイスがラベルに対応していない場合は、リージョンに名前空間を 1 つだけ追加できます。この場合、Red Hat Enterprise Linux は、リージョン全体に対応するデフォルトの名前空間を作成します。

5.4. NVDIMM アクセスモード

NVDIMM 名前空間で、以下のいずれかのモードを使用するように設定できます。

sector

ストレージを高速ブロックデバイスとして示します。このモードは、NVDIMM ストレージを使用するように変更されていない従来のアプリケーションや、デバイスマッパーを含む完全な I/O スタックを利用するアプリケーションに役に立ちます。

セクター デバイスは、システム上のその他のブロックデバイスと同じ方法で使用できます。そこではパーティションやファイルシステムを作成し、ソフトウェア RAID セットの一部として作成したり、dm-cache のキャッシュデバイスとして使用できます

このモードのデバイスは、/dev/pmemNs で利用できます。名前空間の作成後に一覧表示される blockdev 値を参照してください。

devdax またはデバイスダイレクトアクセス (DAX)

「Storage Networking Industry Association (SNIA) 非揮発性メモリー (NVM) プログラミングモデル仕様」で説明されているように、NVDIMM デバイスがダイレクトアクセスプログラミングに対応します。このモードでは、I/O はカーネルのストレージスタックを回避します。したがって、デバイスマッパードライバーは使用できません。

デバイス DAX は、DAX キャラクターデバイスノードを使用して NVDIMM ストレージへの raw アクセスを提供します。CPU キャッシュのフラッシュ命令とフェンシング命令を使用して、devdax デバイスのデータを作成できます。特定のデータベースおよび仮想マシンのハイパーバイザーは、このモードの利点を得られます。devdax デバイスにファイルシステムを作成することはできません。

このモードのデバイスは、/dev/daxN.M で利用できます。名前空間の作成後に一覧表示される chardev 値を参照してください。

fsdax またはファイルシステムダイレクトアクセス (DAX)

「Storage Networking Industry Association (SNIA) 非揮発性メモリー (NVM) プログラミングモデル仕様」で説明されているように、NVDIMM デバイスがダイレクトアクセスプログラミングに対応します。このモードでは、I/O はカーネルのストレージスタックを回避するため、多くのデバイスマッパードライバーが使用できなくなります。

ファイルシステム DAX デバイスにファイルシステムを作成できます。

このモードのデバイスは、/dev/pmemN で利用できます。名前空間の作成後に一覧表示される blockdev 値を参照してください。

重要

ファイルシステムの DAX テクノロジーはテクノロジープレビューとしてのみ提供されるため、Red Hat では対応していません。

raw

DAX に対応していないメモリーディスクを示します。このモードでは、名前空間にいくつかの制限があるため、使用すべきではありません。

このモードのデバイスは、/dev/pmemN で利用できます。名前空間の作成後に一覧表示される blockdev 値を参照してください。

5.5. ブロックデバイスとして動作する NVDIMM 上のセクター名前空間の作成

従来のブロックベースのストレージをサポートするため、レガシーモード というセクターモードで NVDIMM デバイスを設定できます。

次のいずれかになります。

  • 既存の名前空間をセクターモードに再設定
  • 新規セクター名前空間を作成 (利用可能な領域がある場合)

前提条件

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

5.5.1. ndctl のインストール

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

手順

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

    # yum install ndctl

5.5.2. 既存の NVDIMM 名前空間のセクターモードへの再設定

この手順では、高速ブロックデバイスとして使用する NVDIMM 名前空間をセクターモードに再構成します。

警告

名前空間を再設定すると、名前空間に保存しておいたすべてのデータが削除されます。

前提条件

手順

  1. 選択した名前空間をセクターモードに再設定します。

    # ndctl create-namespace \
            --force \
            --reconfig=namespace-ID \
            --mode=sector

    例5.1 セクターモードでの namespace1.0 の再設定

    セクターモードを使用するために namespace1.0 名前空間を再設定するには、次のコマンドを実行します。

    # ndctl create-namespace \
            --force \
            --reconfig=namespace1.0 \
            --mode=sector
    
    {
      "dev":"namespace1.0",
      "mode":"sector",
      "size":"11.99 GiB (12.87 GB)",
      "uuid":"5805480e-90e6-407e-96a4-23e1cde2ed78",
      "raw_uuid":"879d9e9f-fd43-4ed5-b64f-3bcd0781391a",
      "sector_size":4096,
      "blockdev":"pmem1s",
      "numa_node":1
    }
  2. 再設定した名前空間は、/dev/pmemNs として /dev ディレクトリーで利用できるようになります。

関連情報

  • man ページの ndctl-create-namespace(1)

5.5.3. セクターモードでの新たな NVDIMM 名前空間の作成

以下の手順では、NVDIMM デバイスで新しいセクター名前空間を作成し、従来のブロックデバイスとして使用できるようにします。

前提条件

  • ndctl ユーティリティーがインストールされている。「ndctl のインストール」 を参照してください。
  • NVDIMM デバイスがラベルに対応している。

手順

  1. 利用可能な領域があるシステムの pmem リージョンの一覧を表示します。以下の例では、region5 リージョンと region4 リージョンの領域が利用できます。

    # ndctl list --regions
    
    [
      {
        "dev":"region5",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-7337419320239190016
      },
      {
        "dev":"region4",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-137289417188962304
      }
    ]
  2. いずれのリージョンでも、複数の名前空間を割り当てます。

    # ndctl create-namespace \
            --mode=sector \
            --region=regionN \
            --size=namespace-size

    例5.2 リージョンへの名前空間の作成

    以下のコマンドは、region4 に 36 GiB セクターの名前空間を作成します。

    # ndctl create-namespace \
            --mode=sector \
            --region=region4 \
            --size=36G
  3. 新しい名前空間が、/dev ディレクトリー配下の /dev/pmemNs として利用できます。

関連情報

  • man ページの ndctl-create-namespace(1)

5.6. NVDIMM でのデバイス DAX 名前空間の作成

デバイスの DAX モードで NVDIMM デバイスを設定すると、ダイレクトアクセス機能を備えたキャラクターストレージに対応できます。

次のいずれかになります。

  • 既存の名前空間をデバイスの DAX モードに再設定
  • 利用可能な領域がある場合は、新しいデバイスの DAX 名前空間を作成

前提条件

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

5.6.1. デバイスのダイレクトアクセスモードの NVDIMM

デバイスダイレクトアクセス (デバイス DAX である devdax) は、ファイルシステムの関与なしで、アプリケーションがストレージに直接アクセスできる手段を提供します。デバイス DAX の利点は、ndctl ユーティリティーの --align オプションを使用して設定できる、保証されたフォールトの粒度を提供することです。

Intel 64 アーキテクチャおよび AMD64 アーキテクチャでは、以下のフォールト粒度に対応しています。

  • 4 KiB
  • 2 MiB
  • 1 GiB

デバイス DAX ノードは、以下のシステム呼び出しにのみ対応しています。

  • open()
  • close()
  • mmap()

デバイス DAX のユースケースは永続メモリープログラミングに関連付けられているため、read() バリアントおよび write() バリアントには対応していません。

5.6.2. ndctl のインストール

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

手順

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

    # yum install ndctl

5.6.3. 既存の NVDIMM 名前空間をデバイス DAX モードに再構成

以下の手順では、NVDIMM デバイスで名前空間を DAX モードに再構成し、名前空間にデータを保存できるようにします。

警告

名前空間を再設定すると、名前空間に保存しておいたすべてのデータが削除されます。

前提条件

手順

  1. システムにある名前空間の一覧を表示します。

    # ndctl list --namespaces --idle
    
    [
      {
        "dev":"namespace1.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":1
      },
      {
        "dev":"namespace0.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":0
      }
    ]
  2. 名前空間を再設定します。

    # ndctl create-namespace \
            --force \
            --mode=devdax \
            --reconfig=namespace-ID

    例5.3 名前空間をデバイス DAX として再設定

    次のコマンドは、DAX に対応するデータストレージ用に namespace0.0 を再設定します。オペレーティングシステムが一度に 2 MiB ページでフォールトされるように、2 MiB フォールトの粒度に合わせて調整されます。

    # ndctl create-namespace \
            --force \
            --mode=devdax \
            --align=2M \
            --reconfig=namespace0.0
  3. 名前空間は、/dev/daxN.M パスで利用できます。

関連情報

  • man ページの ndctl-create-namespace(1)

5.6.4. デバイス DAX モードでの新しい NVDIMM 名前空間の作成

以下の手順では、NVDIMM デバイスに新たなデバイス DAX 名前空間を作成し、この名前空間にデータを保存できるようにします。

前提条件

  • ndctl ユーティリティーがインストールされている。「ndctl のインストール」 を参照してください。
  • NVDIMM デバイスがラベルに対応している。

手順

  1. 利用可能な領域があるシステムの pmem リージョンの一覧を表示します。以下の例では、region5 リージョンと region4 リージョンの領域が利用できます。

    # ndctl list --regions
    
    [
      {
        "dev":"region5",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-7337419320239190016
      },
      {
        "dev":"region4",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-137289417188962304
      }
    ]
  2. いずれのリージョンでも、複数の名前空間を割り当てます。

    # ndctl create-namespace \
            --mode=devdax \
            --region=regionN \
            --size=namespace-size

    例5.4 リージョンへの名前空間の作成

    次のコマンドは、region4 に 36-GiB のデバイス DAX 名前空間を作成します。オペレーティングシステムが一度に 2 MiB ページでフォールトされるように、2 MiB フォールトの粒度に合わせて調整されます。

    # ndctl create-namespace \
            --mode=devdax \
            --region=region4 \
            --align=2M \
            --size=36G
    
    {
      "dev":"namespace1.2",
      "mode":"devdax",
      "map":"dev",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"5ae01b9c-1ebf-4fb6-bc0c-6085f73d31ee",
      "raw_uuid":"4c8be2b0-0842-4bcb-8a26-4bbd3b44add2",
      "daxregion":{
        "id":1,
        "size":"35.44 GiB (38.05 GB)",
        "align":2097152,
        "devices":[
          {
            "chardev":"dax1.2",
            "size":"35.44 GiB (38.05 GB)"
          }
        ]
      },
      "numa_node":1
    }
  3. 名前空間は、/dev/daxN.M パスで利用できます。

関連情報

  • man ページの ndctl-create-namespace(1)

5.7. NVDIMM でのファイルシステム DAX 名前空間の作成

NVDIMM デバイスをファイルシステム DAX モードに設定し、ダイレクトアクセス機能を備えたファイルシステムに対応します。

次のいずれかになります。

  • ファイルシステムの DAX モードに既存の名前空間を再設定
  • 新しいファイルシステム DAX 名前空間を作成 (利用可能な領域がある場合)
重要

ファイルシステムの DAX テクノロジーはテクノロジープレビューとしてのみ提供されるため、Red Hat では対応していません。

前提条件

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

5.7.1. ファイルシステムの直接アクセスモードの NVDIMM

NVDIMM デバイスがファイルシステムダイレクトアクセス (ファイルシステム DAX (fsdax)) モードで設定されている場合は、その上にファイルシステムを作成できます。

このファイルシステムのファイルで mmap() 操作を実行するアプリケーションは、ストレージに直接アクセスします。これにより、NVDIMM 上のプログラミングモデルに直接アクセスできます。直接マッピングを行うには、ファイルシステムは -o dax オプションでマウントする必要があります。

ページごとのメタデータ割り当て

このモードでは、システム DRAM または NVDIMM デバイス自体でページごとのメタデータを割り当てる必要があります。このデータ構造のオーバーヘッドは、4KiB ページにつき 64 バイトです。

  • 小さいデバイスでは、問題なく DRAM に収まるのに十分なオーバーヘッド量があります。たとえば、16 GiB の名前区間のページ構造に必要なのは 256 MiB だけです。NVDIMM デバイスは通常小さくて高価であるため、ページトラッキングデータ構造を DRAM に格納することが推奨されます。
  • テラバイト以上のサイズの NVDIMM デバイスの場合は、ページトラッキングデータ構造の格納に必要なメモリーの量がシステム内の DRAM の量を超える可能性があります。NVDIMM の 1 TiB に対して、ページ構造だけで 16 GiB が必要です。したがって、このような場合には、NVDIMM 自体にデータ構造を保存することが推奨されます。

名前空間の設定時に --map オプションを使用して、ページごとのメタデータを保存する場所を設定できます。

  • システム RAM に割り当てるには、--map=mem を使用します。
  • NVDIMM に割り当てるには、--map=dev を使用します。
fsdax 上のパーティションおよびファイルシステム

fsdax デバイスにパーティションを作成する場合、パーティションはページの境界に調整する必要があります。Intel 64 アーキテクチャーおよび AMD64 アーキテクチャーでは、パーティションの開始と終了に最低 4 KiB のアライメントが必要です。2 MiB が優先されるアライメントです。

Red Hat Enterprise Linux 8 では、テクノロジープレビューとして、XFS および ext4 ファイルシステムの両方を NVDIMM にできます。

5.7.2. ndctl のインストール

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

手順

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

    # yum install ndctl

5.7.3. ファイルシステム DAX モードへの既存の NVDIMM 名前空間の再設定

以下の手順では、NVDIMM デバイスの名前空間をファイルシステム DAX モードに再構成し、ファイルを名前空間に格納できるようにします。

警告

名前空間を再設定すると、名前空間に保存しておいたすべてのデータが削除されます。

前提条件

手順

  1. システムにある名前空間の一覧を表示します。

    # ndctl list --namespaces --idle
    
    [
      {
        "dev":"namespace1.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":1
      },
      {
        "dev":"namespace0.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":0
      }
    ]
  2. 名前空間を再設定します。

    # ndctl create-namespace \
            --force \
            --mode=fsdax \
            --reconfig=namespace-ID

    例5.5 ファイルシステム DAX としての名前空間の再設定

    DAX に対応するファイルシステムに namespace0.0 を使用するには、次のコマンドを使用します。

    # ndctl create-namespace \
            --force \
            --mode=fsdax \
            --reconfig=namespace0.0
    
    {
      "dev":"namespace0.0",
      "mode":"fsdax",
      "size":"32.00 GiB (34.36 GB)",
      "uuid":"ab91cc8f-4c3e-482e-a86f-78d177ac655d",
      "blockdev":"pmem0",
      "numa_node":0
    }
  3. これで、名前空間が、/dev/pmemN パスで利用可能になります。

関連情報

  • man ページの ndctl-create-namespace(1)

5.7.4. ファイルシステム DAX モードで新しい NVDIMM 名前空間の作成

以下の手順では、NVDIMM デバイスに新たなファイルシステム DAX 名前空間を作成し、ファイルを名前空間に格納できるようにします。

前提条件

  • ndctl ユーティリティーがインストールされている。「ndctl のインストール」 を参照してください。
  • NVDIMM デバイスがラベルに対応している。

手順

  1. 利用可能な領域があるシステムの pmem リージョンの一覧を表示します。以下の例では、region5 リージョンと region4 リージョンの領域が利用できます。

    # ndctl list --regions
    
    [
      {
        "dev":"region5",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-7337419320239190016
      },
      {
        "dev":"region4",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-137289417188962304
      }
    ]
  2. いずれのリージョンでも、複数の名前空間を割り当てます。

    # ndctl create-namespace \
            --mode=fsdax \
            --region=regionN \
            --size=namespace-size

    例5.6 リージョンへの名前空間の作成

    次のコマンドは、region4 で 36 GiB のファイルシステム DAX 名前空間を作成します。

    # ndctl create-namespace \
            --mode=fsdax \
            --region=region4 \
            --size=36G
    
    {
      "dev":"namespace4.0",
      "mode":"fsdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"9c5330b5-dc90-4f7a-bccd-5b558fa881fe",
      "blockdev":"pmem4",
      "numa_node":0
    }
  3. これで、名前空間が、/dev/pmemN パスで利用可能になります。

関連情報

  • man ページの ndctl-create-namespace(1)

5.7.5. ファイルシステム DAX デバイスでのファイルシステムの作成

この手順では、ファイルシステム DAX デバイスにファイルシステムを作成し、そのファイルシステムをマウントします。

手順

  1. 必要に応じて、ファイルシステム DAX デバイス上にパーティションを作成します。「パーティションの作成」 を参照してください。

    parted ツールは、デフォルトでは 1 MiB の境界にパーティションをそろえます。最初のパーティションには、パーティションの開始部分として 2 MiB を指定します。パーティションのサイズが 2 MiB の倍数である場合は、他のすべてのパーティションもそろえられます。

  2. パーティションまたは NVDIMM デバイスに XFS または ext4 ファイルシステムを作成します。

    XFS では、dax マウントオプションと互換性がないため、共有コピーオンライトのデータエクステントを無効にします。また、大規模ページマッピングの可能性を増やすには、ストライプユニットとストライプの幅を設定します。

    # mkfs.xfs -m reflink=0 -d su=2m,sw=1 fsdax-partition-or-device
  3. -o dax マウントオプションでファイルシステムをマウントします。

    # mount -o dax fsdax-partition-or-device mount-point
  4. アプリケーションは永続メモリーを使用し、ファイルを mount-point ディレクトリーに作成し、ファイルを開いて、mmap 操作を使用して直接アクセス用にファイルをマッピングできるようになりました。

関連情報

  • man ページの mkfs.xfs(8)

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

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

前提条件

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

5.8.1. ndctl のインストール

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

手順

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

    # yum install ndctl

5.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)

5.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 フィールドに名前を書き留めます。

    例5.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 属性を確認します。

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

    例5.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

    例5.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)

このページには機械翻訳が使用されている場合があります (詳細はこちら)。