Best practice: usa nomi di dispositivi permanenti su una VM Linux

Questo documento descrive come utilizzare la denominazione permanente dei dispositivi sulla tua VM Linux.

Per le VM che utilizzano un sistema operativo Linux, i nomi dei dispositivi, ad esempio /dev/sda, potrebbero cambiare dopo l'esecuzione di procedure come le seguenti:

  • Avvio e arresto di una VM
  • Scollegamento e ricollegamento dei dischi
  • Modifica dei tipi di macchina

Questa modifica del nome del dispositivo si verifica perché i nomi dei dispositivi vengono assegnati da un intervallo disponibile una volta avviata una VM o collegato un dispositivo. Lo scollegamento o l'arresto della VM ne libera il nome. Quando il dispositivo viene ricollegato o la VM riavviata, viene quindi assegnato un nuovo nome di dispositivo dall'intervallo disponibile. Il kernel Linux non garantisce l'ordinamento dei dispositivi tra i riavvii.

La modifica del nome di un dispositivo potrebbe causare il malfunzionamento di applicazioni o script che dipendono dal nome originale del dispositivo oppure che la VM potrebbe non avviarsi dopo un riavvio.

Per evitare questo problema, ti consigliamo di utilizzare la denominazione permanente dei dispositivi quando fai riferimento a dischi e partizioni sulle VM Linux. Puoi anche utilizzare i link simbolici.

Prima di iniziare

  • Esamina la gestione dei dispositivi per il tuo sistema operativo Linux:
  • Se non l'hai già fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità dell'utente per ottenere l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione in Compute Engine come segue.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Set a default region and zone.

Denominazione dei dispositivi sulle VM Linux

I nomi dei dispositivi Linux per i dischi collegati alla VM dipendono dall'interfaccia scelta durante la creazione dei dischi. Quando utilizzi il comando lsblk del sistema operativo per visualizzare i dispositivi disco, viene visualizzato il prefisso nvme per i dischi collegati con l'interfaccia NVMe e il prefisso sd per i dischi collegati con l'interfaccia SCSI.

L'ordine dei numeri dei dischi o dei controller NVMe non è prevedibile o coerente tra i riavvii delle VM. Al primo avvio, un disco permanente potrebbe essere nvme0n1 (o sda per SCSI). Al secondo avvio, il nome dispositivo per lo stesso disco permanente potrebbe essere nvme2n1 o nvme0n3 (o sdc per SCSI).

Per accedere ai dischi collegati, devi utilizzare invece i link simbolici creati in /dev/disk/by-id/. Questi nomi vengono mantenuti durante i riavvii. Per ulteriori informazioni sui collegamenti simbolici, consulta Collegamenti simbolici per i dischi collegati a una VM.

Nomi dei dispositivi SCSI

Il formato di un dispositivo disco collegato a SCSI è sda per il primo disco collegato. Le partizioni del disco vengono visualizzate come sda1. Ogni disco aggiuntivo utilizza una lettera sequenziale, come sdb e sdc. Quando sdz viene raggiunto, i dischi successivi aggiunti hanno nomi come sdaa, sdab e sdac, fino a sddx.

Nomi dei dispositivi NVMe

Il formato di un dispositivo disco collegato a NVMe nei sistemi operativi Linux è nvmenumbernnamespace. number rappresenta il numero del controller del disco NVMe, mentre namespace è l'ID dello spazio dei nomi NVMe assegnato dal controller del disco NVMe. na partizione.

Il numero del controller parte da 0. Un singolo disco NVMe collegato all'istanza di computing ha il nome dispositivo nvme0n1. La maggior parte dei tipi di macchine usa un singolo controller del disco NVMe. I nomi dei dispositivi NVMe saranno quindi nvme0n1, nvme0n2, nvme0n3 e così via.

I dischi SSD locali collegati a serie di macchine di terza generazione o a istanze successive hanno un controller NVMe separato per ogni disco. Su queste VM, i nomi dei dispositivi collegati a NVMe SSD locale sono simili a nvme0n1, nvme1n1 e nvme2n1. Il numero di dischi SSD locali collegati dipende dal tipo di macchina della VM.

Le istanze di calcolo basate su serie di macchine di terza generazione o successive utilizzano NVMe sia per Persistent Disk sia per Google Cloud Hyperdisk, nonché per i dischi SSD locali. Ogni VM ha un controller NVMe per Persistent Disk e Hyperdisk e un controller NVMe per ogni disco SSD locale. Il controller NVMe per disco permanente e Hyperdisk ha un singolo spazio dei nomi NVMe per tutti i dischi collegati. Pertanto, un'istanza di serie di macchine di terza generazione con un Persistent Disk e un hyperdisk (ognuno con 2 partizioni) e due dischi SSD locali non formattati utilizza i seguenti nomi di dispositivo:

  • nvme0n1 - Persistent Disk
  • nvme0n1p1
  • nvme0n1p2
  • nvme0n2 - Hyperdisk
  • nvme0n2p1
  • nvme0n2p2
  • nvme1n1 - primo SSD locale
  • nvme2n1 - secondo SSD locale

Usa denominazione permanente dei dispositivi

