Questo documento elenca gli errori che potresti riscontrare quando utilizzi dischi con l'interfaccia NVMe (Nonvolatile Memory Express).
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. Anche le Confidential VM utilizzano NVMe per Persistent Disk. Tutte le altre serie di macchine Compute Engine utilizzano l'interfaccia disco SCSI per i dischi permanenti.
Errore di timeout dell'operazione I/O
Se si verificano errori di timeout 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.
Visualizza il valore attuale del parametro di timeout.
- Determina quale controller NVMe viene utilizzato dal disco permanente o dal volume SSD locale.
ls -l /dev/disk/by-id
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 esempionvme1
NAMESPACE
: lo spazio dei nomi del disco NVMe, ad esempionvme1n1
Se hai un solo disco che utilizza NVMe, utilizza il comando:
cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
- Determina quale controller NVMe viene utilizzato dal disco permanente o dal volume SSD locale.
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
, quindi riavvia la VM:KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
I dischi scollegati appaiono ancora nel sistema operativo di un'istanza Compute
Sulle VM che utilizzano il kernel Linux dalla versione 6.0 alla versione 6.2, le operazioni che prevedono il metodo instances.detachDisk
o il comando gcloud compute instances detach-disk
dell'API Compute Engine potrebbero non funzionare come previsto.
La console Google Cloud mostra il dispositivo come rimosso, i metadati dell'istanza Compute (comando compute disks describe
) mostrano il dispositivo come rimosso, ma il punto di montaggio del dispositivo ed eventuali link simbolici creati dalle regole udev sono ancora visibili nel sistema operativo ospite.
Messaggio di errore:
Il tentativo di leggere dal disco scollegato sulla VM determina 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 il processo di rimozione del disco.
Per evitare questo problema, utilizza un sistema operativo con una versione kernel Linux che non presenti questo problema:
- 5,19 o versioni precedenti
- 6.3 o versioni successive
Puoi usare il comando uname -r
nel sistema operativo guest per visualizzare la versione kernel Linux.
Collegamento simbolico non creati su VM C3 e C3D con SSD locale
Se colleghi dischi SSD locali a una VM C3 o C3D, potresti dover eseguire passaggi aggiuntivi per creare i collegamenti simbolici per i dischi SSD locali. Questi passaggi sono necessari solo se utilizzi una delle seguenti immagini pubbliche offerte da Google Cloud:
- SLES 15 SP4 e SP5
- SLES 12 SP4
Questi passaggi aggiuntivi si applicano solo ai dischi SSD locali; non è necessario fare nulla per i volumi dei Persistent Disk.
Le immagini Linux pubbliche elencate in precedenza non hanno la configurazione udev
corretta per creare collegamenti simbolici per i dispositivi SSD locali collegati alle VM C3 e C3D. Inoltre, le immagini personalizzate potrebbero non includere le regole udev
necessarie per creare collegamenti simbolici per i dispositivi SSD locali collegati a VM C3 e C3D.
Utilizza queste istruzioni per aggiungere regole udev
per SUSE o immagini personalizzate.
- Individua la directory delle regole udev. In genere è
/lib/udev/rules.d
o/usr/lib/udev/rules.d
. L'immagine potrebbe avere una directory delle regoleudev
diversa. - Individua il file
65-gce-disk-naming.rules
nella directory delle regole udev. Se il file
65-gce-disk-naming.rules
contiene la riga seguente, l'immagine supporta le nuove regole e puoi fermarti qui:KERNEL=="nvme*n*", ATTRS{model}=="nvme_card[0-9]*",IMPORT{program}="google_nvme_id -d $tempnode"
Se la riga precedente non è presente o se il file
65-gce-disk-naming.rules
non esiste, sostituisci il file esistente o creane uno nuovo con il contenuto del file da questo URL: https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules. Questo file contiene i contenuti aggiornati del file65-gce-disk-naming.rules
, inclusa la riga del passaggio precedente e altre regole necessarie per la denominazione dei dischi di Compute Engine. Ad esempio:sudo curl -o 65-gce-disk-naming.rules https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules
Vai alla directory
udev
.Individua il file
google_nvme_id
nella directoryudev
.Sostituisci i contenuti del file
google_nvme_id
esistente o crea un nuovo file con i contenuti in questo URL:sudo curl -o google_nvme_id https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/google_nvme_id
Assicurati che il file
google_nvme_id
sia eseguibile.sudo chmod 755 google_nvme_id
Riavvia la VM.
Verifica che i collegamenti simbolici siano stati creati correttamente.
ls -l /dev/disk/by-id/google-local-nvme-ssd*
L'output dovrebbe elencare lo stesso numero di link delle unità SSD locali collegate all'istanza e ogni link deve puntare a un percorso del dispositivo
/dev/nvme
diverso. Ad esempio:lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-0 -> ../../nvme0n1 lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-1 -> ../../nvme1n1
Per ulteriori informazioni sui nomi dei dispositivi, consulta Denominazione dei dispositivi.
Puoi verificare che i percorsi dei dispositivi
/dev/nvme
siano dispositivi SSD locali eseguendolsblk
. I dispositivi NVMe che mostrano dimensioni375G
sono dispositivi SSD locali.
Che cosa succede dopo?
- Scopri di più su Persistent Disk.
- Scopri di più sulle SSD locali.
- Configura i dischi per soddisfare i requisiti delle prestazioni.
- Scopri di più sui link simbolici.