Expandir discos rígidos virtuais em uma VM do Linux
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis
Esse artigo aborda a expansão de discos do sistema operacional e discos de dados para uma máquina virtual (VM) Linux. Você pode adicionar discos de dados para obter mais espaço de armazenamento e também pode expandir um disco de dados existente. O tamanho padrão do disco rígido virtual do sistema operacional (SO) é geralmente de 30 GB em uma VM do Linux no Azure. Este artigo aborda a expansão de discos do sistema operacional ou discos de dados. Não é possível expandir o tamanho dos volumes com faixas.
Esse disco de sistema operacional tem uma capacidade máxima de 4.095 GiB. No entanto, muitos sistemas operacionais são particionados com um 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, considere anexar discos de dados para armazenamento de dados. Se precisar armazenar dados no disco do sistema operacional e necessitar de espaço extra, converta-o para a Tabela de Partição GUID (GPT).
Aviso
Antes de executar operações de expansão de disco, sempre certifique-se de que o sistema de arquivos esteja em um estado íntegro, o tipo de tabela de partição de disco (GPT ou MBR) dê suporte ao novo tamanho e os dados sejam armazenados em backup. Para obter mais informações, consulte o Início rápido de Backup do Azure.
Identificar o objeto do disco de dados do Azure no sistema operacional
Ao 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 é 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 comandodf
.
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, por exemplo, é possível ver que o sistema de arquivos /opt/db/data
está quase cheio e está contido na partição /dev/sdd1
. A saída de df
mostra o caminho do dispositivo, seja o disco montado usando o caminho do dispositivo ou o UUID (preferencial) no fstab. Observe também a coluna “Tipo”, que indica o formato do sistema de arquivos. O formato será importante mais tarde.
Agora localize o LUN que se correlaciona com /dev/sdd
examinando o conteúdo de /dev/disk/azure/scsi1
. Ao procurar no portal do Azure, a saída do comando ls
a seguir mostra que o dispositivo conhecido como /dev/sdd
no sistema operacional Linux está localizado em LUN1.
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
Expandir sem tempo de inatividade
Você pode expandir seus discos gerenciados sem desalocar sua VM. A configuração do cache de host do disco não altera se você pode ou não expandir um disco de dados sem desalocar sua VM.
Este recurso tem as seguintes limitações:
- Tem suporte apenas para discos de dados.
- Se um disco HDD Standard, SSD Standard ou SSD Premium tiver 4 TiB ou menos, desaloque sua VM e desconecte o disco antes de expandi-lo para mais de 4 TiB. Se um desses tipos de disco já for maior que 4 TiB, você poderá expandi-lo sem desalocar a VM e desanexar o disco. Isso não se aplica ao SSD Premium v2 ou Discos Ultra.
- Sem suporte para discos compartilhados.
- Instale e use um dos dois:
- A CLI do Azure mais recente
- O módulo mais recente do Azure PowerShell
- O Portal do Azure
- Ou um modelo do Azure Resource Manager com uma versão de API que seja
2021-04-01
ou mais recente.
- Não disponível em algumas VMs clássicas. Use esse script para obter uma lista de SKUs de VM clássica que dão suporte à expansão sem tempo de inatividade.
Expandir com o Disco Ultra e o SSD Premium v2
Expandir os Discos Ultra e SSD Premium v2 tem as seguintes limitações adicionais:
- Você não pode expandir um disco enquanto uma cópia em segundo plano de dados também estiver ocorrendo nesse disco, como quando um disco está sendo hidratado de instantâneos.
- Você não pode expandir uma VM que esteja usando controladores NVMe para Discos Ultra ou SSD Premium v2 sem tempo de inatividade.
Disponibilidade regional
O redimensionamento de discos Ultra e discos Premium SSD v2 está disponível atualmente em todas as regiões com suporte do SSD Premium v2 e Ultra, exceto as seguintes:
- Oeste dos EUA 2
- Europa Ocidental
- Leste dos EUA
Expandir disco gerenciado do Azure
Verifique se você tem o CLI do Azure mais recente do Azure instalada e está conectada a uma conta do Azure usando az login.
Este artigo requer uma VM existente no Azure com, pelo menos, um disco de dados anexado e preparado. Se você ainda não tem uma VM que possa ser usada, consulte Criar e preparar uma VM com discos de dados.
Nos exemplos a seguir, substitua os nomes de parâmetro de exemplo, como myResourceGroup e myVM com seus próprios valores.
Importante
Se o seu disco atender aos requisitos em Expandir sem tempo de inatividade, ignore as etapas 1 e 3.
A redução de um disco existente não tem suporte e pode resultar em perda de dados.
Depois de expandir os discos, você precisará expandir o volume no sistema operacional para aproveitar o disco maior.
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 desaloca a VM chamada myVM no grupo de recursos chamado myResourceGroup:
az vm deallocate --resource-group myResourceGroup --name myVM
Observação
A VM deve ser desalocada para que o disco rígido virtual seja expandido. Parar a VM com
az vm stop
não libera os recursos do computador. Para liberar os recursos de computação, useaz vm deallocate
.Veja uma lista de discos gerenciados em um grupo de recursos com az disk list. 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,size:diskSizeGB,Tier:sku.tier}' \ --output table
Expanda o disco necessário com az disk update. O exemplo a seguir expande o disco gerenciado denominado myDataDisk para 200 GB:
az disk update \ --resource-group myResourceGroup \ --name myDataDisk \ --size-gb 200
Observação
Quando você expande um disco gerenciado, o tamanho atualizado é arredondado para o tamanho de disco gerenciado mais próximo. Para obter uma tabela dos tamanhos e níveis de disco gerenciados disponíveis, veja Entender a cobrança do Armazenamento em Disco do Azure.
Inicie a 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
Expanda uma partição de disco e o sistema de arquivos
Observação
Embora haja diversas ferramentas que podem ser usadas para realizar o redimensionamento de partição, as detalhadas no restante deste documento são as mesmas usadas por determinados processos automatizados, como cloud-init. Como descrito aqui, a ferramenta growpart
com o pacote gdisk
fornece compatibilidade universal com discos GGT (tabela de partição GUID), pois as versões mais antigas de algumas ferramentas, como fdisk
, não são compatíveis com GGT.
Detecção de 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 relatado não mudará até que o dispositivo seja verificado novamente, o que normalmente só acontece durante o processo de inicialização. Esse novo exame pode ser chamado sob demanda com o procedimento a seguir. Neste exemplo, descobrimos usando os métodos deste documento que o disco de dados está atualmente /dev/sda
e foi redimensionado de 256 GiB para 512 GiB.
Identificar o tamanho reconhecido no momento 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
Insira um caractere
1
no arquivo de novo exame para este dispositivo. Observe a referência o sda no exemplo. O identificador do disco mudaria se um dispositivo de disco diferente fosse redimensionado.echo 1 | sudo tee /sys/class/block/sda/device/rescan
Verifique se o novo tamanho do disco agora é 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 em 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 as diretrizes anteriores para identificar o dispositivo de disco de dados e siga estas instruções como diretrizes, substituindo o dispositivo do disco de dados (por exemplo /dev/sda
), os números de partição, os nomes de volume, os pontos de montagem e os formatos de sistema de arquivos, conforme o necessário.
Todas as diretrizes 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 nomeado do marketplace. Consulte os documentos da Red Hat para os requisitos de pacotes em qualquer distribuição baseada na Red Hat ou que reivindique compatibilidade com a Red Hat.
Aumentar o tamanho do disco do sistema operacional
As instruções a seguir se aplicam a distribuições Linux endossadas.
Observação
Antes de continuar, faça uma cópia de backup completo da VM ou, no mínimo, faça um instantâneo do disco do sistema operacional.
No Ubuntu 16.x e versões mais recentes, a partição root do disco do SO e os sistemas de arquivos são automaticamente expandidos para utilizar todo o espaço contíguo livre no disco root pelo cloud-init, desde que haja um pequeno espaço livre para a operação de redimensionamento. Nesse caso, a sequência é simplesmente
- Aumentar o tamanho do disco do SO, conforme detalhado anteriormente
- Reinicie a VM e a acesse usando a conta de usuário raiz.
- Verifique se o disco do sistema operacional agora exibe um tamanho maior do sistema de arquivos.
Conforme mostrado no exemplo a seguir, o disco do sistema operacional foi redimensionado do portal para 100 GB. O sistema de arquivos /dev/sda1 montado em / mostra agora 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 de suporte a SKU de VM clássica sem tempo de inatividade
Se você estiver usando uma SKU de VM clássica, talvez ela não dê suporte à 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
}
}
}