In diesem Dokument werden Fehler aufgeführt, die bei der Verwendung von Laufwerken mit der NVMe-Schnittstelle (Persistent Express) auftreten können.
Sie können die NVMe-Schnittstelle für lokale SSDs und nichtflüchtige Speicher (Persistent Disk oder Google Cloud Hyperdisk) verwenden. Nur die neuesten Maschinenserien wie Tau T2A, M3, C3, C3D und H3 verwenden die NVMe für nichtflüchtige Speicher. Confidential VMs verwenden auch NVMe for Persistent Disk. Alle anderen Compute Engine-Maschinen verwenden die SCSI-Laufwerksschnittstelle für nichtflüchtige Speicher.
E/A-Vorgangszeitüberschreitungsfehler
Wenn E/A-Zeitüberschreitungsfehler auftreten, kann die Latenz den Standardzeitüberschreitungsparameter für E/A-Vorgänge überschreiten, die an NVMe-Geräte gesendet werden.
Fehlermeldung:
[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 ...
Lösung:
Erhöhen Sie den Wert des Zeitüberschreitungsparameters, um dieses Problem zu beheben.
Rufen Sie den aktuellen Wert des Zeitüberschreitungsparameters auf.
- Bestimmen Sie, welcher NVMe-Controller vom nichtflüchtigen Speicher oder der lokalen SSD verwendet wird.
ls -l /dev/disk/by-id
Rufen Sie die in Sekunden angegebene Einstellung
io_timeout
für das Laufwerk auf. Ersetzen Sie Folgendes:cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
CONTROLLER_ID
: die ID des NVMe-Disk-Controllers, z. B.nvme1
NAMESPACE
: der Namespace des NVMe-Laufwerks, z. B.nvme1n1
Wenn Sie nur ein Laufwerk mit NVMe verwenden, verwenden Sie den Befehl:
cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
- Bestimmen Sie, welcher NVMe-Controller vom nichtflüchtigen Speicher oder der lokalen SSD verwendet wird.
Um den Zeitüberschreitungsparameter für E/A-Vorgänge zu erhöhen, die an NVMe-Geräte gesendet wurden, fügen Sie der Datei
/lib/udev/rules.d/65-gce-disk-naming.rules
die folgende Zeile hinzu und starten Sie dann die VM neu:KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
Getrennte Laufwerke werden weiterhin im Betriebssystem einer Compute-Instanz angezeigt
Auf VMs mit der Linux-Kernelversion 6.0 bis 6.2 funktionieren Vorgänge, die die Compute Engine API-Methode instances.detachDisk
oder den Befehl gcloud compute instances detach-disk
umfassen, möglicherweise nicht wie erwartet.
In der Google Cloud -Konsole wird das Gerät als entfernt angezeigt. In den Metadaten der Compute-Instanz (compute disks describe
-Befehl) wird das Gerät ebenfalls als entfernt angezeigt. Der Bereitstellungspunkt des Geräts und alle von udev-Regeln erstellten Symlinks sind jedoch weiterhin im Gastbetriebssystem sichtbar.
Fehlermeldung:
Der Versuch, von dem getrennten Laufwerk in der VM zu lesen, führt zu I/O-Fehlern:
sudo head /dev/nvme0n3 head: error reading '/dev/nvme0n3': Input/output error
Problem:
Bei Betriebssystem-Images, die einen Linux-Kernel 6.0–6.2 verwenden, aber keinen Backport eines NVMe-Fixes enthalten, wird nicht erkannt, wenn ein NVMe-Laufwerk getrennt wurde.
Lösung:
Starten Sie die VM neu, um das Entfernen des Laufwerks abzuschließen.
Verwenden Sie ein Betriebssystem mit einer Linux-Kernelversion, bei der dieses Problem nicht auftritt, um dieses Problem zu vermeiden:
- 5.19 oder älter
- 6.3 oder höher
Sie können die Linux-Kernelversion mit dem Befehl uname -r
im Gastbetriebssystem aufrufen.
Nächste Schritte
- Weitere Informationen zu nichtflüchtigen Speichern.
- Weitere Informationen zu lokalen SSDs.
- Laufwerke so konfigurieren, dass sie die Leistungsanforderungen erfüllen.
- Weitere Informationen zu Symlinks.