Expansión de discos duros virtuales en máquinas virtuales Linux

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para obtener más información, consulte la guía de fin de vida de CentOS.

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

En este artículo se describe cómo expandir discos administrados para una máquina virtual (VM) Linux. Tiene la opción de agregar discos de datos para proporcionar espacio de almacenamiento adicional, y también puede expandir un disco de datos existente. Normalmente, el tamaño predeterminado del disco duro virtual del sistema operativo (SO) es de 30 GB en una VM Linux en Azure. En este artículo se describe la expansión de discos del sistema operativo o discos de datos. No se puede expandir el tamaño de los volúmenes seccionados.

Un disco de sistema operativo tiene una capacidad máxima de 4,095 GiB. Sin embargo, muchos sistemas operativos están particionados con un registro de arranque maestro (MBR) de forma predeterminada. MBR limita el tamaño utilizable a 2 TiB. Si necesita más de 2 TiB, cree y adjunte discos de datos y utilícelos para el almacenamiento de datos. Si necesita almacenar datos en el disco del sistema operativo y requiere espacio adicional, conviértalo en una tabla de partición GUID (GPT).

Advertencia

Asegúrese siempre de que el sistema de archivos está en buen estado y de que el tipo de tabla de partición de disco (GPT o MBR) admite el nuevo tamaño, y no olvide hacer una copia de seguridad de los datos antes de realizar operaciones de expansión de disco. Para más información, consulte el inicio rápido de Azure Backup.

Identificación del objeto de disco de datos de Azure en el sistema operativo

En el caso de expandir un disco de datos cuando hay varios discos de datos presentes en la máquina virtual, puede ser difícil relacionar los LUN de Azure con los dispositivos Linux. Si el disco del sistema operativo necesita expansión, se etiqueta claramente en Azure Portal como disco del sistema operativo.

Empiece por identificar la relación entre el uso del disco, el punto de montaje y el dispositivo, con el comando df.

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

Aquí podemos ver, por ejemplo, que el sistema de archivos /opt/db/data está casi lleno, y se encuentra en la partición /dev/sdd1. La salida de df muestra la ruta de acceso del dispositivo independientemente de si el disco está montado por la ruta de acceso del dispositivo o el UUID (preferido) en fstab. Tome nota también de la columna Tipo, que indica el formato del sistema de archivos. Esto es importante más adelante.

Ahora busque el LUN que se correlaciona con /dev/sdd examinando el contenido de /dev/disk/azure/scsi1. La salida del siguiente comando ls muestra que el dispositivo conocido como /dev/sdd dentro del sistema operativo Linux se encuentra en LUN1 al mirar en Azure Portal.

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

Expansión de un disco administrado de Azure

Expandir sin tiempo de inactividad

Puede expandir los discos administrados sin desasignar la máquina virtual. La configuración de caché del host del disco no cambia si puede expandir o no un disco de datos sin desasignar la máquina virtual.

Esta característica tiene las siguientes limitaciones:

  • Solo se admite para discos de datos.
  • Si un disco es de 4 TiB o menos, debe desasignar la máquina virtual y desasociar el disco antes de expandirlo a más de 4 TiB. Si un disco ya tiene un tamaño superior a 4 TiB, puede expandirlo sin desasignar la máquina virtual y desasociar el disco.
  • No compatible con discos Ultra o Premium SSD v2.
  • No es compatible con discos compartidos.
  • Instale y use una de las opciones siguientes:
  • No está disponible en algunas máquinas virtuales clásicas. Use este script para obtener una lista de las SKU de máquina virtual clásica que admiten la expansión sin tiempo de inactividad.

Expandir el disco administrado de Azure

Asegúrese de que tiene instalada la versión más reciente de la CLI de Azure y de que ha iniciado sesión en una cuenta de Azure con az login.

En este artículo se requiere una máquina virtual existente en Azure con al menos un disco de datos adjunto y preparado. Si no dispone de una máquina virtual que pueda usar, consulte la sección sobre la creación y preparación de máquinas virtuales con discos de datos.

En los ejemplos siguientes, reemplace los nombres de parámetros de ejemplo, como myResourceGroup y myVM, con sus propios valores.

Importante

