Fehlerbehebung bei NVMe-Laufwerken

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-Schnittstelle für Persistent Disk. 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.

  1. Rufen Sie den aktuellen Wert des Zeitüberschreitungsparameters auf.

    1. Bestimmen Sie, welcher NVMe-Controller vom nichtflüchtigen Speicher oder der lokalen SSD verwendet wird.
      ls -l /dev/disk/by-id
      
    2. Rufen Sie die in Sekunden angegebene Einstellung io_timeout für das Laufwerk auf.

      cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
      
      Ersetzen Sie Folgendes:

      • CONTROLLER_ID: die ID des NVMe-Disk-Controllers, z. B. nvme1
      • NAMESPACE: der Namespace des NVMe-Laufwerks, z. B. nvme1n1

      Wenn Sie nur eine einzelne NVMe-Festplatte haben, verwenden Sie den folgenden Befehl:

      cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
      

  2. 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"
    

Abgetrennte Laufwerke werden weiterhin im Betriebssystem einer Compute-Instanz angezeigt

Bei VMs, auf denen die Linux-Kernelversionen 6.0 bis 6.2 verwendet werden, funktionieren Vorgänge, die die Compute Engine API-Methode instances.detachDisk oder den gcloud compute instances detach-disk-Befehl verwenden, möglicherweise nicht wie erwartet. In der Google Cloud -Konsole wird das Gerät als entfernt angezeigt, in den Compute-Instanz-Metadaten (Befehl compute disks describe) wird das Gerät als entfernt angezeigt, aber der Geräte-Mount-Point und alle von udev-Regeln erstellten Symlinks sind weiterhin im Gastbetriebssystem sichtbar.

Fehlermeldung:

Wenn Sie versuchen, Daten von dem getrennten Laufwerk auf der VM zu lesen, treten E/A-Fehler auf:

sudo head /dev/nvme0n3

head: error reading '/dev/nvme0n3': Input/output error

Problem:

Betriebssystem-Images, die einen Linux-Kernel der Version 6.0 bis 6.2 verwenden, aber keinen Backport eines NVMe-Fix enthalten, erkennen nicht, wenn eine NVMe-Festplatte getrennt wird.

Lösung:

Starten Sie die VM neu, um das Entfernen des Laufwerks abzuschließen.

Verwenden Sie ein Betriebssystem mit einer Linux-Kernelversion, die dieses Problem nicht aufweist, um es zu vermeiden:

  • 5.19 oder älter
  • 6.3 oder höher

Mit dem Befehl uname -r im Gastbetriebssystem können Sie die Linux-Kernelversion aufrufen.

Nächste Schritte