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 selecionando uma das seguintes opções:

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

      gcloud init
    2. Set a default region and zone.

Nomenclatura de dispositivos em VMs do Linux

Os nomes de dispositivos Linux dos discos anexados à VM dependem da interface escolhida ao criar os discos. Quando você usa o lsblk comando do sistema operacional para visualizar os dispositivos de disco, ele exibe o prefixonvme para discos anexados à interface NVMe e o prefixo sd para discos anexados com a interface SCSI.

A ordem dos números de disco ou dos controladores NVMe não é previsível nem consistente entre as reinicializações das VMs. Na primeira inicialização, um disco permanente pode ser nvme0n1 (ou sda para SCSI). Na segunda inicialização, o nome de dispositivo do mesmo disco permanente pode ser nvme2n1 ou nvme0n3 (ou sdc para SCSI).

Ao acessar os discos anexados, use os links simbólicos criados em /dev/disk/by-id/. Esses nomes persistem após as reinicializações. Para mais informações sobre links simbólicos, consulte Links simbólicos para discos anexados a uma VM.

Nomes de dispositivos SCSI

O formato de um dispositivo de disco anexado a SCSI é sda para o primeiro disco anexado. As partições do disco aparecem como sda1. Cada disco extra usa uma letra sequencial, como sdb e sdc. Quando sdz for alcançado, os próximos discos adicionados terão nomes como sdaa, sdab e sdac, até sddx.

Nomes de dispositivos NVMe

O formato de um dispositivo de disco anexado ao NVMe nos sistemas operacionais Linux é nvmenumbernnamespace. O number representa o número do controlador de disco NVMe, e namespace é um ID de espaço de nome do NVMe atribuído pelo controlador de disco NVMe. Para partições, pn é anexado ao nome do dispositivo, em que n é um número, começando com 1, que indica o na partição.

O número do controlador começa em 0. Um único disco NVMe anexado à instância de computação tem um nome de dispositivo nvme0n1. A maioria dos tipos de máquina usa um único controlador de disco NVMe. Os nomes dos dispositivos NVMe são nvme0n1, nvme0n2, nvme0n3 e assim por diante.

Os discos SSD locais conectados a séries de máquinas de terceira geração ou instâncias mais recentes têm um controlador NVMe separado para cada disco. Nessas VMs, os nomes dos dispositivos anexados a NVMe do SSD local são semelhantes a nvme0n1, nvme1n1 e nvme2n1. O número de discos SSD locais anexados depende do tipo de máquina da VM.

As instâncias de computação baseadas em séries de máquinas de terceira geração ou mais recentes usam NVMe para o Persistent Disk e o Google Cloud Hyperdisk, além de discos SSD locais. Cada VM tem um controlador NVMe para o Persistent Disk e o Hyperdisk e um controlador NVMe para cada disco SSD local. O controlador NVMe do Persistent Disk e do Hyperdisk tem um único namespace NVMe para todos os discos anexados. Portanto, uma instância da série de máquinas de terceira geração com um Persistent Disk e um Hyperdisk (cada um com duas partições) e dois discos SSD locais não formatados usa os seguintes nomes de dispositivos:

  • nvme0n1: Persistent Disk
  • nvme0n1p1
  • nvme0n1p2
  • nvme0n2: Hyperdisk
  • nvme0n2p1
  • nvme0n2p2
  • nvme1n1: primeiro SSD local
  • nvme2n1: segundo SSD local

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