Risoluzione dei problemi relativi ai dischi NVMe

Questo documento elenca gli errori che potresti riscontrare quando utilizzi i dischi con l'interfaccia Nonvolatile Memory Express (NVMe).

Puoi utilizzare l'interfaccia NVMe per le unità SSD locali e i dischi permanenti (Persistent Disk o Google Cloud Hyperdisk). Solo le serie di macchine più recenti, come Tau T2A, M3, C3, C3D e H3, utilizzano l'interfaccia NVMe per Persistent Disk. Le Confidential VM utilizzano NVMe anche per il Persistent Disk. Tutte le altre serie di macchine Compute Engine utilizzano l'interfaccia del disco SCSI per i dischi permanenti.

Errore di timeout dell'operazione I/O

Se riscontri errori di timeout di I/O, la latenza potrebbe superare il parametro di timeout predefinito per le operazioni di I/O inviate ai dispositivi NVMe.

Messaggio di errore:

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

Risoluzione:

Per risolvere il problema, aumenta il valore del parametro di timeout.

  1. Visualizza il valore attuale del parametro timeout.

    1. Determina quale controller NVMe viene utilizzato dal disco permanente o dal volume SSD locale.
      ls -l /dev/disk/by-id
      
    2. Visualizza l'impostazione io_timeout, specificata in secondi, per il disco.

      cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
      
      Sostituisci quanto segue:

      • CONTROLLER_ID: l'ID del controller del disco NVMe, ad esempio nvme1
      • NAMESPACE: lo spazio dei nomi del disco NVMe, ad esempio nvme1n1

      Se hai un solo disco che utilizza NVMe, utilizza il comando:

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

  2. Per aumentare il parametro di timeout per le operazioni di I/O inviate ai dispositivi NVMe, aggiungi la seguente riga al file /lib/udev/rules.d/65-gce-disk-naming.rules e riavvia la VM:

    KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
    

I dischi scollegati vengono comunque visualizzati nel sistema operativo di un'istanza di calcolo

Sulle VM che utilizzano la versione del kernel Linux da 6.0 a 6.2, le operazioni che coinvolgono il metodo instances.detachDisk dell'API Compute Engine o il comando gcloud compute instances detach-disk potrebbero non funzionare come previsto. La console Google Cloud mostra il dispositivo come rimosso, i metadati dell'istanza di calcolo (comando compute disks describe) mostrano il dispositivo come rimosso, ma il punto di montaggio del dispositivo e tutti i link simbolici creati dalle regole udev sono ancora visibili nel sistema operativo guest.

Messaggio di errore:

Il tentativo di lettura dal disco scollegato sulla VM genera errori di I/O:

sudo head /dev/nvme0n3

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

Problema:

Le immagini del sistema operativo che utilizzano un kernel Linux 6.0-6.2 ma non includono un backport di una correzione NVMe non riescono a riconoscere quando un disco NVMe viene scollegato.

Risoluzione:

Riavvia la VM per completare la procedura di rimozione del disco.

Per evitare questo problema, utilizza un sistema operativo con una versione del kernel Linux che non presenta questo problema:

  • 5.19 o versioni successive
  • 6.3 o versioni successive

Puoi utilizzare il comando uname -r nel sistema operativo guest per visualizzare la versione del kernel Linux.

Passaggi successivi