Adición de un disco a una máquina virtual de Linux

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

En este artículo se muestra cómo conectar un disco persistente a la máquina virtual para que se puedan conservar los datos, incluso si la máquina virtual se vuelve a aprovisionar por mantenimiento o cambio de tamaño.

Conexión de un nuevo disco a una máquina virtual

Si quiere agregar un nuevo disco de datos en la VM, use el comando az vm disk attach con el parámetro --new. Si la máquina virtual está en una zona de disponibilidad, el disco se crea automáticamente en la misma zona que la máquina virtual. Para obtener más información, consulte Introducción a las zonas de disponibilidad. En el ejemplo siguiente se crea un disco denominado myDataDisk que tiene un tamaño de 50 Gb:

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

Menor latencia

En las regiones seleccionadas, se ha reducido la latencia de conexión de disco, por lo que verá una mejora de hasta un 15 %. Esto es útil si tiene conmutaciones por error planeadas o no planeadas entre máquinas virtuales, va a escalar la carga de trabajo o si ejecuta una carga de trabajo con estado a gran escala, como Azure Kubernetes Service. Sin embargo, esta mejora se limita al comando explícito de conexión de disco, az vm disk attach. No verá la mejora del rendimiento si llama a un comando que pueda realizar implícitamente una conexión, como az vm update. No es necesario realizar otra acción además de llamar al comando de conexión explícito para ver esta mejora.

La menor latencia está disponible actualmente en todas las regiones públicas, excepto en:

  • Centro de Canadá
  • Centro de EE. UU.
  • Este de EE. UU.
  • Este de EE. UU. 2
  • Centro-sur de EE. UU.
  • Oeste de EE. UU. 2
  • Norte de Alemania
  • JIO del Oeste de la India
  • Norte de Europa
  • Oeste de Europa

un disco existente

Para conectar un disco existente, busque el identificador del disco y páselo al comando az vm disk attach. El ejemplo siguiente consulta un disco llamado myDataDisk en myResourceGroup y, a continuación, lo asocia a la máquina virtual 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

Formato y montaje del disco

Para la partición, el formato y el montaje del disco nuevo para que la máquina virtual con Linux pueda usarlo, necesita SSH en la VM. Para más información, consulte Creación de claves SSH en Linux y Mac para máquinas virtuales de Linux en Azure. El ejemplo siguiente se conecta a una máquina virtual con la dirección IP pública 10.123.123.25 y el nombre de usuario azureuser:

ssh azureuser@10.123.123.25

Buscar el disco

Una vez que lo conecte a la máquina virtual, busque el disco. En este ejemplo, se usa lsblk para enumerar los discos.

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

La salida es similar a la del ejemplo siguiente:

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

Aquí, sdc es el disco que queremos, porque es de 50 GB. Si agrega varios discos y no está seguro de qué disco se basa solo en el tamaño, puede ir a la página de la máquina virtual en el portal, seleccionar Discos y comprobar el número LUN del disco en Discos de datos. Compare el número LUN del portal con el último número de la parte HTCL de la salida, que es el LUN. Otra opción es enumerar el contenido del /dev/disk/azure/scsi1 directorio:

ls -l /dev/disk/azure/scsi1

La salida debe ser similar a la del siguiente ejemplo:

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

Formato del disco

Formatee el disco con parted. Si el tamaño del disco es de 2 tebibytes (TiB), o superior, deberá usar particiones GPT, mientras que si es menor, podrá usar particiones MBR o GPT.

Nota

Se recomienda usar la versión más reciente de parted que esté disponible para su distribución. Si el tamaño del disco es de 2 tebibytes (TiB) o superior, debe usar la creación de particiones de GPT. Si el tamaño del disco es de menos de 2 TiB, puede usar la creación de particiones de MBR o GPT.

En el ejemplo siguiente se usa parted en /dev/sdc, que es la ubicación en la que normalmente estará el primer disco de datos de la mayoría de las máquinas virtuales. Reemplace sdc por la opción correcta para el disco. También vamos a formatearlo con el sistema de archivos XFS.

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

Use la utilidad partprobe para garantizar que el kernel reconozca inmediatamente la nueva partición y el sistema de archivos. Si no se usa partprobe, los comandos blkid o lslbk no podrán devolver de forma inmediata el UUID del nuevo sistema de archivos.

Montaje del disco

Ahora, cree un directorio para montar el sistema de archivos mediante mkdir. El ejemplo siguiente permite crear un directorio en /datadrive:

sudo mkdir /datadrive

A continuación, use mount para montar el sistema de archivos. En el ejemplo siguiente, se monta la partición /dev/sdc1 en el punto de montaje /datadrive:

sudo mount /dev/sdc1 /datadrive

Hacer persistente el montaje

