Adicionar um disco a uma VM do Linux

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Este artigo mostra a você como anexar um disco persistente à sua VM para que você possa preservar dados, mesmo que sua VM seja provisionada novamente devido à manutenção ou ao redimensionamento.

Anexar um novo disco a uma VM

Se você quiser adicionar um disco de dados novo vazio em sua VM, use o comando az vm disk attach com o parâmetro --new. Se a VM estiver em uma zona de disponibilidade, o disco será criado automaticamente na mesma zona que a VM. Para obter mais informações, consulte Visão geral de zonas de disponibilidade. O exemplo a seguir cria um disco chamado myDataDisk que tem tamanho de 50 Gb:

az vm disk attach \
   -g myResourceGroup \
   --vm-name myVM \
   --name myDataDisk \
   --new \
   --size-gb 50

Menor latência

Nas regiões selecionadas, a latência de anexação do disco foi reduzida, ou seja, você verá um aprimoramento de até 15%. Isso será útil se você tiver failovers planejados/não planejados entre VMs, estiver escalando sua carga de trabalho ou estiver executando uma carga de trabalho com estado de alta escala, como o Serviço de Kubernetes do Azure. No entanto, esse aprimoramento é limitado ao comando de anexação de disco explícito, az vm disk attach. Você não verá o aprimoramento de desempenho se chamar um comando que possa executar implicitamente uma anexação, como az vm update. Você não precisa realizar nenhuma ação além de chamar o comando de anexação explícito para ver esse aprimoramento.

Atualmente, a latência mais baixa está disponível em todas as regiões públicas, exceto:

  • Canadá Central
  • Centro dos EUA
  • Leste dos EUA
  • Leste dos EUA 2
  • Centro-Sul dos Estados Unidos
  • Oeste dos EUA 2
  • Norte da Alemanha
  • Oeste da Índia JIO
  • Norte da Europa
  • Europa Ocidental

Anexar um disco existente

Para anexar um disco existente, localize a ID do disco e passe-a para o comando az vm disk attach. A exemplo a seguir consulta em busca de um disco chamado myDataDisk em myResourceGroup, em seguida, anexa-o à VM denominada myVM:

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

Formatar e montar o disco

Para participar, formatar e montar o novo disco para que sua VM do Linux possa usá-lo, Secure Shell em sua VM. Para saber mais, confira Como usar o SSH com o Linux no Azure. O seguinte exemplo se conecta a uma VM com o endereço IP público 10.123.123.25 e o nome de usuário azureuser:

ssh azureuser@10.123.123.25

Localize o disco

Após se conectar à sua VM, localize o disco. Neste exemplo, estamos usando lsblk para listar os discos.

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

A saída deverá ser semelhante ao seguinte exemplo:

sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0      14G
└─sdb1               14G /mnt
sdc     3:0:0:0      50G

Aqui, sdc é o disco que desejamos, pois ele tem 50G. Se você adicionar vários discos e não tiver certeza quanto ao disco baseando-se apenas no tamanho, acesse a página da VM no portal, selecione Discos e verifique o número LUN do disco em Discos de dados. Compare o número de LUN do portal com o último número da parte HTCL da saída, que é o LUN. Outra opção é listar o conteúdo do diretório /dev/disk/azure/scsi1:

ls -l /dev/disk/azure/scsi1

A saída deve ser semelhante ao seguinte exemplo:

lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc

Formatar o disco

Formate o disco com parted; se o tamanho do disco for de dois tebibytes (TiB) ou maior, você deverá usar o particionamento GPT e, se for menor que 2 TiB, você poderá usar o particionamento MBR ou GPT.

Observação

É recomendável que você use a versão mais recente de parted disponível para sua distribuição. Se o tamanho do disco for de 2 tebibytes (TiB) ou mais, use o particionamento GPT. Se o tamanho do disco for menor que 2 TiB, você poderá usar o particionamento MBR ou GPT.

O exemplo a seguir usa parted em /dev/sdc, que é onde o primeiro disco de dados normalmente estará na maioria das VMs. Substitua sdc pela opção correta para seu disco. Também o estamos formatando usando o sistema de arquivos XFS.

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1

Use o utilitário partprobe para garantir que o kernel esteja ciente da nova partição e do novo sistema de arquivos. Deixar de usar partprobe pode fazer com que os comandos blkid ou lsblk não retornem o UUID do novo sistema de arquivos imediatamente.

Monte o disco

Agora, crie um diretório para montar o novo sistema de arquivos usando o mkdir. O exemplo a seguir cria um diretório em /datadrive:

sudo mkdir /datadrive

Use mount para montar então o sistema de arquivos. O exemplo a seguir monta a partição /dev/sdc1 para o ponto de montagem /datadrive:

sudo mount /dev/sdc1 /datadrive

Persista a montagem

