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 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

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

    1. Bestimmen Sie, welchen NVMe-Controller der nichtflüchtige Speicher oder das lokale SSD-Volume verwendet:
      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 ein einzelnes Laufwerk haben, das NVMe verwendet, führen Sie den folgenden Befehl aus:

      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"
    

Windows

  1. 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 IoTimeoutValue festzulegen:

    $RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters'
    $Name         = 'IoTimeoutValue'
    $Value        = '240'
    New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force
    
  2. 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