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


Este documento descreve como usar a nomenclatura persistente de dispositivos em sua VM Linux.

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

  • Iniciando e parando uma VM
  • Desanexando e reconectando discos
  • Alterando tipos de máquinas

Esta alteração do nome do dispositivo ocorre porque os nomes dos dispositivos são atribuídos a partir de um intervalo disponível quando uma VM é iniciada ou um dispositivo é anexado. Desconectar um dispositivo ou parar a VM libera o nome do dispositivo. Quando o dispositivo é reconectado ou a VM reiniciada, um novo nome de dispositivo é atribuído no intervalo disponível. O kernel do Linux não garante a ordem dos dispositivos nas reinicializações.

Uma alteração no nome do dispositivo pode fazer com que qualquer aplicativo ou script que dependa do nome do dispositivo original não funcione corretamente ou pode fazer com que a VM não inicialize após uma reinicialização.

É recomendável usar a nomenclatura persistente de dispositivos ao fazer referência a discos e partições em suas VMs Linux para evitar esse problema. Você também pode usar links simbólicos .

Antes de começar

  • Revise o gerenciamento de dispositivos para seu sistema operacional Linux:
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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. 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 em VMs Linux

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

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

Ao acessar discos anexados, você deve usar os links simbólicos criados em /dev/disk/by-id/ . Esses nomes persistem durante as reinicializações. Para obter 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 conectado por SCSI é sda para o primeiro disco conectado. As partições do disco aparecem como sda1 . Cada disco adicional usa uma letra sequencial, como sdb e sdc . Quando sdz é 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 conectado a NVMe em sistemas operacionais Linux é nvme number n namespace . O number representa o número do controlador de disco NVMe e namespace é um ID de namespace NVMe atribuído pelo controlador de disco NVMe. Para partições, p n é anexado ao nome do dispositivo, onde n é um número, começando com 1, que denota a n partição .

O número do controlador começa em 0 . Um único disco NVMe anexado à sua instância de computação tem um nome de dispositivo nvme0n1 . A maioria dos tipos de máquinas 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 anexados a séries de máquinas de terceira geração ou instâncias posteriores têm um controlador NVMe separado para cada disco. Nessas VMs, os nomes dos dispositivos SSD locais conectados ao NVMe se parecem com nvme0n1 , nvme1n1 e nvme2n1 . O número de discos SSD locais anexados depende do tipo de máquina da sua VM.

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

  • nvme0n1 - Disco Permanente
  • nvme0n1p1
  • nvme0n1p2
  • nvme0n2 - Hiperdisco
  • nvme0n2p1
  • nvme0n2p2
  • nvme1n1 – primeiro SSD local
  • nvme2n1 - segundo SSD local

Use nomenclatura persistente de dispositivos

Para configurar um nome de dispositivo persistente, atribua um nome de ponto de montagem para o dispositivo de disco no arquivo fstab . Existem três maneiras de configurar um nome de dispositivo persistente.

  • Usando um rótulo . Esta opção requer que o sistema de arquivos suporte rótulos e que você adicione um rótulo às partições do disco.
  • Usando uma partição ou 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 ) para Persistent Disk ou Google Cloud Hyperdisk, ou um link simbólico baseado no nome do recurso do disco.

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

UUID da partição

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

  1. Conecte-se à sua VM.
  2. Se você não souber o nome do dispositivo do disco, poderá encontrar o nome do dispositivo do disco usando o link simbólico.

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

    A saída é semelhante à seguinte:

      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
      

      A saída é semelhante à seguinte:

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

      A saída é semelhante à seguinte:

      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
    

    Neste exemplo, /data é o ponto de montagem e ext4 é o tipo de sistema de arquivos.

  5. Valide se o dispositivo está montado corretamente executando mount -av .

    sudo mount -av

    Se o dispositivo for montado com sucesso, 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 link simbólico, conclua as etapas a seguir:

  1. Conecte-se à sua VM.
  2. Recupere o ID no disco executando o seguinte comando:

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

    A saída é semelhante à seguinte:

    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 , a saída é 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. Valide se o dispositivo está montado corretamente executando mount -av .

    sudo mount -av

    Se o dispositivo for montado com sucesso, 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