このドキュメントでは、NonVolatile Memory express(NVMe)インターフェースを備えたディスクの使用時に発生する可能性のあるエラーの一覧を示します。
ローカル SSD と永続ディスク(Persistent Disk または Google Cloud Hyperdisk)には NVMe インターフェースを使用できます。Tau T2A、M3、C3、C3D、H3 など、最新のマシンシリーズのみが Persistent Disk に NVMe インターフェースを使用します。Confidential VMs も Persistent Disk に NVMe を使用します。他のすべての Compute Engine マシンシリーズは、永続ディスクの SCSI ディスク インターフェースを使用します。
I/O オペレーション タイムアウト エラー
I/O タイムアウト エラーが発生する場合、レイテンシが NVMe デバイスに送信される I/O オペレーションのデフォルトのタイムアウト パラメータを超過している可能性があります。
エラー メッセージ:
[1369407.045521] nvme nvme0: I/O 252 QID 2 timeout, aborting [1369407.050941] nvme nvme0: I/O 253 QID 2 timeout, aborting [1369407.056354] nvme nvme0: I/O 254 QID 2 timeout, aborting [1369407.061766] nvme nvme0: I/O 255 QID 2 timeout, aborting [1369407.067168] nvme nvme0: I/O 256 QID 2 timeout, aborting [1369407.072583] nvme nvme0: I/O 257 QID 2 timeout, aborting [1369407.077987] nvme nvme0: I/O 258 QID 2 timeout, aborting [1369407.083395] nvme nvme0: I/O 259 QID 2 timeout, aborting [1369407.088802] nvme nvme0: I/O 260 QID 2 timeout, aborting ...
解決策:
この問題を解決するには、タイムアウト パラメータの値を引き上げます。
タイムアウト パラメータの現在の値を表示します。
- 永続ディスクまたはローカル SSD ボリュームで使用されている NVMe コントローラを確定します。
ls -l /dev/disk/by-id
ディスクの秒単位で指定された
io_timeout
設定を表示します。 次のように置き換えます。cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
CONTROLLER_ID
: NVMe ディスク コントローラの ID(例えば、nvme1
)NAMESPACE
: NVMe ディスクの名前空間(例えば、nvme1n1
)
NVMe を使用する単一ディスクが 1 つだけの場合は、次のコマンドを使用します。
cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
- 永続ディスクまたはローカル SSD ボリュームで使用されている NVMe コントローラを確定します。
NVMe デバイスに送信される I/O オペレーションのタイムアウト パラメータの値を引き上げるには、次の行を
/lib/udev/rules.d/65-gce-disk-naming.rules
ファイルに追加してから、VM を再起動します。KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
切断されたディスクが Compute インスタンスのオペレーティング システムに引き続き表示される
Linux カーネル バージョン 6.0~6.2 を使用する VM では、Compute Engine API メソッド instances.detachDisk
または gcloud compute instances detach-disk
コマンドを含むオペレーションが想定どおりに機能しない場合があります。Google Cloud コンソールではデバイスが削除されたものとして表示され、Compute インスタンスのメタデータ(compute disks describe
コマンド)にも、デバイスが削除されたものとして表示されます。しかし、ゲスト オペレーティング システムには、デバイスのマウント ポイント、および udev ルールによって作成されたシンボリック リンクが引き続き表示されます。
エラー メッセージ:
VM 上の切断されたディスクから読み取ろうとすると、I/O エラーが発生します。
sudo head /dev/nvme0n3 head: error reading '/dev/nvme0n3': Input/output error
問題:
Linux 6.0~6.2 カーネルを使用するが、NVMe 修正プログラムのバックポートを含まないオペレーティング システム イメージは、NVMe ディスクの切断を認識しません。
解決策:
VM を再起動して、ディスクの削除プロセスを完了します。
この問題を回避するには、この問題が発生しない Linux カーネル バージョンのオペレーティング システムを使用します。
- 5.19 以前
- 6.3 以降
ゲスト OS で uname -r
コマンドを使用すると、Linux カーネル バージョンを確認できます。
ローカル SSD がアタッチされた C3 VM と C3D VM でシンボリック リンクが作成されない
ローカル SSD ディスクを C3 VM または C3D VM にアタッチする場合、ローカル SSD ディスク用のシンボリック リンクを作成するために、追加の手順が必要になることがあります。以下の手順は、Google Cloud が提供する次の公開イメージのいずれかを使用する場合にのみ必要です。
- SLES 15 SP4 および SP5
- SLES 12 SP4
これらの追加の手順は、ローカル SSD ディスクにのみ適用されます。Persistent Disk のボリュームに関して何もする必要はありません。
前述の公開 Linux イメージには、C3 VM と C3D VM にアタッチされたローカル SSD デバイスのシンボリック リンクを作成するための正しい udev
構成がありません。カスタム イメージに、C3 VM と C3D VM にアタッチされたローカル SSD デバイスのシンボリック リンクを作成するために必要な udev
ルールが含まれていない場合もあります。
次の手順に沿って、SUSE またはカスタム イメージ用の udev
ルールを追加します。
- udev ルール ディレクトリを見つけます。通常、これは
/lib/udev/rules.d
または/usr/lib/udev/rules.d
です。イメージのudev
ルール ディレクトリが異なる場合があります。 - udev rules ディレクトリで
65-gce-disk-naming.rules
ファイルを見つけます。 65-gce-disk-naming.rules
ファイルに次の行が含まれている場合、イメージは新しいルールをサポートし、ここで停止できます。KERNEL=="nvme*n*", ATTRS{model}=="nvme_card[0-9]*",IMPORT{program}="google_nvme_id -d $tempnode"
前の行が存在しない場合、またはファイル
65-gce-disk-naming.rules
が存在しない場合は、既存のファイルを置き換えるか、または新しいファイルを次の URL にあるファイルの内容で作成します。https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules。このファイルには、65-gce-disk-naming.rules
ファイルの更新内容(前の手順で説明した行や、Compute Engine ディスクの命名に必要なその他のルールなど)が含まれています。次に例を示します。sudo curl -o 65-gce-disk-naming.rules https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules
udev
ディレクトリに移動します。udev
ディレクトリでgoogle_nvme_id
ファイルを見つけます。既存の
google_nvme_id
ファイルの内容を次の URL にある内容で置き換えるか、または新しいファイルを次の URL にある内容で作成します。sudo curl -o google_nvme_id https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/google_nvme_id
google_nvme_id
ファイルが実行可能であることを確認します。sudo chmod 755 google_nvme_id
VM を再起動します。
シンボリック リンクが正常に作成されていることを確認します。
ls -l /dev/disk/by-id/google-local-nvme-ssd*
出力には、インスタンスに接続されたローカル SSD と同じ数のリンクが表示され、各リンクは異なる
/dev/nvme
デバイスパスを参照している必要があります。次に例を示します。lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-0 -> ../../nvme0n1 lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-1 -> ../../nvme1n1
デバイス名について詳しくは、デバイスの命名をご覧ください。
lsblk
を実行すると、/dev/nvme
デバイスパスがローカル SSD デバイスであることを確認できます。サイズが375G
の NVMe デバイスは、ローカル SSD デバイスです。
次のステップ
- Persistent Disk について学習する。
- ローカル SSD について学習する。
- パフォーマンス要件を満たすようにディスクを構成する。
- シンボリック リンクについて学習する。