「ソリッドステートドライブ/NVMe」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
タグ: visualeditor-switched
(同期)
 
(5人の利用者による、間の27版が非表示)
1行目: 1行目:
 
[[Category:ストレージ]]
 
[[Category:ストレージ]]
[[en:Solid State Drives/NVMe]]
+
[[en:Solid state drive/NVMe]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ソリッドステートドライブ}}
 
{{Related|ソリッドステートドライブ}}
 
{{Related articles end}}
 
{{Related articles end}}
   
NVM Express (NVMe) は PCI Express バスから SSD に接続するための規格です。論理デバイスインターフェイスとして NVM Express は新規に設計されてい。PCI Express SSD の低遅延と並性を活かすために最新の CPUプラットフォーム、アプリケーションの並列性を複製るように開発されました
+
[[Wikipedia:ja:NVM Express|NVM Express]] (NVMe) PCI Express バスで接続されている [[SSD]]アクセスするための規格です。論理デバイスインターフェイスとしてNVM Express は新規に設計されました。PCI Express SSD の低遅延と並性を活か現代の CPUプラットフォーム、アプリケーションの並列性を映し出しています。
   
 
== インストール ==
 
== インストール ==
   
  +
NVMe デバイスは {{ic|/dev/nvme*}} として現れるはずです。NVMe デバイスの命名に関する説明は [[デバイスファイル#NVMe]] を見てください。
Linux の NVMe ドライバーはカーネルバージョン 3.3 から含まれています。NVMe デバイスは {{ic|/dev/nvme*}} 下に認識されます。
 
   
NVMe のユーザスペースツールは {{aur|nvme-cli}} または {{aur|nvme-cli-git}} に含まれています。
+
その他のユーザスペース NVMe ツールは {{Pkg|nvme-cli}} {{aur|nvme-cli-git}} に含まれています。
   
サポートされているファイルシステム、パフォーマンスの最適化ディスクの読み書きの最小化などは[[ソリッドステートドライブ]]を見てください。
+
サポートされているファイルシステム、パフォーマンスの最適化ディスクの読み書きの最小化などは [[ソリッドステートドライブ]] を見てください。
   
== パフォーマンス ==
+
== 管理 ==
   
  +
{{Note|この章は [https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/] を元にしています。}}
=== セクタサイズ ===
 
   
  +
接続されているすべての NVMe SSD の名前、シリアル番号、サイズ、LBAフォーマット、シリアルを一覧表示します:
[[Advanced Format#HDD が 4k セクタを使用しているかどうか判断する方法]]を見てください。
 
   
  +
# nvme list
=== Discard ===
 
   
  +
ドライブとドライブがサポートする機能に関する情報を、人間にわかりやすい方法で一覧表示します:
{{note|SSD で discard を使うことが推奨されているのに反して、'''NVMe デバイスでは discard は実行するべきではありません'''。}}
 
   
  +
# nvme id-ctrl -H /dev/nvme0
[[ext4]] や [[LVM]] を使用する普通のセットアップではデフォルトで Discard は無効になりますが、ファイルシステムによっては明示的に無効化する必要があります。
 
   
  +
{{Tip|使用されている略語の意味を理解するには、関連する [https://nvmexpress.org/developers/nvme-specification/ NVMe 仕様書]のリファレンスセクション 5.15.2.2 ("Identify Controller data structure") を参照してください (例: 1.4a 仕様書の172ページの下部)。}}
SSD メーカーの Intel はファイルシステムレベルで discard を有効にすることを非推奨としており、代わりに [[ソリッドステートドライブ#fstrim で定期的に TRIM を適用する|fstrim で定期的に TRIM を適用する]]方法を提案しています [https://communities.intel.com/thread/75161?start=0&tstart=0]。
 
   
  +
名前空間とサポートされている機能に関する情報を一覧表示します:
=== エアフロー ===
 
   
  +
{{Note|名前空間 (namespace) とは NVMe 技術の構成要素で、ユーザデータを保持します。NVMe コントローラには複数の名前空間を付けることができます。今日のほとんどの NVMe SSD は単一の名前空間しか使用しませんが、マルチテナント型アプリケーション、仮想化、セキュリティの場面においては複数の名前空間が使用されることがあります。}}
NVMe SSD は負担時に高熱になることが知られており、特定の閾値に達すると性能が制限されます [http://www.legitreviews.com/samsung-ssd-950-pro-512gb-nvme-pcie-ssd-review_174096/3]。
 
   
  +
# nvme id-ns /dev/nvme0n1
=== テスト ===
 
   
  +
{{Tip|使用されている略語の意味を理解するには、関連する [https://nvmexpress.org/developers/nvme-specification/ NVMe 仕様書]のリファレンスセクション 5.15.2.1 ("Identify Namespace data structure") を参照してください (例: 1.4a 仕様書の163ページ)。}}
デバイスの性能テストは {{pkg|hdparm}} で実行できます:
 
   
  +
NVMeエラーログページを表示します:
# hdparm -Tt --direct /dev/nvme0n1
 
   
  +
# nvme error-log /dev/nvme0
== 省電力 APST ==
 
   
  +
{{Tip|エラーログにエラーが記録されているか調べるには、エラーカウント (error_count) が0でないエントリを探してください。}}
=== NVME 省電力パッチ ===
 
   
  +
名前空間を削除します:
Andy Lutomirski は Linux における NVMe デバイスの省電力機能を修正するパッチセットをリリースしています。メインラインカーネル v4.11 でパッチはマージされました。古いカーネルを使用している場合、以下のパッケージでパッチを利用できます:
 
   
  +
{{Warning|このコマンドは、指定された名前空間のすべてのデータを削除します。注意して使用してください。}}
{{App|Linux-nvme|Andy の NVME 省電力 APST パッチが含まれたメインラインの Linux カーネル。|https://github.com/damige/linux-nvme|{{AUR|linux-nvme}}{{Broken package link|パッケージが存在しません}}}}
 
   
  +
# nvme delete-ns /dev/nvme0n1
NVME の電源管理が動作しているかテストするには、{{AUR|nvme-cli}} をインストールして {{ic|# nvme get-feature -f 0x0c -H /dev/nvme[0-9]}} を実行してみてください。
 
   
  +
新しい名前空間を作成します。例えば、より小さなサイズの名前空間を作成して、SSDをオーバープロビジョニングし、耐久性、パフォーマンスおよび遅延を改善します:
{{hc|# nvme get-feature -f 0x0c -H /dev/nvme0|2=
 
  +
  +
# nvme create-ns /dev/nvme0
  +
  +
すべてのコマンドのリストと簡潔な説明については、{{ic|nvme help}} や {{man|1|nvme}} を参照してください。
  +
  +
=== SMART ===
  +
  +
健康状態、温度、耐久性などの NVMe SMART ログページを出力します:
  +
  +
# nvme smart-log /dev/nvme0
  +
  +
{{Tip|{{ic|-H}} オプションを使うと更に多くの情報を出力できます。例: {{ic|nvme smart-log -H /dev/nvme0}}。}}
  +
  +
NVMe サポートは {{Pkg|smartmontools}} [https://www.smartmontools.org/wiki/NVMe_Support#SmartmontoolsNVMesupport1 バージョン 6.5] で追加されました。
  +
  +
{{Note|[https://www.smartmontools.org/wiki/NVMe_Support#SmartmontoolsNVMesupport1 smartmontools の公式 wiki] では、このサポートは実験的であると報告されています。}}
  +
  +
現在実装されている機能は (wiki から拝借):
  +
  +
* コントローラ名、ファームウェア、容量に関する基本的な情報 ({{ic|smartctl -i}})
  +
* コントローラと名前空間の機能 ({{ic|smartctl -c}})
  +
* SMART の総合的健康状態の自己評価テストの結果と警告 ({{ic|smartctl -H}})
  +
* NVMe の SMART 属性 ({{ic|smartctl -A}})
  +
* NVMe のエラーログ ({{ic|smartctl -l error[,NUM]}})
  +
* nvme ログをフェッチする機能 ({{ic|smartctl -l nvmelog,N,SIZE}})
  +
* smartd デーモンによる健康状態 ({{ic|-H}})、エラーカウント ({{ic|-l error}})、温度 ({{ic|-W DIFF,INFO,CRIT}}) の追跡
  +
  +
詳細は [[S.M.A.R.T.]] と [https://www.smartmontools.org/wiki/NVMe_Support 公式 wiki エントリ] を参照してください。コマンドの出力に関する文脈情報は [https://www.percona.com/blog/2017/02/09/using-nvme-command-line-tools-to-check-nvme-flash-health/ この記事] を見てください。
  +
  +
=== Secure erase ===
  +
  +
[[ソリッドステートドライブ/メモリセルの消去#NVMe ドライブ]] を見てください。
  +
  +
=== ファームウェアアップデート ===
  +
  +
==== 一般 ====
  +
  +
ファームウェアは {{Pkg|nvme-cli}} を使って管理できます。利用可能なスロットを出力し、スロット1が読み取り専用になっているかどうかを確認するには:
  +
  +
{{hc|# nvme fw-log /dev/nvme0|
  +
Firmware Log for device:nvme0
  +
afi : 0x11
  +
frs1 : 0x32303132345a3553 (S5Z42102)
  +
frs2 : 0x32303132345a3553 (S5Z42102)
  +
}}
  +
  +
{{hc|# nvme id-ctrl /dev/nvme0 -H {{!}} grep Firmware|
  +
[9:9] : 0x1 Firmware Activation Notices Supported
  +
[4:4] : 0x1 Firmware Activate Without Reset Supported
  +
[3:1] : 0x2 Number of Firmware Slots
  +
[0:0] : 0 Firmware Slot 1 Read/Write
  +
}}
  +
  +
ファームウェアをダウンロードし、指定されたスロットにコミットしてください。下記の例では、ファームウェアはまずアクティブ化されずにコミットされます ({{ic|-a 0}})。次に、既存のイメージをアクティベーションします ({{ic|-a 2}})。ファームウェアコミットの ''action'' 値に関する詳細は、[https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4b-2020.09.21-Ratified.pdf NVMe 仕様書]を参照してください。
  +
  +
{{hc|# nvme fw-download -f S5Z42_fw_S5Z42105.bin /dev/nvme0|
  +
Firmware download success
  +
}}
  +
  +
{{hc|# nvme fw-commit -s 2 -a 0 /dev/nvme0|
  +
Success committing firmware action:0 slot:2
  +
}}
  +
  +
{{hc|# nvme fw-log /dev/nvme0|
  +
Firmware Log for device:nvme0
  +
afi : 0x21
  +
frs1 : 0x32303132345a3553 (S5Z42102)
  +
frs2 : 0x35303132345a3553 (S5Z42105)
  +
}}
  +
  +
{{hc|# nvme fw-commit -s 2 -a 2 /dev/nvme0|
  +
Success committing firmware action:2 slot:2
  +
}}
  +
  +
最後に、コントローラをリセットし、新しいファームウェアをロードしてください:
  +
  +
{{Note|上記の例のように {{ic|Firmware Activate Without Reset}} がサポートされていると表示されている場合、この手順は必要ないかもしれません。}}
  +
  +
# nvme reset /dev/nvme0
  +
  +
必要であれば、これは手動で行うこともできます:
  +
  +
# echo 1 > /sys/class/nvme/nvme0/reset_controller
  +
  +
==== Intel/Solidigm ====
  +
  +
Intel の SSD 事業が SK Hynix に買収[https://news.solidigm.com/en-WW/212943-sk-hynix-completes-the-first-phase-of-intel-nand-and-ssd-business-acquisition][https://www.anandtech.com/show/17134/intel-sells-ssd-business-to-sk-hynix-as-new-subsidiary-solidigm]された後、"Memory and Storage Tool" (Intel MAS) から SSD のサポートが無くなり、Optane デバイスしか管理できなくなりました。[https://www.intel.com/content/www/us/en/download/19520/intel-memory-and-storage-tool-cli-command-line-interface.html]
  +
  +
Intel の SSD 事業買収により生まれた米国の子会社 Solidigm は、以前の Intel SSD を管理するための新しいユーティリティを提供しています: ''「Solidigm Storage Tool (SST とも) は、Solidigm SSD の管理を支援します。このツールは、ドライブの情報と健康状態へのアクセス、SMART 属性、ファームウェアアップデート、診断スキャン、secure erase の機能を提供します。」''[https://www.solidigm.com/content/solidigm/us/en/support-page/drivers-downloads/ka-00085.html]
  +
  +
{{AUR|solidigm-sst-storage-tool-cli}} をインストールし、あなたのドライブでアップデートが利用可能か確認してください:
  +
  +
{{hc|# sst show -ssd|
  +
- ABCD012345NS512A -
  +
  +
Capacity : 512.11 GB (512,110,190,592 bytes)
  +
DevicePath : /dev/nvme0n1
  +
DeviceStatus : Healthy
  +
Firmware : 004C
  +
FirmwareUpdateAvailable : 005C
  +
Index : 0
  +
MaximumLBA : 1000215215
  +
ModelNumber : INTEL SSDPEKNW512G8
  +
ProductFamily : Intel SSD 660p Series
  +
SMARTEnabled : True
  +
SectorDataSize : 512
  +
SerialNumber : ABCD012345NS512A}}
  +
  +
アップデートが利用可能であるならば、前のコマンドで出力された Index の値を使用して、以下のように {{ic|load}} コマンドを実行してください:
  +
  +
{{hc|# sst load -ssd ''index''|
  +
WARNING! You have selected to update the drives firmware!
  +
Proceed with the update? (Y{{!}}N): Y
  +
Updating firmware...
  +
Firmware update successful
  +
}}
  +
  +
詳細は、このツールの上述の公式ページで提供されているユーザガイドを参照してください。
  +
  +
==== Kingston ====
  +
  +
Kingston はウェブサイトでの個別のファームウェアダウンロードを提供しておらず、その代わりに Windows のみのユーティリティを紹介しています。ファームウェアファイルは、ファームウェアのリビジョンに基づく予測可能な命名規則を使用しているようです:
  +
  +
<nowiki>https://media.kingston.com/support/downloads/</nowiki>'''S5Z42105.zip'''
  +
  +
次に、[[#一般|一般的なフラッシュの手順]]に進んでください。
  +
  +
==== Samsung ====
  +
  +
Windows ユーザのための "Samsung Magician Software" に次いで、Samsung はブータブル ISO イメージの SSD ファームウェアも提供しています:
  +
  +
https://semiconductor.samsung.com/consumer-storage/support/tools/
  +
  +
ISO イメージはブータブルな CD や USB ドライブに書き込むことができます。または、イメージを展開して live 環境で作業を行うこともできます:
  +
  +
$ curl -OL <nowiki>https://samsung.com</nowiki>/.../'''xxx'''.iso
  +
$ bsdtar -xf '''xxx'''.iso initrd
  +
$ bsdtar -xf initrd root
  +
# ./root/fumagician/fumagician
  +
  +
メーカーのプログラムを使わずに、[[#一般|前のセクション]]で説明されているように {{Pkg|nvme-cli}} を使って、ファームウェアを手動でアップロードしたい場合もあるかもしれません:
  +
  +
{{hc|$ ls -1 root/fumagician/*.enc|
  +
root/fumagician/1B2QJXD7.enc
  +
root/fumagician/DSRD.enc
  +
}}
  +
  +
1番目のファイルがファームウェアです。
  +
  +
==== Western Digital ====
  +
  +
Western Digital は、Windows ベースの "ダッシュボード" ソフトウェアからのアップデートしかサポートしていません。しかし、ファームウェアは、探す場所を知ってさえいれば、直接ダウンロードすることができます。[https://community.frame.work/t/western-digital-drive-update-guide-without-windows-wd-dashboard/20616]
  +
  +
まず、[https://wddashboarddownloads.wdc.com/wdDashboard/config/devices/lista_devices.xml 全ドライブのリスト]のページを開き、あなたのドライブ ({{ic|1=model=''モデル番号''}}) を見つけてください。
  +
  +
あなたのドライブのモデルの下に、1つ以上の {{ic|<url>}} エントリがあります。複数の URL がある場合、以下の指示通りにそれぞれを試し、現在のファームウェアバージョンとの {{ic|<dependency>}} をチェックする必要があります。
  +
  +
あなたのドライブ固有の XML ファイルをダウンロードしてください:
  +
  +
$ curl <nowiki>https://wddashboarddownloads.wdc.com/</nowiki>''URL_エントリ''
  +
  +
このドライブ固有の XML ファイルには、{{ic|''xxxx''.fluf}} というファイル名を含む {{ic|<fwfile>}} タグがあるはずです。これが入手すべきファイルの名前であり、先の URL の {{ic|device_properties.xml}} の部分をこのファイル名に置き換えればダウンロードできます。
  +
  +
SN820X ドライブの場合の完全な URL の例です:
  +
  +
$ curl --remote-name <nowiki>https://wddashboarddownloads.wdc.com/</nowiki>wdDashboard/firmware/WD_BLACK_SN850X_2000GB/620331WD/620331WD.fluf
  +
  +
''.fluf'' ファイルを手に入れたら、[[#一般|一般のフラッシュ手順]]でアップデートできます。ただし、これは Western Digital によって公式にサポートされている方法ではなく、正しく動作しないかもしれず、デバイスを破損させる可能性があるので注意してください。また、正しいドライブと正しいファームウェアバージョンを使ってアップデートするよう注意してください。
  +
  +
== パフォーマンス ==
  +
  +
=== セクタサイズ ===
  +
  +
[[Advanced Format#NVMe ソリッドステートドライブ]] を見てください。
  +
  +
=== エアフロー ===
  +
  +
NVMe SSD は負担時に高熱になることが知られており、特定の閾値に達すると性能が制限されます。[https://www.legitreviews.com/samsung-ssd-950-pro-512gb-nvme-pcie-ssd-review_174096/3]
  +
  +
=== テスト ===
  +
  +
Raw デバイスの性能テストは {{pkg|hdparm}} で実行できます:
  +
  +
# hdparm -Tt --direct /dev/nvme0n1
  +
  +
== 省電力 (APST) ==
  +
  +
NVMe の電源状態 (power state) を確認するには、{{Pkg|nvme-cli}} か {{AUR|nvme-cli-git}} をインストールし、{{ic|nvme get-feature /dev/nvme[0-9] -f 0x0c -H}} を実行してください:
  +
  +
{{hc|# nvme get-feature /dev/nvme0 -f 0x0c -H|
 
get-feature:0xc (Autonomous Power State Transition), Current value:0x000001
 
get-feature:0xc (Autonomous Power State Transition), Current value:0x000001
 
Autonomous Power State Transition Enable (APSTE): Enabled
 
Autonomous Power State Transition Enable (APSTE): Enabled
57行目: 247行目:
 
}}
 
}}
   
ASPT が有効になっている場合 {{ic|Autonomous Power State Transition Enable (APSTE): Enabled}}出力されす。表のエントリ各ステーに移行するとき待機時間を示しています。
+
APST が有効化されているときは、出力に "Autonomous Power State Transition Enable (APSTE): Enabled"いう文章が含れているずであり、その下のテーブルには、利用可能な各状態に移行するアイドル時間を示す非ゼロなエントリが存在するはずです。
   
ASPT 有効になっているのにステートが表表示されない場合、高遅延のせいでデフォルトで有効になっていない可能性があり。{{ic|# nvme id-ctrl /dev/nvme[0-9]}} を使うこ NVME コントローラの未使のステートを確認きます。ステート遅延の合計 (enlat + xlat) が 25000 (25ms) より大きい場合、有効にするにはブートパラメータを使って {{ic|nvme_core}} [[カーネルモジュール]]の {{ic|default_ps_max_latency_us}} オプショで最低でもこれよりも高い値を渡す必要があります。ASPT が有効になり {{ic|# nvme get-feature}} の表にエントリが表示されるようになります。
+
APST 有効化されているが、テーブル内非ゼロな状態が存在しない場合、レイテンシがすぎて状態がデフォルトで有効化されていないのかもしれせん。{{ic|nvme id-ctrl /dev/nvme[0-9]}} (root して実行) の出力には、NVMe コントローラの可能な非動作電源状態が出力されるはずです。どれか状態の合計のレイテンシ (enlat + xlat) が 25000 (25ms) より大きい場合、{{ic|nvme_core}} [[カーネルモジュール]]の {{ic|default_ps_max_latency_us}} パラメータにそのレイテシ値以上の値を渡す必要があります。これにより、APST が有効になり{{ic|nvme get-feature}} (root として実行) の表にエントリが表示されるようになるはずです。
   
  +
== トラブルシューティング ==
==== Linux 4.10 における Samsung ドライブのエラー ====
 
   
  +
=== APST サポートの問題によるコントローラの機能不全 ===
Linux 4.10 では、ドライブのエラーが発生してシステムが不安定になることがあります。
 
  +
省電力状態となった結果ドライブが使えなくるようです。
 
  +
一部の NVMe デバイスでは省電力 (APST) に関連する問題が発生する場合があります。これはファームウェア ''S5Z42105'' の時点で Kingston A2000 [https://bbs.archlinux.org/viewtopic.php?pid=1926994#p1926994] の既知の問題であり、以前に Samsung NVMe ドライブ (Linux v4.10) で報告されていました [https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1678184][https://askubuntu.com/questions/905710/ext4-fs-error-after-ubuntu-17-04-upgrade/906105#906105]。
[[カーネルパラメータ]] {{ic|1=nvme_core.default_ps_max_latency_us=5500}}
 
  +
[https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1678184][https://askubuntu.com/questions/905710/ext4-fs-error-after-ubuntu-17-04-upgrade/906105#906105] は一番低い省電力ステートを無効にし、書き込みエラーを防止します。
 
  +
機能不全が発生すると、システムをリセットするまでデバイスが利用できなくなり、以下に似たカーネルログが出力されます:
  +
  +
nvme nvme0: I/O 566 QID 7 timeout, aborting
  +
nvme nvme0: I/O 989 QID 1 timeout, aborting
  +
nvme nvme0: I/O 990 QID 1 timeout, aborting
  +
nvme nvme0: I/O 840 QID 6 timeout, reset controller
  +
nvme nvme0: I/O 24 QID 0 timeout, reset controller
  +
nvme nvme0: Device not ready; aborting reset, CSTS=0x1
  +
...
  +
nvme nvme0: Device not ready; aborting reset, CSTS=0x1
  +
nvme nvme0: Device not ready; aborting reset, CSTS=0x1
  +
nvme nvme0: failed to set APST feature (-19)
  +
  +
回避策として、{{ic|1=nvme_core.default_ps_max_latency_us=0}} [[カーネルパラメータ]]を追加することで APST を完全に無効化するか、あるいはカスタムの閾値を設定して特定の状態を無効化することができます。
  +
  +
{{Out of date|1=このカーネルパラメータは Linux カーネルの最近のリビジョンではもはや必要ないかもしれません。(例: v4.14.221、v4.19.175、v5.4.97、v5.10.15、v5.11-rc7、そしてこれら以降)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=538e4a8c571efdf131834431e0c14808bcfb1004]}}
  +
  +
2021年3月から、Kingston からのファームウェアアップデート [https://www.kingston.com/unitedkingdom/en/support/technical/ksm-firmware-update 9] が利用可能です。Kingston は Windows のみをサポートしているため、Linux 用のダウンロードは [https://www.heise.de/downloads/18/3/0/9/6/7/4/4/A2000_-_S5Z42109.zip heise.de] や [https://github.com/vulgo/kingston-a2000-firmware-bin-linux github] で入手できます。カーネルの回避策が行われている限り、最も深い省電力状態には到達しないため、ファームウェアのアップデートはあまり効果がないことが予想されます。
  +
  +
{{hc|# smartctl -c /dev/nvme0|
  +
Supported Power States
  +
St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat
  +
0 + 9.00W - - 0 0 0 0 0 0
  +
1 + 4.60W - - 1 1 1 1 0 0
  +
2 + 3.80W - - 2 2 2 2 0 0
  +
3 - 0.0450W - - 3 3 3 3 2000 2000
  +
4 - 0.0040W - - 4 4 4 4 15000 15000
  +
}}
  +
  +
渡される値は exit レイテンシ (''Ex_Lat'') の最大値です。例えば、PS4 を無効化するには {{ic|1=nvme_core.default_ps_max_latency_us=2000}} を設定してください。
  +
  +
=== サスペンドサポートの問題によるコントローラの機能不全 ===
  +
  +
一部のユーザ (例えば、[[ノートパソコン/HP]] を見てください) は、特定の NVMe ドライブでサスペンドに失敗すると報告しています。上記の通り、機能不全により、システムをリセットするまでデバイスが操作不能になり、カーネルメッセージが出力されます:
  +
  +
nvme nvme0: Device not ready; aborting reset, CSTS=0x3
  +
nvme nvme0: Removing after probe failure status: -19
  +
  +
回避策として、{{ic|1=iommu=soft}} [[カーネルパラメータ]]を追加し、ハードウェア IOMMU の代わりにソフトウェアのものを使用することができます。(詳細は[https://docs.kernel.org/arch/x86/x86_64/boot-options.html このドキュメント]を見てください。) これにより、処理の僅かなオーバーヘッドが発生する可能性があります。
  +
  +
{{Accuracy|以下の解決策は、なぜうまく行くのかを説明しておらず、ソースも提供していません。}}
  +
  +
また、以下のようなメッセージの I/O エラーが発生した場合、AMD CPU と KIOXIA KBG40ZN* nvme を搭載している HP ノート PC で {{ic|1=amd_iommu=off}} かより良い {{ic|1=amd_iommu=fullflush}} を試すこともできます:
  +
Failed to rotate /var/log/journal/*/system.journal: Read-only file system
  +
nvme nvme0: Device not ready; aborting reset, CSTS=0x3
  +
BTRFS error (device nvme0n1): bdev /dev/nvme0n1p* errs: wr 2, rd 0, flush 0, corrupt 0, gen 0
   
 
== 参照 ==
 
== 参照 ==
  +
* [https://www.intel.com/content/dam/support/us/en/documents/ssdc/data-center-ssds/Intel_Linux_NVMe_Guide_330602-002.pdf Intel Linux NVMe ドライバーリファレンス]
 
  +
* [https://nvmexpress.org/open-source-nvme-ssd-management-utility-nvme-command-line-interface-nvme-cli/ Open Source NVMe™ Management Utility – NVMe Command Line Interface (NVMe-CLI)]
  +
* [https://metebalci.com/blog/a-quick-tour-of-nvm-express-nvme/ A Quick Tour of NVM Express (NVMe)]
  +
* [https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4b-2020.09.21-Ratified.pdf NVM Express Base Specification, Revision 1.4b]
  +
  +
{{TranslationStatus|Solid state drive/NVMe|2023-11-18|792689}}

2023年11月18日 (土) 22:25時点における最新版

関連記事

NVM Express (NVMe) とは、PCI Express バスで接続されている SSD にアクセスするための規格です。論理デバイスインターフェイスとして、NVM Express は新規に設計されました。PCI Express SSD の低遅延性と並列性を活かし、現代の CPU、プラットフォーム、アプリケーションの並列性を映し出しています。

インストール

NVMe デバイスは /dev/nvme* として現れるはずです。NVMe デバイスの命名に関する説明は デバイスファイル#NVMe を見てください。

その他のユーザスペース NVMe ツールは nvme-clinvme-cli-gitAUR に含まれています。

サポートされているファイルシステム、パフォーマンスの最適化、ディスクの読み書きの最小化などは ソリッドステートドライブ を見てください。

管理

ノート: この章は [1] を元にしています。

接続されているすべての NVMe SSD の名前、シリアル番号、サイズ、LBAフォーマット、シリアルを一覧表示します:

# nvme list

ドライブとドライブがサポートする機能に関する情報を、人間にわかりやすい方法で一覧表示します:

# nvme id-ctrl -H /dev/nvme0
ヒント: 使用されている略語の意味を理解するには、関連する NVMe 仕様書のリファレンスセクション 5.15.2.2 ("Identify Controller data structure") を参照してください (例: 1.4a 仕様書の172ページの下部)。

名前空間とサポートされている機能に関する情報を一覧表示します:

ノート: 名前空間 (namespace) とは NVMe 技術の構成要素で、ユーザデータを保持します。NVMe コントローラには複数の名前空間を付けることができます。今日のほとんどの NVMe SSD は単一の名前空間しか使用しませんが、マルチテナント型アプリケーション、仮想化、セキュリティの場面においては複数の名前空間が使用されることがあります。
# nvme id-ns /dev/nvme0n1
ヒント: 使用されている略語の意味を理解するには、関連する NVMe 仕様書のリファレンスセクション 5.15.2.1 ("Identify Namespace data structure") を参照してください (例: 1.4a 仕様書の163ページ)。

NVMeエラーログページを表示します:

# nvme error-log /dev/nvme0
ヒント: エラーログにエラーが記録されているか調べるには、エラーカウント (error_count) が0でないエントリを探してください。

名前空間を削除します:

警告: このコマンドは、指定された名前空間のすべてのデータを削除します。注意して使用してください。
# nvme delete-ns /dev/nvme0n1

新しい名前空間を作成します。例えば、より小さなサイズの名前空間を作成して、SSDをオーバープロビジョニングし、耐久性、パフォーマンスおよび遅延を改善します:

# nvme create-ns /dev/nvme0

すべてのコマンドのリストと簡潔な説明については、nvme helpnvme(1) を参照してください。

SMART

健康状態、温度、耐久性などの NVMe SMART ログページを出力します:

# nvme smart-log /dev/nvme0
ヒント: -H オプションを使うと更に多くの情報を出力できます。例: nvme smart-log -H /dev/nvme0

NVMe サポートは smartmontools バージョン 6.5 で追加されました。

ノート: smartmontools の公式 wiki では、このサポートは実験的であると報告されています。

現在実装されている機能は (wiki から拝借):

  • コントローラ名、ファームウェア、容量に関する基本的な情報 (smartctl -i)
  • コントローラと名前空間の機能 (smartctl -c)
  • SMART の総合的健康状態の自己評価テストの結果と警告 (smartctl -H)
  • NVMe の SMART 属性 (smartctl -A)
  • NVMe のエラーログ (smartctl -l error[,NUM])
  • nvme ログをフェッチする機能 (smartctl -l nvmelog,N,SIZE)
  • smartd デーモンによる健康状態 (-H)、エラーカウント (-l error)、温度 (-W DIFF,INFO,CRIT) の追跡

詳細は S.M.A.R.T.公式 wiki エントリ を参照してください。コマンドの出力に関する文脈情報は この記事 を見てください。

Secure erase

ソリッドステートドライブ/メモリセルの消去#NVMe ドライブ を見てください。

ファームウェアアップデート

一般

ファームウェアは nvme-cli を使って管理できます。利用可能なスロットを出力し、スロット1が読み取り専用になっているかどうかを確認するには:

# nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x11
frs1 : 0x32303132345a3553 (S5Z42102)
frs2 : 0x32303132345a3553 (S5Z42102)
# nvme id-ctrl /dev/nvme0 -H | grep Firmware
  [9:9] : 0x1	Firmware Activation Notices Supported
  [4:4] : 0x1	Firmware Activate Without Reset Supported
  [3:1] : 0x2	Number of Firmware Slots
  [0:0] : 0	Firmware Slot 1 Read/Write

ファームウェアをダウンロードし、指定されたスロットにコミットしてください。下記の例では、ファームウェアはまずアクティブ化されずにコミットされます (-a 0)。次に、既存のイメージをアクティベーションします (-a 2)。ファームウェアコミットの action 値に関する詳細は、NVMe 仕様書を参照してください。

# nvme fw-download -f S5Z42_fw_S5Z42105.bin /dev/nvme0
Firmware download success
# nvme fw-commit -s 2 -a 0 /dev/nvme0
Success committing firmware action:0 slot:2
# nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x21
frs1 : 0x32303132345a3553 (S5Z42102)
frs2 : 0x35303132345a3553 (S5Z42105)
# nvme fw-commit -s 2 -a 2 /dev/nvme0
Success committing firmware action:2 slot:2

最後に、コントローラをリセットし、新しいファームウェアをロードしてください:

ノート: 上記の例のように Firmware Activate Without Reset がサポートされていると表示されている場合、この手順は必要ないかもしれません。
# nvme reset /dev/nvme0

必要であれば、これは手動で行うこともできます:

# echo 1 > /sys/class/nvme/nvme0/reset_controller

Intel/Solidigm

Intel の SSD 事業が SK Hynix に買収[2][3]された後、"Memory and Storage Tool" (Intel MAS) から SSD のサポートが無くなり、Optane デバイスしか管理できなくなりました。[4]

Intel の SSD 事業買収により生まれた米国の子会社 Solidigm は、以前の Intel SSD を管理するための新しいユーティリティを提供しています: 「Solidigm Storage Tool (SST とも) は、Solidigm SSD の管理を支援します。このツールは、ドライブの情報と健康状態へのアクセス、SMART 属性、ファームウェアアップデート、診断スキャン、secure erase の機能を提供します。」[5]

solidigm-sst-storage-tool-cliAUR をインストールし、あなたのドライブでアップデートが利用可能か確認してください:

# sst show -ssd
- ABCD012345NS512A -

Capacity : 512.11 GB (512,110,190,592 bytes)
DevicePath : /dev/nvme0n1
DeviceStatus : Healthy
Firmware : 004C
FirmwareUpdateAvailable : 005C
Index : 0
MaximumLBA : 1000215215
ModelNumber : INTEL SSDPEKNW512G8
ProductFamily : Intel SSD 660p Series
SMARTEnabled : True
SectorDataSize : 512
SerialNumber : ABCD012345NS512A

アップデートが利用可能であるならば、前のコマンドで出力された Index の値を使用して、以下のように load コマンドを実行してください:

# sst load -ssd index
WARNING! You have selected to update the drives firmware! 
Proceed with the update? (Y|N): Y
Updating firmware...
Firmware update successful

詳細は、このツールの上述の公式ページで提供されているユーザガイドを参照してください。

Kingston

Kingston はウェブサイトでの個別のファームウェアダウンロードを提供しておらず、その代わりに Windows のみのユーティリティを紹介しています。ファームウェアファイルは、ファームウェアのリビジョンに基づく予測可能な命名規則を使用しているようです:

https://media.kingston.com/support/downloads/S5Z42105.zip

次に、一般的なフラッシュの手順に進んでください。

Samsung

Windows ユーザのための "Samsung Magician Software" に次いで、Samsung はブータブル ISO イメージの SSD ファームウェアも提供しています:

https://semiconductor.samsung.com/consumer-storage/support/tools/

ISO イメージはブータブルな CD や USB ドライブに書き込むことができます。または、イメージを展開して live 環境で作業を行うこともできます:

$ curl -OL https://samsung.com/.../xxx.iso
$ bsdtar -xf xxx.iso initrd
$ bsdtar -xf initrd root
# ./root/fumagician/fumagician

メーカーのプログラムを使わずに、前のセクションで説明されているように nvme-cli を使って、ファームウェアを手動でアップロードしたい場合もあるかもしれません:

$ ls -1 root/fumagician/*.enc
root/fumagician/1B2QJXD7.enc
root/fumagician/DSRD.enc

1番目のファイルがファームウェアです。

Western Digital

Western Digital は、Windows ベースの "ダッシュボード" ソフトウェアからのアップデートしかサポートしていません。しかし、ファームウェアは、探す場所を知ってさえいれば、直接ダウンロードすることができます。[6]

まず、全ドライブのリストのページを開き、あなたのドライブ (model=モデル番号) を見つけてください。

あなたのドライブのモデルの下に、1つ以上の <url> エントリがあります。複数の URL がある場合、以下の指示通りにそれぞれを試し、現在のファームウェアバージョンとの <dependency> をチェックする必要があります。

あなたのドライブ固有の XML ファイルをダウンロードしてください:

$ curl https://wddashboarddownloads.wdc.com/URL_エントリ

このドライブ固有の XML ファイルには、xxxx.fluf というファイル名を含む <fwfile> タグがあるはずです。これが入手すべきファイルの名前であり、先の URL の device_properties.xml の部分をこのファイル名に置き換えればダウンロードできます。

SN820X ドライブの場合の完全な URL の例です:

$ curl --remote-name https://wddashboarddownloads.wdc.com/wdDashboard/firmware/WD_BLACK_SN850X_2000GB/620331WD/620331WD.fluf

.fluf ファイルを手に入れたら、一般のフラッシュ手順でアップデートできます。ただし、これは Western Digital によって公式にサポートされている方法ではなく、正しく動作しないかもしれず、デバイスを破損させる可能性があるので注意してください。また、正しいドライブと正しいファームウェアバージョンを使ってアップデートするよう注意してください。

パフォーマンス

セクタサイズ

Advanced Format#NVMe ソリッドステートドライブ を見てください。

エアフロー

NVMe SSD は負担時に高熱になることが知られており、特定の閾値に達すると性能が制限されます。[7]

テスト

Raw デバイスの性能テストは hdparm で実行できます:

# hdparm -Tt --direct /dev/nvme0n1

省電力 (APST)

NVMe の電源状態 (power state) を確認するには、nvme-clinvme-cli-gitAUR をインストールし、nvme get-feature /dev/nvme[0-9] -f 0x0c -H を実行してください:

# nvme get-feature /dev/nvme0 -f 0x0c -H
get-feature:0xc (Autonomous Power State Transition), Current value:0x000001
        Autonomous Power State Transition Enable (APSTE): Enabled
        Auto PST Entries        .................

...

APST が有効化されているときは、出力に "Autonomous Power State Transition Enable (APSTE): Enabled" という文章が含まれているはずであり、その下のテーブルには、利用可能な各状態に移行する前のアイドル時間を示す非ゼロなエントリが存在するはずです。

APST は有効化されているが、テーブル内に非ゼロな状態が存在しない場合、レイテンシが高すぎて状態がデフォルトで有効化されていないのかもしれません。nvme id-ctrl /dev/nvme[0-9] (root として実行) の出力には、NVMe コントローラの利用可能な非動作電源状態が出力されるはずです。どれかの状態の合計のレイテンシ (enlat + xlat) が 25000 (25ms) より大きい場合、nvme_core カーネルモジュールdefault_ps_max_latency_us パラメータにそのレイテンシ値以上の値を渡す必要があります。これにより、APST が有効になり、nvme get-feature (root として実行) の表にエントリが表示されるようになるはずです。

トラブルシューティング

APST サポートの問題によるコントローラの機能不全

一部の NVMe デバイスでは省電力 (APST) に関連する問題が発生する場合があります。これはファームウェア S5Z42105 の時点で Kingston A2000 [8] の既知の問題であり、以前に Samsung NVMe ドライブ (Linux v4.10) で報告されていました [9][10]

機能不全が発生すると、システムをリセットするまでデバイスが利用できなくなり、以下に似たカーネルログが出力されます:

 nvme nvme0: I/O 566 QID 7 timeout, aborting
 nvme nvme0: I/O 989 QID 1 timeout, aborting
 nvme nvme0: I/O 990 QID 1 timeout, aborting
 nvme nvme0: I/O 840 QID 6 timeout, reset controller
 nvme nvme0: I/O 24 QID 0 timeout, reset controller
 nvme nvme0: Device not ready; aborting reset, CSTS=0x1
 ...
 nvme nvme0: Device not ready; aborting reset, CSTS=0x1
 nvme nvme0: Device not ready; aborting reset, CSTS=0x1
 nvme nvme0: failed to set APST feature (-19)

回避策として、nvme_core.default_ps_max_latency_us=0 カーネルパラメータを追加することで APST を完全に無効化するか、あるいはカスタムの閾値を設定して特定の状態を無効化することができます。

この記事またはセクションは情報が古くなっています。
理由: このカーネルパラメータは Linux カーネルの最近のリビジョンではもはや必要ないかもしれません。(例: v4.14.221、v4.19.175、v5.4.97、v5.10.15、v5.11-rc7、そしてこれら以降)。[11] (Discuss)

2021年3月から、Kingston からのファームウェアアップデート 9 が利用可能です。Kingston は Windows のみをサポートしているため、Linux 用のダウンロードは heise.degithub で入手できます。カーネルの回避策が行われている限り、最も深い省電力状態には到達しないため、ファームウェアのアップデートはあまり効果がないことが予想されます。

# smartctl -c /dev/nvme0
Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     9.00W       -        -    0  0  0  0        0       0
 1 +     4.60W       -        -    1  1  1  1        0       0
 2 +     3.80W       -        -    2  2  2  2        0       0
 3 -   0.0450W       -        -    3  3  3  3     2000    2000
 4 -   0.0040W       -        -    4  4  4  4    15000   15000

渡される値は exit レイテンシ (Ex_Lat) の最大値です。例えば、PS4 を無効化するには nvme_core.default_ps_max_latency_us=2000 を設定してください。

サスペンドサポートの問題によるコントローラの機能不全

一部のユーザ (例えば、ノートパソコン/HP を見てください) は、特定の NVMe ドライブでサスペンドに失敗すると報告しています。上記の通り、機能不全により、システムをリセットするまでデバイスが操作不能になり、カーネルメッセージが出力されます:

nvme nvme0: Device not ready; aborting reset, CSTS=0x3
nvme nvme0: Removing after probe failure status: -19

回避策として、iommu=soft カーネルパラメータを追加し、ハードウェア IOMMU の代わりにソフトウェアのものを使用することができます。(詳細はこのドキュメントを見てください。) これにより、処理の僅かなオーバーヘッドが発生する可能性があります。

この記事またはセクションの正確性には問題があります。
理由: 以下の解決策は、なぜうまく行くのかを説明しておらず、ソースも提供していません。 (議論: トーク:ソリッドステートドライブ/NVMe#)

また、以下のようなメッセージの I/O エラーが発生した場合、AMD CPU と KIOXIA KBG40ZN* nvme を搭載している HP ノート PC で amd_iommu=off かより良い amd_iommu=fullflush を試すこともできます:

Failed to rotate /var/log/journal/*/system.journal: Read-only file system
nvme nvme0: Device not ready; aborting reset, CSTS=0x3
BTRFS error (device nvme0n1): bdev /dev/nvme0n1p* errs: wr 2, rd 0, flush 0, corrupt 0, gen 0

参照

翻訳ステータス: このページは en:Solid state drive/NVMe の翻訳バージョンです。最後の翻訳日は 2023-11-18 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。