Expandir discos rígidos virtuais em uma VM Linux

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux que está se aproximando do status de Fim da Vida Útil (EOL). Por favor, considere o seu uso e planeje de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS.

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Este artigo descreve como expandir discos gerenciados para uma máquina virtual (VM) Linux. Você pode adicionar discos de dados para fornecer espaço de armazenamento adicional e também pode expandir um disco de dados existente. O tamanho do disco rígido virtual padrão para o sistema operacional (SO) normalmente é de 30 GB em uma VM Linux no Azure. Este artigo aborda a expansão de discos de SO ou discos de dados. Não é possível expandir o tamanho dos volumes listrados.

Um disco de SO tem uma capacidade máxima de 4.095 GiB. No entanto, muitos sistemas operacionais são particionados com registro mestre de inicialização (MBR) por padrão. O MBR limita o tamanho utilizável a 2 TiB. Se precisar de mais de 2 TiB, crie e anexe discos de dados e use-os para armazenamento de dados. Se você precisar armazenar dados no disco do sistema operacional e precisar de espaço adicional, converta-o em GPT (GUID Partition Table).

Aviso

Certifique-se sempre de que o sistema de arquivos está em um estado íntegro, o tipo de tabela de partição de disco (GPT ou MBR) suportará o novo tamanho e certifique-se de que o backup dos dados seja feito antes de executar operações de expansão de disco. Para obter mais informações, consulte o início rápido do Backup do Azure.

Identificar o objeto de disco de dados do Azure no sistema operacional

No caso de expandir um disco de dados quando há vários discos de dados presentes na VM, pode ser difícil relacionar os LUNs do Azure aos dispositivos Linux. Se o disco do sistema operacional precisar de expansão, ele será claramente rotulado no portal do Azure como o disco do sistema operacional.

Comece identificando a relação entre a utilização do disco, o ponto de montagem e o dispositivo, com o df comando.

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

Aqui podemos ver, por exemplo, o sistema de /opt/db/data arquivos está quase cheio, e está localizado na /dev/sdd1 partição. A saída do mostra o caminho do df dispositivo, independentemente de o disco ser montado pelo caminho do dispositivo ou pelo UUID (preferido) no fstab. Anote também a coluna Tipo, indicando o formato do sistema de arquivos. Isto é importante mais tarde.

Agora, localize o LUN correlacionado examinando /dev/sdd o conteúdo do /dev/disk/azure/scsi1. A saída do comando a seguir ls mostra que o dispositivo conhecido como /dev/sdd dentro do sistema operacional Linux está localizado em LUN1 ao procurar no portal do Azure.

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

Expandir um disco gerenciado do Azure

Expanda sem tempo de inatividade

Você pode expandir seus discos gerenciados sem deslocalizar sua VM. A configuração de cache do host do disco não altera se você pode ou não expandir um disco de dados sem deslocalizar sua VM.

Este recurso tem as seguintes limitações:

  • Apenas suportado para discos de dados.
  • Se um disco tiver 4 TiB ou menos, deverá desalocar a VM e desanexar o disco antes de o expandir para além de 4 TiB. Se um disco já tiver mais de 4 TiB, poderá expandi-lo sem desalocar a VM e desanexar o disco.
  • Não suportado para discos Ultra ou discos SSD Premium v2.
  • Não há suporte para discos compartilhados.
  • Instale e use:
  • Não está disponível em algumas VMs clássicas. Use esse script para obter uma lista de SKUs de VM clássicas que suportam expansão sem tempo de inatividade.

Expandir Azure Managed Disk

Verifique se você tem a CLI do Azure mais recente instalada e está conectado a uma conta do Azure usando az login.

Este artigo requer uma VM existente no Azure com pelo menos um disco de dados conectado e preparado. Se você ainda não tiver uma VM que possa usar, consulte Criar e preparar uma VM com discos de dados.

Nos exemplos a seguir, substitua nomes de parâmetros de exemplo, como myResourceGroup e myVM , por seus próprios valores.

Importante

