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 Persistent Disk. Confidential VMs verwenden auch NVMe for Persistent Disk. Alle anderen Compute Engine-Maschinenserien verwenden die SCSI 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:
Linux
Rufen Sie den aktuellen Wert des Zeitüberschreitungsparameters auf:
- Bestimmen Sie, welchen NVMe-Controller der nichtflüchtige Speicher oder das lokale SSD-Volume verwendet:
ls -l /dev/disk/by-id
Rufen Sie die in Sekunden angegebene Einstellung
io_timeoutfü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.nvme1NAMESPACE: der Namespace des NVMe-Laufwerks, z. B.nvme1n1
Wenn Sie nur ein einzelnes Laufwerk haben, das NVMe verwendet, führen Sie den folgenden Befehl aus:
cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
- Bestimmen Sie, welchen NVMe-Controller der nichtflüchtige Speicher oder das lokale SSD-Volume verwendet:
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.rulesdie 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"
Windows
Um den Zeitüberschreitungsparameter für E/A-Vorgänge zu erhöhen, die an NVMe-Geräte unter Windows gesendet wurden, öffnen Sie PowerShell als Administrator und führen Sie die folgenden Befehle aus, um das Registry-Attribut
IoTimeoutValuefestzulegen:$RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters' $Name = 'IoTimeoutValue' $Value = '240' New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force
Starten Sie die VM neu, damit die Änderungen wirksam werden.
Getrennte Laufwerke werden weiterhin im Betriebssystem einer Compute-Instanz angezeigt
Auf VMs, die die Linux-Kernel-Version 6.0 bis 6.2 verwenden, funktionieren Vorgänge mit der Compute Engine API-Methode instances.detachDisk oder dem Befehl gcloud compute instances detach-disk möglicherweise nicht wie erwartet.
In der Google Cloud Console wird das Gerät als entfernt angezeigt. In den Metadaten der Compute-Instanz (Befehl compute disks describe) wird das Gerät als entfernt angezeigt. Der Bereitstellungspunkt des Geräts und alle von udev-Regeln erstellten Symlinks sind jedoch weiterhin im Gastbetriebssystem sichtbar.
Fehlermeldung:
Der Versuch, vom getrennten Laufwerk auf der VM zu lesen, führt zu E/A-Fehlern:
sudo head /dev/nvme0n3 head: error reading '/dev/nvme0n3': Input/output error
Problem:
Betriebssystem-Images, die einen Linux-Kernel der Version 6.0–6.2 verwenden, aber keinen Backport eines NVMe-Fixes enthalten, erkennen nicht, wenn ein NVMe-Laufwerk getrennt wird.
Lösung:
Starten Sie die VM neu, um das Entfernen des Laufwerks abzuschließen.
Verwenden Sie ein Betriebssystem mit einer Linux-Kernel-Version, die dieses Problem nicht hat, um dieses Problem zu vermeiden:
- 5.19 oder älter
- 6.3 oder höher
Sie können den Befehl uname -r im Gastbetriebssystem verwenden, um die Linux-Kernel-Version aufzurufen.
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.