Mejores prácticas: utilizar nombres de dispositivos persistentes en una máquina virtual Linux


Este documento describe cómo utilizar nombres de dispositivos persistentes en su máquina virtual Linux.

Para las máquinas virtuales que utilizan un sistema operativo Linux, los nombres de los dispositivos, por ejemplo /dev/sda , pueden cambiar después de realizar procedimientos como los siguientes:

  • Iniciar y detener una VM
  • Desmontar y volver a colocar discos
  • Cambiar tipos de máquinas

Este cambio de nombre de dispositivo se produce porque los nombres de los dispositivos se asignan desde un rango disponible una vez que se inicia una máquina virtual o se conecta un dispositivo. Desconectar un dispositivo o detener la VM libera el nombre del dispositivo. Cuando se vuelve a conectar el dispositivo o se reinicia la máquina virtual, se asigna un nuevo nombre de dispositivo del rango disponible. El kernel de Linux no garantiza el orden de los dispositivos tras los reinicios.

Un cambio de nombre de dispositivo puede provocar que cualquier aplicación o script que dependa del nombre del dispositivo original no funcione correctamente o que la máquina virtual no arranque después de reiniciar.

Se recomienda utilizar nombres de dispositivos persistentes al hacer referencia a discos y particiones en sus máquinas virtuales Linux para evitar este problema. También puedes utilizar enlaces simbólicos .

Antes de comenzar

  • Revise la administración de dispositivos para su sistema operativo Linux:
  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

Nomenclatura de dispositivos en máquinas virtuales Linux

Los nombres de los dispositivos Linux para los discos conectados a su VM dependen de la interfaz que elija al crear los discos. Cuando utiliza el comando del sistema operativo lsblk para ver sus dispositivos de disco, muestra el prefijo nvme para los discos conectados con la interfaz NVMe y el prefijo sd para los discos conectados con la interfaz SCSI.

El orden de los números de disco o de los controladores NVMe no es predecible ni coherente entre los reinicios de las máquinas virtuales. En el primer arranque, un disco persistente podría ser nvme0n1 (o sda para SCSI). En el segundo inicio, el nombre del dispositivo para el mismo disco persistente podría ser nvme2n1 o nvme0n3 (o sdc para SCSI).

Al acceder a los discos adjuntos, debe utilizar los enlaces simbólicos creados en /dev/disk/by-id/ . Estos nombres persisten tras los reinicios. Para obtener más información sobre los enlaces simbólicos, consulte Enlaces simbólicos para discos conectados a una máquina virtual .

Nombres de dispositivos SCSI

El formato de un dispositivo de disco conectado SCSI es sda para el primer disco conectado. Las particiones del disco aparecen como sda1 . Cada disco adicional utiliza una letra secuencial, como sdb y sdc . Cuando se alcanza sdz , los siguientes discos agregados tienen nombres como sdaa , sdab y sdac , hasta sddx .

Nombres de dispositivos NVMe

El formato de un dispositivo de disco conectado a NVMe en los sistemas operativos Linux es nvme number n namespace . El number representa el número del controlador de disco NVMe y namespace es un ID de espacio de nombres NVMe asignado por el controlador de disco NVMe. Para particiones, p n se agrega al nombre del dispositivo, donde n es un número, que comienza con 1, que denota la n partición .

El número de controlador comienza en 0 . Un único disco NVMe conectado a su instancia informática tiene un nombre de dispositivo nvme0n1 . La mayoría de los tipos de máquinas utilizan un único controlador de disco NVMe. Los nombres de los dispositivos NVMe son nvme0n1 , nvme0n2 , nvme0n3 , etc.

Los discos SSD locales conectados a series de máquinas de tercera generación o instancias posteriores tienen un controlador NVMe independiente para cada disco. En estas máquinas virtuales, los nombres de los dispositivos SSD locales conectados a NVMe se parecen nvme0n1 , nvme1n1 y nvme2n1 . La cantidad de discos SSD locales conectados depende del tipo de máquina de su VM.

Las instancias informáticas basadas en series de máquinas de tercera generación o posteriores utilizan NVMe tanto para el disco persistente como para el hiperdisco de Google Cloud, y también para los discos SSD locales. Cada VM tiene 1 controlador NVMe para disco persistente e hiperdisco y 1 controlador NVMe para cada disco SSD local. El controlador NVMe de disco persistente e hiperdisco tiene un único espacio de nombres NVMe para todos los discos conectados. Por lo tanto, una instancia de serie de máquinas de tercera generación con un disco persistente y un hiperdisco (cada uno con 2 particiones) y 2 discos SSD locales sin formato utiliza los siguientes nombres de dispositivo:

  • nvme0n1 - Disco persistente
  • nvme0n1p1
  • nvme0n1p2
  • nvme0n2 - Hiperdisco
  • nvme0n2p1
  • nvme0n2p2
  • nvme1n1 - primer SSD local
  • nvme2n1 - segundo SSD local

Utilice nombres de dispositivos persistentes

Para configurar un nombre de dispositivo persistente, asigne un nombre de punto de montaje para el dispositivo de disco en el archivo fstab . Hay tres formas de configurar un nombre de dispositivo persistente.

  • Mediante el uso de una etiqueta . Esta opción requiere que el sistema de archivos admita etiquetas y que agregue una etiqueta a las particiones del disco.
  • Utilizando una partición o un UUID de disco. Se genera un UUID cuando se crea un disco con una tabla de particiones y el UUID es único por partición.
  • Utilizando un ID de disco persistente ( /dev/disk/by-id ) para Persistent Disk o Google Cloud Hyperdisk, o un enlace simbólico basado en el nombre del recurso del disco.

Recomendamos utilizar el UUID de partición o el enlace simbólico para máquinas virtuales Linux.

UUID de partición

Para encontrar el UUID de un disco, realice los siguientes pasos:

  1. Conéctese a su máquina virtual.
  2. Si no conoce el nombre del dispositivo del disco, puede encontrarlo mediante el enlace simbólico.

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

    El resultado es similar al siguiente:

      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. Recupere el UUID de la partición del disco ejecutando uno de los siguientes comandos:

    • blkid

      sudo  blkid -s UUID
      

      El resultado es similar al siguiente:

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

      El resultado es similar al siguiente:

      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. Agregue una entrada para el UUID de su dispositivo en el archivo /etc/fstab .

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

    En este ejemplo, /data es el punto de montaje y ext4 es el tipo de sistema de archivos.

  5. Valide que el dispositivo esté montado correctamente ejecutando mount -av .

    sudo mount -av

    Si el dispositivo se monta correctamente, el resultado es similar al siguiente:

    /                           : 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 de disco persistente

Para encontrar el nombre del dispositivo de disco utilizando el ID del disco persistente o el enlace simbólico, complete los siguientes pasos:

  1. Conéctese a su máquina virtual.
  2. Recupere la ID en el disco ejecutando el siguiente comando:

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

    El resultado es similar al siguiente:

    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
    

    Para discos NVME , el resultado es similar al siguiente:

    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. Agregue el enlace simbólico al archivo /etc/fstab .

    /dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
    
  4. Valide que el dispositivo esté montado correctamente ejecutando mount -av .

    sudo mount -av

    Si el dispositivo se monta correctamente, el resultado es similar al siguiente:

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