Para asegurarse de que la unidad se vuelve a montar automáticamente después de reiniciar, debe agregarse al archivo /etc/fstab. Además, se recomienda encarecidamente usar el UUID (identificador único global) en /etc/fstab para hacer referencia a la unidad, en lugar de solo al nombre del dispositivo (por ejemplo, /dev/sdc1). Si el SO detecta un error de disco durante el arranque, con el UUID se evita que se monte el disco incorrecto en una ubicación especificada. A los discos de datos restantes se les asignarán después esos mismos identificadores de dispositivo. Para buscar el UUID de la unidad nueva, use la utilidad blkid:

sudo blkid

El resultado es similar al ejemplo siguiente:

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

Nota

La edición incorrecta del archivo /etc/fstab puede tener como resultado un sistema que no se pueda arrancar. Si no está seguro, consulte la documentación de distribución para obtener información sobre cómo editar correctamente ese archivo. También se recomienda realizar una copia de seguridad del archivo /etc/fstab antes de editarlo.

Después abra el archivo /etc/fstab en un editor de texto. Agregue una línea al final del archivo, y use el valor de UUID para el dispositivo /dev/sdc1 que se creó en los pasos anteriores y el punto de montaje /datadrive. Con el ejemplo de este artículo, la nueva línea tendría el siguiente aspecto:

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

Cuando haya terminado de editar el archivo, guárdelo y cierre el editor.

Como alternativa, puede ejecutar el siguiente comando para agregar el disco al /etc/fstab archivo:

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

Nota

Después, la eliminación de un disco de datos sin editar fstab podría provocar un error en el inicio de la máquina virtual. La mayoría de las distribuciones proporcionan las opciones de fstab nofail y/o nobootwait. Estas opciones permiten que el sistema arranque incluso si no se monta el disco en el momento del arranque. Consulte la documentación de su distribución para obtener más información sobre estos parámetros.

La opción nofail garantiza que la máquina virtual se inicia incluso si el sistema de archivos está dañado o el disco no existe en tiempo de arranque. Sin esta opción, puede encontrarse con el comportamiento que se describe en Cannot SSH to Linux VM due to FSTAB errors (No se puede conectar mediante SSH a una máquina virtual Linux debido a errores de FSTAB).

La consola serie de máquina virtual de Azure puede usarse para el acceso de consola a la máquina virtual si al modificar fstab se ha producido un error de arranque. Puede encontrar más información en la documentación de la consola serie.

Compatibilidad de TRIM/UNMAP con Linux en Azure

Algunos kernels de Linux admiten operaciones TRIM/UNMAP para descartar bloques no usados del disco. Esta característica es especialmente útil para informar a Azure de que las páginas eliminadas ya no son válidas y se pueden descartar. Esta característica puede ahorrar dinero en los discos que se facturan en función de la cantidad de almacenamiento consumido, tales como los discos estándar no administrados y las instantáneas de disco.

Hay dos maneras de habilitar la compatibilidad con TRIM en su máquina virtual Linux. Como es habitual, consulte la documentación de distribución para ver el enfoque recomendado:

  • Use la opción de montaje discard en /etc/fstab, por ejemplo:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • En algunos casos, la opción discard podría tener afectar al rendimiento. Como alternativa, puede ejecutar el comando fstrim manualmente desde la línea de comandos o agregarlo a su crontab para ejecutar con regularidad:

sudo apt install util-linux
sudo fstrim /datadrive

Solución de problemas

Al agregar discos de datos a una máquina virtual Linux, puede encontrar errores si un no existe un disco en LUN 0. Si va a agregar un disco manualmente mediante el comando az vm disk attach -new y especifica un LUN (--lun), en lugar de permitir que la plataforma Azure determine el LUN adecuado, asegúrese de que un disco existe o existirá en LUN 0.

Considere el ejemplo siguiente que muestra un fragmento de código de salida de 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 

Los dos discos de datos existen en LUN 0 y LUN 1 (la primera columna de la salida lsscsi detalla [host:channel:target:lun]). Ambos discos deben ser accesibles desde la VM. Si ha especificado manualmente el primer disco que se va a agregar en LUN 1 y el segundo disco en LUN 2, es posible que no vea los discos correctamente desde la máquina virtual.

Nota

El valor host de Azure es 5 en estos ejemplos, pero puede variar en función del tipo de almacenamiento que se seleccione.

Este comportamiento de disco no es un problema de Azure, sino la forma en la que el kernel de Linux cumple las especificaciones de SCSI. Cuando el kernel de Linux analiza el bus SCSI para los dispositivos conectados, un dispositivo debe encontrarse en LUN 0 para que el sistema siga analizando dispositivos adicionales. De esta forma:

  • Revise la salida de lsscsi después de agregar un disco de datos para comprobar que tiene un disco en LUN 0.
  • Si el disco no aparece correctamente en la máquina virtual, compruebe que existe el disco en LUN 0.

Pasos siguientes

  • Revise las recomendaciones para optimizar el rendimiento de la máquina Linux para asegurarse de que la máquina virtual Linux está configurada correctamente.
  • Expanda la capacidad de almacenamiento mediante la incorporación de más discos y configure RAID para obtener un rendimiento adicional.