Para garantir que a unidade seja remontada automaticamente após uma reinicialização, ela deve ser adicionada ao arquivo /etc/fstab. Além disso, é altamente recomendável que o UUID (identificador universal exclusivo) seja usado em /etc/fstab para fazer referência à unidade, e não apenas ao nome do dispositivo (como, /dev/sdc1). Se o sistema operacional detectar um erro de disco durante a inicialização, usar o UUID evita que o disco incorreto seja montado em um determinado local. Os discos de dados restantes seriam então atribuídos a essas mesmas IDs de dispositivo. Para localizar o UUID da nova unidade, use o utilitário blkid:

sudo blkid

A saída deve ser semelhante ao seguinte exemplo:

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

Observação

A edição inadequada do arquivo /etc/fstab pode resultar em um sistema não inicializável. Se não tiver certeza, consulte a documentação de distribuição para obter informações sobre como editá-lo corretamente. Também é recomendável que um backup do arquivo /etc/fstab seja criado antes da edição.

Em seguida, abra o arquivo /etc/fstab em um editor de texto. Adicione uma linha ao final do arquivo, usando o valor UUID para o dispositivo /dev/sdc1 que foi criado nas etapas anteriores e o ponto de montagem de /datadrive. Usando o exemplo deste artigo, a nova linha teria a seguinte aparência:

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2

Quando terminar de editar o arquivo, salve e feche o editor.

Como alternativa, você pode executar o seguinte comando para adicionar o disco ao arquivo /etc/fstab:

echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2" >> /etc/fstab

Observação

Remover um disco de dados posteriormente sem editar fstab pode fazer com que a VM falhe ao ser inicializada. A maioria das distribuições fornecem as opções de fstab nofail e/ou nobootwait. Essas opções permitem que um sistema inicialize mesmo se o disco não for montado no momento da inicialização. Consulte a documentação da distribuição para obter mais informações sobre esses parâmetros.

A opção nofail garante que a VM inicie mesmo que o sistema de arquivos esteja corrompido ou que o disco não exista no momento da inicialização. Sem essa opção, você poderá encontrar um comportamento conforme descrito em Não é possível conectar-se a uma VM Linux via SSH devido a erros no FSTAB

O Console Serial da VM do Azure pode ser usado para acesso ao console para sua VM se a modificação de fstab resultou em uma falha de inicialização. Mais detalhes estão disponíveis na Documentação do Console Serial.

Suporte a TRIM/UNMAP para Linux no Azure

Alguns kernels Linux permitem operações TRIM/UNMAP para descartar os blocos não utilizados no disco. Esse recurso é útil principalmente para informar o Azure de que as páginas excluídas não são mais válidas e podem ser descartadas. Esse recurso pode economizar investimentos em discos, que são cobrados com base na quantidade de armazenamento consumido, como discos padrão não gerenciados e instantâneos de disco.

Há duas maneiras de habilitar o suporte a TRIM em sua VM do Linux. Como de costume, consulte sua distribuição para obter a abordagem recomendada:

  • Use a opção de montagem discard em /etc/fstab, por exemplo:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • Em alguns casos, a opção discard pode afetar o desempenho. Como alternativa, você pode executar o comando fstrim manualmente na linha de comando ou adicioná-lo a crontab para ser executado normalmente:

sudo apt install util-linux
sudo fstrim /datadrive

Solução de problemas

Ao adicionar discos de dados a uma VM Linux, você poderá encontrar erros se não existir um disco no LUN 0. Se você estiver adicionando um disco manualmente usando o comando az vm disk attach -new e especificar um LUN (--lun) em vez de deixar que a plataforma Azure determine o LUN apropriado, verifique com atenção se já existe (ou existirá) um disco no LUN 0.

Considere o exemplo a seguir que mostra um snippet da saída do lsscsi:

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

Os dois discos de dados existem no LUN 0 e no LUN 1 (a primeira coluna nos detalhes da saída de lsscsi[host:channel:target:lun]). Ambos os discos devem estar acessíveis na VM. Se você tivesse especificado manualmente o primeiro disco para ser adicionado ao LUN 1 e o segundo disco ao LUN 2, os discos não apareceriam corretamente para a VM.

Observação

O valor de host do Azure é 5 nestes exemplos, mas ele poderá variar dependendo do tipo de armazenamento selecionado.

Esse comportamento de disco não é um problema do Azure, mas da maneira em que o kernel do Linux segue as especificações do SCSI. Quando o kernel do Linux verifica os dispositivos conectados no barramento do SCSI, um dispositivo deve estar presente no LUN 0 para que o sistema continue a verificar outros dispositivos. Assim:

  • Examine a saída do lsscsi depois de adicionar um disco de dados para verificar se há um disco no LUN 0.
  • Se o disco não aparecer corretamente para a VM, verifique se existe um disco no LUN 0.

Próximas etapas