Práctica recomendada: usar nombres de dispositivo persistentes en una VM Linux


En este documento se describe cómo usar la nomenclatura de dispositivos persistente en tu máquina virtual Linux.

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

  • Iniciar y detener una VM
  • Desconectar y volver a conectar discos
  • Cambiar tipos de máquinas

El nombre del dispositivo cambia porque se asignan nombres de dispositivo de un intervalo disponible cuando se inicia una máquina virtual o se conecta un dispositivo. Si desconectas un dispositivo o detienes la VM, se libera el nombre del dispositivo. Cuando se vuelve a conectar el dispositivo o se reinicia la máquina virtual, se le asigna un nuevo nombre del intervalo disponible. El kernel de Linux no garantiza el orden de los dispositivos en los reinicios.

Si cambia el nombre de un dispositivo, es posible que las aplicaciones o las secuencias de comandos que dependan del nombre original no funcionen correctamente o que la máquina virtual no se inicie después de un reinicio.

Para evitar este problema, te recomendamos que uses nombres de dispositivos persistentes al hacer referencia a discos y particiones en tus máquinas virtuales Linux. También puedes usar enlaces simbólicos.

Antes de empezar

  • Consulta la gestión de dispositivos para tu sistema operativo Linux:
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

Nombres de dispositivos en máquinas virtuales Linux

Los nombres de los dispositivos Linux de los discos conectados a tu VM dependen de la interfaz que elijas al crear los discos. Cuando usas el comando del sistema operativo lsblk para ver tus dispositivos de disco, se 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 VMs. En el primer arranque, un disco persistente puede ser nvme0n1 (o sda para SCSI). En el segundo arranque, el nombre del dispositivo del mismo disco persistente puede ser nvme2n1 o nvme0n3 (o sdc para SCSI).

Cuando accedas a los discos conectados, debes usar los enlaces simbólicos creados en /dev/disk/by-id/. Estos nombres se conservan al reiniciar. Para obtener más información sobre los enlaces simbólicos, consulta Enlaces simbólicos de discos conectados a una VM.

Nombres de dispositivos SCSI

El formato de un dispositivo de disco conectado por SCSI es sda para el primer disco conectado. Las particiones del disco aparecen como sda1. Cada disco adicional usa una letra secuencial, como sdb y sdc. Cuando se alcanza el límite de sdz, los siguientes discos que se añadan tendrán nombres como sdaa, sdab y sdac, hasta sddx.

Nombres de dispositivos NVMe

El formato de un dispositivo de disco conectado por NVMe en sistemas operativos Linux es nvmenumbernnamespace. 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. En el caso de las particiones, se añade pn al nombre del dispositivo, donde n es un número, que empieza por 1, que indica la partición nth.

El número del mando empieza por 0. Un solo disco NVMe conectado a tu instancia de computación tiene el nombre de dispositivo nvme0n1. La mayoría de los tipos de máquina usan un solo controlador de disco NVMe. Los nombres de los dispositivos NVMe son nvme0n1, nvme0n2, nvme0n3, etc.

Los discos SSD locales conectados a instancias de series de máquinas de tercera generación o posteriores tienen un controlador NVMe independiente para cada disco. En estas VMs, los nombres de los dispositivos SSD locales conectados por NVMe tienen un formato parecido a nvme0n1, nvme1n1 y nvme2n1. El número de discos SSD locales conectados depende del tipo de máquina de tu VM.

Las instancias de computación basadas en series de máquinas de tercera generación o posteriores usan NVMe tanto para Persistent Disk como para Google Cloud Hyperdisk, así como para los discos SSD locales. Cada VM tiene un controlador NVMe para Persistent Disk e Hyperdisk, y un controlador NVMe para cada disco SSD local. El controlador NVMe de Persistent Disk e Hyperdisk tiene un único espacio de nombres NVMe para todos los discos conectados. Por lo tanto, una instancia de la 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 - Persistent Disk
  • nvme0n1p1
  • nvme0n1p2
  • nvme0n2 - Hyperdisk
  • nvme0n2p1
  • nvme0n2p2
  • nvme1n1: primer SSD local
  • nvme2n1 - segundo SSD local

Usar nombres de dispositivos persistentes

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

  • Usando una etiqueta. Para usar esta opción, el sistema de archivos debe admitir etiquetas y debes añadir una etiqueta a las particiones del disco.
  • Usando un UUID de partición o disco. Se genera un UUID cuando se crea un disco con una tabla de particiones, y el UUID es único por partición.
  • Para ello, puedes usar un ID de disco persistente (/dev/disk/by-id) para Persistent Disk o Hyperdisk de Google Cloud, o un enlace simbólico basado en el nombre del recurso de disco.

Te recomendamos que uses el UUID de la partición o el enlace simbólico en las VMs Linux.

UUID de partición

Para encontrar el UUID de un disco, sigue estos pasos:

  1. Conéctate a tu VM.
  2. Si no sabes el nombre del dispositivo del disco, puedes encontrarlo mediante el enlace simbólico.

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

    El resultado debería ser 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. Para obtener el UUID de la partición del disco, ejecuta uno de los siguientes comandos:

    • blkid

      sudo  blkid -s UUID
      

      El resultado debería ser 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 debería ser 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. Añade una entrada para el UUID de tu 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. Valida que el dispositivo esté montado correctamente ejecutando mount -av.

    sudo mount -av

    Si el dispositivo se monta correctamente, el resultado será 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 Persistent Disk

Para encontrar el nombre del dispositivo de disco mediante el ID de disco persistente o el enlace simbólico, sigue estos pasos:

  1. Conéctate a tu VM.
  2. Para obtener el ID del disco, ejecuta el siguiente comando:

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

    El resultado debería ser 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
    

    En el caso de los 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. Añade el enlace simbólico al archivo /etc/fstab.

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

    sudo mount -av

    Si el dispositivo se monta correctamente, el resultado será 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