Adición de un disco a una máquina virtual de LinuxAdd a disk to a Linux VM

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.This article shows you how to attach a persistent disk to your VM so that you can preserve your data - even if your VM is reprovisioned due to maintenance or resizing.

Conexión de un nuevo disco a una máquina virtualAttach a new disk to a VM

Si quiere agregar un nuevo disco de datos en la VM, use el comando az vm disk attach con el parámetro --new.If you want to add a new, empty data disk on your VM, use the az vm disk attach command with the --new parameter. 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.If your VM is in an Availability Zone, the disk is automatically created in the same zone as the VM. Para obtener más información, consulte Introducción a las zonas de disponibilidad.For more information, see Overview of Availability Zones. En el ejemplo siguiente se crea un disco denominado myDataDisk que tiene un tamaño de 50 Gb:The following example creates a disk named myDataDisk that is 50 Gb in size:

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

un disco existenteAttach an existing disk

Para conectar un disco existente, busque el identificador del disco y páselo al comando az vm disk attach.To attach an existing disk, find the disk ID and pass the ID to the az vm disk attach command. El ejemplo siguiente consulta un disco llamado myDataDisk en myResourceGroup y, a continuación, lo asocia a la máquina virtual denominada myVM:The following example queries for a disk named myDataDisk in myResourceGroup, then attaches it to the VM named 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 discoFormat and mount the disk

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.To partition, format, and mount your new disk so your Linux VM can use it, SSH into your VM. Para más información, consulte Creación de claves SSH en Linux y Mac para máquinas virtuales de Linux en Azure.For more information, see How to use SSH with Linux on 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:The following example connects to a VM with the public IP address of 10.123.123.25 with the username azureuser:

ssh azureuser@10.123.123.25

Buscar el discoFind the disk

Una vez conectado a la máquina virtual, debe buscar el disco.Once connected to your VM, you need to find the disk. En este ejemplo, se usa lsblk para enumerar los discos.In this example, we are using lsblk to list the disks.

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

La salida es similar a la del ejemplo siguiente:The output is similar to the following example:

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.Here, sdc is the disk that we want, because it is 50G. Si no está seguro de qué disco se trata según 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.If you aren't sure which disk it is based on size alone, you can go to the VM page in the portal, select Disks, and check the LUN number for the disk under Data disks.

Formato del discoFormat the disk

Formatee el disco con parted. Si el tamaño del disco es de 2 tebibytes (TiB) u otro mayor, deberá usar la creación de particiones de GPT. Si es menor, podrá usar la de MBR o la de GPT.Format the disk with parted, if the disk size is 2 tebibytes (TiB) or larger then you must use GPT partitioning, if it is under 2TiB, then you can use either MBR or GPT partitioning.

Nota

Se recomienda usar la versión más reciente de parted que esté disponible para su distribución.It is recommended that you use the latest version parted that is available for your distro. Si el tamaño del disco es de 2 tebibytes (TiB) o superior, debe usar la creación de particiones de GPT.If the disk size is 2 tebibytes (TiB) or larger, you must use GPT partitioning. Si el tamaño del disco es de menos de 2 TiB, puede usar la creación de particiones de MBR o GPT.If disk size is under 2 TiB, then you can use either MBR or GPT partitioning.

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.The following example uses parted on /dev/sdc, which is where the first data disk will typically be on most VMs. Reemplace sdc por la opción correcta para el disco.Replace sdc with the correct option for your disk. También se formateará con el sistema de archivos XFS.We are also formatting it using the XFS filesystem.

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

Use la utilidad partprobe para garantizar que el kernel reconozca inmediatamente la nueva partición y el sistema de archivos.Use the partprobe utility to make sure the kernel is aware of the new partition and filesystem. Si no se usa partprobe, los comandos blkid o lslbk no podrán devolver de forma inmediata el UUID del nuevo sistema de archivos.Failure to use partprobe can cause the blkid or lslbk commands to not return the UUID for the new filesystem immediately.

Montaje del discoMount the disk

Ahora, cree un directorio para montar el sistema de archivos mediante mkdir.Now, create a directory to mount the file system using mkdir. El ejemplo siguiente permite crear un directorio en /datadrive:The following example creates a directory at /datadrive:

sudo mkdir /datadrive

A continuación, use mount para montar el sistema de archivos.Use mount to then mount the filesystem. En el ejemplo siguiente, se monta la partición /dev/sdc1 en el punto de montaje /datadrive:The following example mounts the /dev/sdc1 partition to the /datadrive mount point:

sudo mount /dev/sdc1 /datadrive

Hacer persistente el montajePersist the mount

