第 5 章 NVDIMM 永続メモリーストレージの使用
5.7. NVDIMM でのファイルシステム DAX 名前空間の作成
5.8.1. ndctl のインストール
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 デバイスがシステムに接続され、設定されている。
重要 重要
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 になります。したがって、nmem0 の phys_id 属 性を確認します。
例
例5.8 NVDIMMs のの phys_id 属性属性 以下の例では、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. 次のコマンドを使用して、破損した 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.0 と namespace0.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)