Per configurare un nome di dispositivo permanente, assegna un nome del punto di montaggio per il dispositivo disco nel file fstab. Esistono tre modi per configurare un nome dispositivo permanente.

  • Utilizzando un'etichetta. Questa opzione richiede che il file system supporti le etichette e che tu aggiunga un'etichetta alle partizioni del disco.
  • Tramite l'utilizzo di una partizione o di un UUID del disco. Un UUID viene generato quando viene creato un disco con una tabella di partizione e l'UUID è univoco per ogni partizione.
  • Mediante l'utilizzo di un ID disco permanente (/dev/disk/by-id) per Persistent Disk o Google Cloud Hyperdisk oppure di un link simbolico basato sul nome risorsa del disco.

Ti consigliamo di utilizzare l'UUID della partizione o il link simbolico per le VM Linux.

UUID partizione

Per trovare l'UUID per un disco, segui questi passaggi:

  1. Connettiti alla tua VM.
  2. Se non conosci il nome del dispositivo per il disco, puoi trovarlo tramite il link simbolico.

    ls -l /dev/disk/by-id/google-*
    

    L'output è simile al seguente:

      lrwxrwxrwx 1 root root  9 Oct 23 15:58 /dev/disk/by-id/google-my-vm -> ../../sda
      lrwxrwxrwx 1 root root 10 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part1 -> ../../sda1
      lrwxrwxrwx 1 root root 11 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part15 -> ../../sda15
      lrwxrwxrwx 1 root root  9 Oct 23 15:58 /dev/disk/by-id/google-my-vm-app-data -> ../../nvme0n1
      

  3. Recupera l'UUID della partizione per il disco eseguendo uno dei seguenti comandi:

    • blkid

      sudo  blkid -s UUID
      

      L'output è simile al seguente:

      /dev/sda1: UUID="4f570f2d-fffe-4c7d-8d8f-af347af7612a"
      /dev/sda15: UUID="E0B2-DFAF"
      /dev/nvme0n1: UUID="9e617251-6a92-45ff-ba40-700a9bdeb03e"
      
    • ls -l

      sudo ls -l /dev/disk/by-uuid/
      

      L'output è simile al seguente:

      lrwxrwxrwx 1 root root 10 Sep 22 18:12 4f570f2d-fffe-4c7d-8d8f-af347af7612a -> ../../sda1
      lrwxrwxrwx 1 root root 13 Sep 22 18:15 9e617251-6a92-45ff-ba40-700a9bdeb03e -> ../../nvme0n1
      lrwxrwxrwx 1 root root 11 Sep 22 18:12 E0B2-DFAF -> ../../sda15
      
  4. Aggiungi una voce per l'UUID del tuo dispositivo nel file /etc/fstab.

    UUID=9e617251-6a92-45ff-ba40-700a9bdeb03e /data ext4 defaults 0 0
    

    In questo esempio, /data è il punto di montaggio e ext4 è il tipo di file system.

  5. Verifica che il dispositivo sia montato correttamente eseguendo mount -av.

    sudo mount -av

    Se il dispositivo viene montato correttamente, l'output è simile al seguente:

    /                           : ignored
    /boot/efi                : already mounted
    mount: /data does not contain SELinux labels.
    You just mounted an file system that supports labels which does not
    contain labels, onto an SELinux box. It is likely that confine
    applications will generate AVC messages and not be allowed access to
    this filesystem.  For more details see restorecon(8) and mount(8).
    /data                    : successfully mounted
    

ID disco permanente

Per trovare il nome del dispositivo disco utilizzando l'ID del disco permanente, o il link simbolico, completa i seguenti passaggi:

  1. Connettiti alla tua VM.
  2. Recupera l'ID sul disco eseguendo questo comando:

    sudo  ls -lh /dev/disk/by-id/google-*

    L'output è simile al seguente:

    lrwxrwxrwx. 1 root root  9 May 16 17:34 google-disk-2 -> ../../sdb
    lrwxrwxrwx. 1 root root  9 May 16 09:09 google-persistent-disk-0 -> ../../sda
    lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part1 -> ../../sda1
    lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part2 -> ../../sda2
    

    Per NVME dischi, l'output è simile al seguente:

    lrwxrwxrwx 1 root root 13 Jun  1 10:27 google-disk-3 -> ../../nvme0n2
    lrwxrwxrwx 1 root root 13 Jun  1 10:25 google-t2a -> ../../nvme0n1
    lrwxrwxrwx 1 root root 15 Jun  1 10:25 google-t2a-part1 -> ../../nvme0n1p1
    lrwxrwxrwx 1 root root 16 Jun  1 10:25 google-t2a-part15 -> ../../nvme0n1p15
    
  3. Aggiungi il link simbolico al file /etc/fstab.

    /dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
    
  4. Verifica che il dispositivo sia montato correttamente eseguendo mount -av.

    sudo mount -av

    Se il dispositivo viene montato correttamente, l'output è simile al seguente:

    /                           : ignored
    /boot/efi                : already mounted
    mount: /data does not contain SELinux labels.
    You just mounted an file system that supports labels which does
    not contain labels, onto an SELinux box. It is likely that confine
    applications will generate AVC messages and not be allowed access to this
    file system.  For more details see restorecon(8) and mount(8).
    /data                    : successfully mounted