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 \
   --disk 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 --disk $diskId

Conexión a la máquina virtual con Linux para montar el nuevo discoConnect to the Linux VM to mount the new 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. En el siguiente ejemplo se realiza la conexión a una máquina virtual con la entrada DNS pública de mypublicdns.westus.cloudapp.azure.com con el nombre de usuario azureuser:The following example connects to a VM with the public DNS entry of mypublicdns.westus.cloudapp.azure.com with the username azureuser:

ssh azureuser@mypublicdns.westus.cloudapp.azure.com

Una vez conectado a la máquina virtual, está listo para conectar un disco.Once connected to your VM, you're ready to attach a disk. Primero, busquemos el disco con dmesg (el método usado para detectar el nuevo disco puede variar).First, find the disk using dmesg (the method you use to discover your new disk may vary). En el ejemplo siguiente se usa dmesg para filtrar por los discos SCSI:The following example uses dmesg to filter on SCSI disks:

dmesg | grep SCSI

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

[    0.294784] SCSI subsystem initialized
[    0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    7.110271] sd 2:0:0:0: [sda] Attached SCSI disk
[    8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk
[ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI disk

En este caso, sdc es el disco que queremos.Here, sdc is the disk that we want. Particionamos el disco con fdisk, lo convertimos en un disco principal en la partición 1 y aceptamos los demás valores predeterminados.Partition the disk with fdisk, make it a primary disk on partition 1, and accept the other defaults. En el ejemplo siguiente se inicia el proceso fdisk en /dev/sdc:The following example starts the fdisk process on /dev/sdc:

sudo fdisk /dev/sdc

Use el comando n para agregar una nueva partición.Use the n command to add a new partition. En este ejemplo, también elegimos p para una partición principal y aceptamos el resto de los valores predeterminados.In this example, we also choose p for a primary partition and accept the rest of the default values. El resultado será similar al ejemplo siguiente:The output will be similar to the following example:

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2a59b123.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Para imprimir la tabla de particiones, escriba p y luego use w para escribir la tabla en el disco y salga.Print the partition table by typing p and then use w to write the table to disk and exit. El resultado debería similar al ejemplo siguiente:The output should look similar to the following example:

Command (m for help): p

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2a59b123

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Ahora, escriba un sistema de archivos en la partición con el comando mkfs.Now, write a file system to the partition with the mkfs command. Especifique el tipo de sistema de archivos y el nombre del dispositivo.Specify your filesystem type and the device name. En el ejemplo siguiente se crea un sistema de archivos ext4 en la partición /dev/sdc1 que se creó en los pasos anteriores:The following example creates an ext4 filesystem on the /dev/sdc1 partition that was created in the preceding steps:

sudo mkfs -t ext4 /dev/sdc1

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

mke2fs 1.42.9 (4-Feb-2014)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Ahora, cree un directorio para montar el sistema de archivos mediante mkdir.Now, create a directory to mount the file system using mkdir. En el ejemplo se crea 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

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 encarecidamente que se use 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 -i blkid

La salida es similar a la siguiente:The output looks similar to the following example:

/dev/sda1: UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="ext4"

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 vi /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 siguiente línea 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   ext4   defaults,nofail   1   2

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

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   ext4   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 azure 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 azure 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 estar accesibles desde la máquina virtual.Both disks should be accessbile 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