Se o disco atender aos requisitos em Expandir sem tempo de inatividade, você poderá pular as etapas 1 e 3.

  1. As operações em discos rígidos virtuais não podem ser executadas com a VM em execução. Desaloque a VM com az vm deallocate. O exemplo a seguir deslocaliza a VM chamada myVM no grupo de recursos chamado myResourceGroup:

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    Nota

    A VM deve ser desalocada para expandir o disco rígido virtual. Parar a VM com az vm stop não libera os recursos de computação. Para liberar recursos de computação, use az vm deallocate.

  2. Exiba uma lista de discos gerenciados em um grupo de recursos com a lista az disk. O exemplo a seguir exibe uma lista de discos gerenciados no grupo de recursos chamado myResourceGroup:

    az disk list \
        --resource-group myResourceGroup \
        --query '[*].{Name:name,Gb:diskSizeGb,Tier:accountType}' \
        --output table
    

    Expanda o disco necessário com az disk update. O exemplo a seguir expande o disco gerenciado chamado myDataDisk para 200 GB:

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    Nota

    Quando você expande um disco gerenciado, o tamanho atualizado é arredondado para o tamanho do disco gerenciado mais próximo. Para obter uma tabela dos tamanhos e camadas de disco gerenciado disponíveis, consulte Visão geral dos Managed Disks do Azure - Preços e cobrança.

  3. Inicie sua VM com az vm start. O exemplo a seguir inicia a VM chamada myVM no grupo de recursos chamado myResourceGroup:

    az vm start --resource-group myResourceGroup --name myVM
    

Expandir uma partição de disco e um sistema de arquivos

Nota

Embora existam muitas ferramentas que podem ser usadas para executar o redimensionamento de partições, as ferramentas detalhadas no restante deste documento são as mesmas ferramentas usadas por certos processos automatizados, como o cloud-init. Conforme descrito aqui, a growpart ferramenta com o gdisk pacote fornece compatibilidade universal com discos GPT (GUID Partition Table), como versões mais antigas de algumas ferramentas, como fdisk não suportavam GPT.

Detetando um tamanho de disco alterado

Se um disco de dados foi expandido sem tempo de inatividade usando o procedimento mencionado anteriormente, o tamanho do disco não será alterado até que o dispositivo seja verificado novamente, o que normalmente só acontece durante o processo de inicialização. Essa nova varredura pode ser chamada sob demanda com o seguinte procedimento. Neste exemplo, detetamos usando os métodos neste documento que o disco de dados está atualmente /dev/sda e foi redimensionado de 256 GiB para 512 GiB.

  1. Identifique o tamanho atualmente reconhecido na primeira linha de saída de fdisk -l /dev/sda

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. Insira um 1 caractere no arquivo de nova varredura para este dispositivo. Observe a referência ao sda, isso mudaria se um dispositivo de disco diferente fosse redimensionado.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. Verifique se o novo tamanho do disco foi reconhecido

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

O restante deste artigo usa o disco do sistema operacional para obter exemplos do procedimento para aumentar o tamanho de um volume no nível do sistema operacional. Se o disco expandido for um disco de dados, use a orientação anterior para identificar o dispositivo de disco de dados e siga estas instruções como diretriz, substituindo o dispositivo de disco de dados (por exemplo /dev/sda), números de partição, nomes de volume, pontos de montagem e formatos de sistema de arquivos, conforme necessário.

Todas as orientações do sistema operacional Linux devem ser vistas como genéricas e podem ser aplicadas em qualquer distribuição, mas geralmente correspondem às convenções do editor do mercado nomeado. Consulte os documentos da Red Hat para obter os requisitos do pacote em qualquer distribuição que alegue compatibilidade com a Red Hat, como CentOS e Oracle.

Aumentar o tamanho do disco do SO

As instruções a seguir se aplicam a distribuições Linux endossadas.

Nota

Antes de continuar, faça uma cópia de backup completa da sua VM ou, no mínimo, tire um instantâneo do disco do seu sistema operacional.

No Ubuntu 16.x e nas versões mais recentes, a partição de raiz do disco de SO e dos sistemas de ficheiros será automaticamente expandida para utilizar todo o espaço contíguo livre no disco de raiz pelo cloud-init, desde que exista um pouco de espaço livre para a operação de redimensionamento. Para esta circunstância, a sequência é simplesmente

  1. Aumentar o tamanho do disco do SO conforme detalhado anteriormente
  2. Reinicie a VM e, em seguida, acesse a VM usando a conta de usuário raiz .
  3. Verifique se o disco do sistema operacional agora exibe um tamanho maior do sistema de arquivos.

Como mostrado no exemplo a seguir, o disco do sistema operacional foi redimensionado do portal para 100 GB. O sistema de arquivos /dev/sda1 montado agora / exibe 97 GB.

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

Expansão sem tempo de inatividade Suporte clássico a SKU de VM

Se você estiver usando uma SKU de VM clássica, ela pode não suportar a expansão de discos sem tempo de inatividade.

Use o seguinte script do PowerShell para determinar com quais SKUs de VM ele está disponível:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}