Para asegurarse de que la unidad se vuelve a montar automáticamente después de reiniciar, debe agregarse al archivo /etc/fstab.To ensure that the drive is remounted automatically after a reboot, it must be added to the /etc/fstab file. Además, se recomienda usar el UUID (identificador único global) en /etc/fstab para hacer referencia a la unidad, en lugar de solo el nombre del dispositivo (por ejemplo, /dev/sdc1).It is also highly recommended that the UUID (Universally Unique Identifier) is used in /etc/fstab to refer to the drive rather than just the device name (such as, /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.If the OS detects a disk error during boot, using the UUID avoids the incorrect disk being mounted to a given location. A los discos de datos restantes se les asignarán después esos mismos identificadores de dispositivo.Remaining data disks would then be assigned those same device IDs. Para buscar el UUID de la unidad nueva, use la utilidad blkid:To find the UUID of the new drive, use the blkid utility:

sudo blkid

El resultado es similar al ejemplo siguiente:The output looks similar to the following example:

/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.Improperly editing the /etc/fstab file could result in an unbootable system. Si no está seguro, consulte la documentación de distribución para obtener información sobre cómo editar correctamente ese archivo.If unsure, refer to the distribution's documentation for information on how to properly edit this file. También se recomienda realizar una copia de seguridad del archivo /etc/fstab antes de editarlo.It is also recommended that a backup of the /etc/fstab file is created before editing.

Después, abra el archivo /etc/fstab en un editor de texto como se indica a continuación:Next, open the /etc/fstab file in a text editor as follows:

sudo nano /etc/fstab

En este ejemplo, use el valor de UUID para el dispositivo /dev/sdc1 que se creó en los pasos anteriores y el punto de montaje /datadrive.In this example, use the UUID value for the /dev/sdc1 device that was created in the previous steps, and the mountpoint of /datadrive. Agregue la línea siguiente al final del archivo /etc/fstab:Add the following line to the end of the /etc/fstab file:

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

En este ejemplo, usamos el editor nano, así que cuando haya terminado de editar el archivo, use Ctrl+O para escribir el archivo y Ctrl+X para salir del editor.In this example, we are using the nano editor, so when you are done editing the file, use Ctrl+O to write the file and Ctrl+X to exit the editor.

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.Later removing a data disk without editing fstab could cause the VM to fail to boot. La mayoría de las distribuciones proporcionan las opciones de fstab nofail y/o nobootwait.Most distributions provide either the nofail and/or nobootwait fstab options. Estas opciones permiten que el sistema arranque incluso si no se monta el disco en el momento del arranque.These options allow a system to boot even if the disk fails to mount at boot time. Consulte la documentación de su distribución para obtener más información sobre estos parámetros.Consult your distribution's documentation for more information on these parameters.

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.The nofail option ensures that the VM starts even if the filesystem is corrupt or the disk does not exist at boot time. 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).Without this option, you may encounter behavior as described in Cannot SSH to Linux VM due to FSTAB errors

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.The Azure VM Serial Console can be used for console access to your VM if modifying fstab has resulted in a boot failure. Puede encontrar más información en la documentación de la consola serie.More details are available in the Serial Console documentation.

Compatibilidad de TRIM/UNMAP con Linux en AzureTRIM/UNMAP support for Linux in Azure

Algunos kernels de Linux admiten operaciones TRIM/UNMAP para descartar bloques no usados del disco.Some Linux kernels support TRIM/UNMAP operations to discard unused blocks on the disk. Esta característica es especialmente útil en el almacenamiento estándar para informar a Azure de que las páginas eliminadas ya no son válidas y se pueden descartar. Además, le permitirá ahorrar dinero si crea archivos de gran tamaño y luego los elimina.This feature is primarily useful in standard storage to inform Azure that deleted pages are no longer valid and can be discarded, and can save money if you create large files and then delete them.

Hay dos maneras de habilitar la compatibilidad con TRIM en su máquina virtual Linux.There are two ways to enable TRIM support in your Linux VM. Como es habitual, consulte la documentación de distribución para ver el enfoque recomendado:As usual, consult your distribution for the recommended approach:

  • Use la opción de montaje discard en /etc/fstab, por ejemplo:Use the discard mount option in /etc/fstab, for example:

    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.In some cases, the discard option may have performance implications. Como alternativa, puede ejecutar el comando fstrim manualmente desde la línea de comandos o agregarlo a su crontab para ejecutar con regularidad:Alternatively, you can run the fstrim command manually from the command line, or add it to your crontab to run regularly:

    UbuntuUbuntu

    sudo apt-get install util-linux
    sudo fstrim /datadrive
    

    RHEL/CentOSRHEL/CentOS

    sudo yum install util-linux
    sudo fstrim /datadrive
    

Solución de problemasTroubleshooting

Al agregar discos de datos a una máquina virtual Linux, puede encontrar errores si un no existe un disco en LUN 0.When adding data disks to a Linux VM, you may encounter errors if a disk does not exist at 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.If you are adding a disk manually using the az vm disk attach -new command and you specify a LUN (--lun) rather than allowing the Azure platform to determine the appropriate LUN, take care that a disk already exists / will exist at LUN 0.

Considere el ejemplo siguiente que muestra un fragmento de código de salida de lsscsi:Consider the following example showing a snippet of the output from 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]).The two data disks exist at LUN 0 and LUN 1 (the first column in the lsscsi output details [host:channel:target:lun]). Ambos discos deben ser accesibles desde la VM.Both disks should be accessible from within the 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.If you had manually specified the first disk to be added at LUN 1 and the second disk at LUN 2, you may not see the disks correctly from within your VM.

Nota

El valor host de Azure es 5 en estos ejemplos, pero puede variar en función del tipo de almacenamiento que se seleccione.The Azure host value is 5 in these examples, but this may vary depending on the type of storage you select.

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.This disk behavior is not an Azure problem, but the way in which the Linux kernel follows the SCSI specifications. 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.When the Linux kernel scans the SCSI bus for attached devices, a device must be found at LUN 0 in order for the system to continue scanning for additional devices. De esta forma:As such:

  • Revise la salida de lsscsi después de agregar un disco de datos para comprobar que tiene un disco en LUN 0.Review the output of lsscsi after adding a data disk to verify that you have a disk at LUN 0.
  • Si el disco no aparece correctamente en la máquina virtual, compruebe que existe el disco en LUN 0.If your disk does not show up correctly within your VM, verify a disk exists at LUN 0.

Pasos siguientesNext steps