Prática recomendada: usar nomes de dispositivos persistentes em uma VM Linux


Neste documento, descrevemos como usar a nomenclatura de dispositivos persistentes na VM Linux.

Para VMs que usam um sistema operacional Linux, os nomes de dispositivos, como /dev/sda, podem mudar depois que você executar procedimentos como os seguintes:

  • Como iniciar e interromper uma VM
  • Como desconectar e reconectar discos
  • Como mudar tipos de máquina

Essa mudança ocorre porque os nomes dos dispositivos são atribuídos de um intervalo disponível depois que uma VM é iniciada ou um dispositivo é anexado. Remover um dispositivo ou interromper a VM libera o nome do dispositivo. Quando o dispositivo é reconectado ou a VM reiniciada, um novo nome de dispositivo é atribuído do intervalo disponível. O kernel do Linux não garante a ordenação do dispositivo após reinicializações.

Uma mudança no nome do dispositivo pode fazer com que todos os aplicativos ou scripts que dependem do nome original do dispositivo não funcionem corretamente ou que a VM não seja inicializada após uma reinicialização.

Para evitar esse problema, é recomendável usar a nomenclatura de dispositivos permanentes ao se referir a discos e partições nas VMs do Linux. Também é possível usar links simbólicos.

Antes de começar

  • Revise o gerenciamento de dispositivos do seu sistema operacional Linux:
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud, não é necessário configurar a autenticação.

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

Usar nomenclatura de dispositivo permanente

Para configurar um nome de dispositivo permanente, atribua um nome de ponto de montagem ao dispositivo de disco no arquivo fstab. Há três maneiras de configurar um nome de dispositivo permanente.

  • Usando um rótulo. Essa opção precisa que os sistemas de arquivos sejam compatíveis com rótulos e que você adicione um rótulo às partições de disco.
  • usando uma partição ou um disco UUID Um UUID é gerado quando um disco é criado com uma tabela de partição, e o UUID é exclusivo por partição.
  • Usando um ID de disco permanente (/dev/disk/by-id) do Persistent Disk ou Google Cloud Hyperdisk, ou um link simbólico, baseado no nome do recurso de disco.

Recomendamos usar o UUID da partição ou o link simbólico para VMs do Linux.

UUID da partição

Para encontrar o UUID de um disco, execute as seguintes etapas:

  1. Conectar-se à VM.
  2. Se você não souber o nome do dispositivo de disco, encontre-o usando o link simbólico.

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

    O resultado será assim:

      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 o UUID da partição do disco executando um dos seguintes comandos:

    • blkid

      sudo  blkid -s UUID
      

      O resultado será assim:

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

      O resultado será assim:

      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. Adicione uma entrada para o UUID do seu dispositivo no arquivo /etc/fstab.

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

    Nesse exemplo, /data é o ponto de montagem e ext4 é o tipo de sistemas de arquivos.

  5. Execute mount -av para confirmar que o dispositivo está ativado corretamente.

    sudo mount -av

    Se o dispositivo for ativado corretamente, a saída será semelhante a esta:

    /                           : 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 do disco permanente

Para encontrar o nome do dispositivo de disco usando o ID do disco permanente, ou o link simbólico, conclua as seguintes etapas:

  1. Conectar-se à VM.
  2. Execute o comando a seguir para recuperar o ID no disco

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

    O resultado será assim:

    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 NVME discos, a saída será semelhante a esta

    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. Adicione o link simbólico ao arquivo /etc/fstab.

    /dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
    
  4. Execute mount -av para confirmar que o dispositivo está ativado corretamente.

    sudo mount -av

    Se o dispositivo for ativado corretamente, a saída será semelhante a esta:

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