Si el disco cumple los requisitos de Expandir sin tiempo de inactividad, puede omitir los pasos 1 y 3.

  1. No se pueden realizar operaciones en los discos duros virtuales con la VM en ejecución. Desasigne la máquina virtual con az vm deallocate. En el ejemplo siguiente se desasigna la máquina virtual denominada "myVM" en el grupo de recursos myResourceGroup:

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

    Nota

    Debe desasignar la máquina virtual para expandir el disco duro virtual. Detener la VM con az vm stop no libera los recursos de proceso. Para liberar los recursos de proceso, use az vm deallocate.

  2. Vea la lista de discos administrados de un grupo de recursos con az disk list. En el ejemplo siguiente se muestra una lista de discos administrados del grupo de recursos denominado myResourceGroup:

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

    Expanda el disco necesario con az disk update. En el ejemplo siguiente se expande el disco administrado llamado myDataDisk a 200 GB:

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

    Nota

    Si expande un disco administrado, el tamaño actualizado se redondea al tamaño de disco administrado más próximo. Para consultar una tabla de los tamaños y las capas disponibles para discos administrados, vea Introducción a Azure Managed Disks: precios y facturación.

  3. Inicie la máquina virtual con az vm start. En el ejemplo siguiente se inicia la máquina virtual llamada myVM en el grupo de recursos llamado myResourceGroup:

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

Expansión de una partición de disco y del sistema de archivos

Nota

Aunque hay varias herramientas que se pueden usar para realizar el cambio de tamaño de la partición, las herramientas seleccionadas en este documento son las mismas que usan determinados procesos automatizados, como cloud-init. Tal y como está descrito, el uso de la growpart herramienta con el gdiskpaquete proporciona más compatibilidad universal con discos de tabla de particiones GUID (GPT), ya que las versiones anteriores de algunas herramientas como fdisk no eran compatibles con los GPT.

Detección de que ha cambiado el tamaño de un disco

Si se ha usado el procedimiento indicado para expandir un disco de datos sin tiempo de inactividad, el tamaño del disco no se cambiará hasta que se vuelva a examinar el dispositivo, lo que normalmente solo sucede durante el proceso de arranque. Este examen se puede llamar a petición con el procedimiento siguiente. En este ejemplo hemos detectado usando los métodos de este documento que el disco de datos es actualmente /dev/sda y que su tamaño ha cambiado de 256 a 512 GiB.

  1. Identifique el tamaño reconocido actualmente en la primera línea de salida 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. Inserte un carácter 1 en el archivo de nuevo examen de este dispositivo. Tenga en cuenta la referencia a sda, que cambiaría si se cambiara el tamaño de otro dispositivo de disco.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. Compruebe que se ha reconocido el nuevo tamaño de disco.

    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
    

En el resto de este artículo se usa el disco del sistema operativo para ver los ejemplos del procedimiento para aumentar el tamaño de un volumen en el nivel del sistema operativo. Si el disco expandido es de datos, use las instrucciones anteriores para identificar el dispositivo de disco de datos y siga esas instrucciones como guía, pero sustituya el dispositivo de disco de datos (por ejemplo /dev/sda), los números de partición, los nombres de volumen, los puntos de montaje y los formatos del sistema de archivos, según sea necesario.

Todas las instrucciones del sistema operativo Linux deben verse como genéricas y pueden aplicarse en cualquier distribución, pero generalmente coinciden con las convenciones del anunciante de Marketplace con nombre. Consulte los documentos de Red Hat pertinentes para conocer los requisitos del paquete en cualquier distribución que solicite compatibilidad con Red Hat, como CentOS y Oracle.

Aumento de tamaño del disco de SO

Las instrucciones siguientes se aplican a las distribuciones aprobadas por Linux.

Nota

Antes de continuar, haga una copia de seguridad completa de la VM o realice una instantánea del disco del sistema operativo.

Tanto en Ubuntu 16.x como en las versiones más recientes, la partición raíz del disco del sistema operativo y los sistemas de archivos se expandirán automáticamente para usar todo el espacio contiguo libre en el disco raíz por cloud-init, siempre que haya un poco de espacio libre para la operación de cambio de tamaño. Para esta circunstancia, la secuencia es simplemente:

  1. Incremente el tamaño del disco del SO según se detalló anteriormente.
  2. Reinicie la máquina virtual y, a continuación, acceda a la máquina virtual mediante la cuenta de usuario raíz.
  3. Compruebe que el disco de SO ahora presenta un tamaño mayor del sistema de archivos.

Como se muestra en el ejemplo siguiente, se ha cambiado el tamaño del disco de SO del portal a 100 GB. El sistema de archivos /dev/sda1 montado en / muestra ahora 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:~#

Expansión sin compatibilidad con la SKU de máquina virtual clásica sin tiempo de inactividad

Si usa una SKU de máquina virtual clásica, es posible que no admita la expansión de discos sin tiempo de inactividad.

Use el siguiente script de PowerShell para determinar con qué SKU de máquina virtual está disponible:

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