Aggiungere un disco a una VM LinuxAdd a disk to a Linux VM

Questo articolo illustra come collegare un disco persistente alla macchina virtuale per poter mantenere i dati, anche se si effettua di nuovo il provisioning della macchina virtuale per manutenzione o ridimensionamento.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.

Collegare un nuovo disco a una VMAttach a new disk to a VM

Se si vuole aggiungere un nuovo disco dati vuoto nella macchina virtuale, usare il comando az vm disk attach con il parametro --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. Se la macchina virtuale è in una zona di disponibilità, il disco viene creato automaticamente nella stessa area della macchina virtuale.If your VM is in an Availability Zone, the disk is automatically created in the same zone as the VM. Per ulteriori informazioni, vedere Overview of Availability Zones (Panoramica delle zone di disponibilità in Azure).For more information, see Overview of Availability Zones. L'esempio seguente crea un disco denominato myDataDisk da 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

Collegare un disco esistenteAttach an existing disk

Per collegare un disco esistente, individuare l'ID del disco e trasmetterlo 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. Nell'esempio seguente viene proposta una query per un disco denominato myDataDisk in myResourceGroup, che viene collegato alla macchina virtuale denominata 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

Connettersi alla VM Linux per montare il nuovo discoConnect to the Linux VM to mount the new disk

È necessario SSH nella macchina virtuale per partizionare, formattare e montare il nuovo disco in modo che la macchina virtuale di Linux possa usarlo.To partition, format, and mount your new disk so your Linux VM can use it, SSH into your VM. Per altre informazioni, vedere How to use SSH with Linux on Azure (Come usare SSH con Linux in Azure).For more information, see How to use SSH with Linux on Azure. Nell'esempio seguente viene eseguito il collegamento a una macchina virtuale con la voce DNS pubblica di mypublicdns.westus.cloudapp.azure.com con il nome utente 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 volta connessi alla macchina virtuale, si è pronti per collegare un disco.Once connected to your VM, you're ready to attach a disk. Trovare prima il disco usando dmesg. Il metodo usato per trovare il nuovo disco può variare.First, find the disk using dmesg (the method you use to discover your new disk may vary). L'esempio seguente usa dmesg per applicare un filtro ai dischi SCSI:The following example uses dmesg to filter on SCSI disks:

dmesg | grep SCSI

L'output è simile all'esempio seguente: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

In questo caso, sdc è il disco interessato.Here, sdc is the disk that we want. Eseguire la partizione del disco con fdisk, renderlo un disco principale nella partizione 1 e accettare le altre impostazioni predefinite.Partition the disk with fdisk, make it a primary disk on partition 1, and accept the other defaults. Nell'esempio seguente viene avviato il processo fdisk su dev/sdc:The following example starts the fdisk process on /dev/sdc:

sudo fdisk /dev/sdc

Usare il comando n per aggiungere una nuova partizione.Use the n command to add a new partition. In questo esempio si sceglie il comando p anche per una partizione primaria e si accettano gli altri valori predefiniti.In this example, we also choose p for a primary partition and accept the rest of the default values. L'output sarà simile all'esempio seguente: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

Stampare la tabella delle partizioni digitando p e usare w per scrivere la tabella sul disco e uscire.Print the partition table by typing p and then use w to write the table to disk and exit. L'output dovrebbe essere simile all'esempio seguente: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.

A questo punto, scrivere un file system nella partizione con il comando mkfs.Now, write a file system to the partition with the mkfs command. Specificare il tipo di file system e il nome del dispositivo.Specify your filesystem type and the device name. Nell'esempio seguente viene creato un file system ext4 nella partizione dev/sdc1 creata nei passaggi precedenti: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

L'output è simile all'esempio seguente: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

Creare ora una directory per montare il nuovo file system usando mkdir.Now, create a directory to mount the file system using mkdir. L'esempio seguente crea una directory in /datadrive:The following example creates a directory at /datadrive:

sudo mkdir /datadrive

Usare mount quindi per installare il file system.Use mount to then mount the filesystem. Nell'esempio seguente viene installata la partizione /dev/sdc1 nel punto di montaggio /datadrive:The following example mounts the /dev/sdc1 partition to the /datadrive mount point:

sudo mount /dev/sdc1 /datadrive

Per assicurarsi che l'unità venga rimontata automaticamente dopo un riavvio, è necessario aggiungerla al file /etc/fstab.To ensure that the drive is remounted automatically after a reboot, it must be added to the /etc/fstab file. È anche consigliabile che l'UUID (Universally Unique IDentifier) usato in /etc/fstab faccia riferimento all'unità anziché al solo nome del dispositivo, ad esempio /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). Se il sistema operativo rileva un errore del disco durante l'avvio, l'uso di UUID evita che venga montato il disco non corretto in una posizione specificata.If the OS detects a disk error during boot, using the UUID avoids the incorrect disk being mounted to a given location. Ai dischi dati rimanenti verrebbero quindi assegnati gli stessi ID di dispositivo.Remaining data disks would then be assigned those same device IDs. Per individuare l'UUID della nuova unità, usare l'utilità blkid:To find the UUID of the new drive, use the blkid utility:

sudo -i blkid

L'output è simile al seguente esempio: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

Se il file /etc/fstab non viene modificato in modo corretto, il sistema potrebbe diventare non avviabile.Improperly editing the /etc/fstab file could result in an unbootable system. In caso di dubbi, fare riferimento alla documentazione della distribuzione per informazioni su come modificare correttamente questo file.If unsure, refer to the distribution's documentation for information on how to properly edit this file. È inoltre consigliabile creare una copia di backup del file /etc/fstab prima della modifica.It is also recommended that a backup of the /etc/fstab file is created before editing.

Successivamente, aprire il file /etc/fstab in un editor di testo, come segue:Next, open the /etc/fstab file in a text editor as follows:

sudo vi /etc/fstab

In questo esempio viene usato il valore UUID del dispositivo /dev/sdc1 creato nei passaggi precedenti e il punto di montaggio di /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. Alla fine del file /etc/fstab aggiungere la riga di codice seguente: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

Se si rimuove successivamente un disco dati senza modificare fstab, è possibile che si verifichi un errore di avvio della VM.Later removing a data disk without editing fstab could cause the VM to fail to boot. La maggior parte delle distribuzioni specifica le opzioni fstab nofail e/o nobootwait.Most distributions provide either the nofail and/or nobootwait fstab options. Queste opzioni consentono l'avvio di un sistema anche se il montaggio del disco non riesce in fase di avvio.These options allow a system to boot even if the disk fails to mount at boot time. Per altre informazioni su questi parametri, consultare la documentazione della distribuzione.Consult your distribution's documentation for more information on these parameters.

L'opzione nofail garantisce che l'avvio della VM anche se il file system è danneggiato o se non è presente il disco in fase di avvio.The nofail option ensures that the VM starts even if the filesystem is corrupt or the disk does not exist at boot time. Senza questa opzione potrebbero verificarsi comportamenti come quelli descritti in Cannot SSH to Linux VM due to FSTAB errors (Impossibile eseguire una connessione SSH a VM Linux a causa di errori FSTAB).Without this option, you may encounter behavior as described in Cannot SSH to Linux VM due to FSTAB errors

Supporto delle funzioni TRIM/UNMAP per Linux in AzureTRIM/UNMAP support for Linux in Azure

Alcuni kernel di Linux supportano operazioni TRIM/UNMAP allo scopo di rimuovere i blocchi inutilizzati sul disco.Some Linux kernels support TRIM/UNMAP operations to discard unused blocks on the disk. Nel servizio di archiviazione standard, questa caratteristica è particolarmente utile per informare Azure che le pagine eliminate non sono più valide e possono essere rimosse, permettendo di risparmiare denaro se si creano file di grandi dimensioni per eliminarli successivamente.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.

Esistono due modi per abilitare la funzione TRIM in una VM Linux.There are two ways to enable TRIM support in your Linux VM. Come di consueto, consultare la documentazione della distribuzione per stabilire l'approccio consigliato:As usual, consult your distribution for the recommended approach:

  • Usare l'opzione di montaggio discard in /etc/fstab, ad esempio:Use the discard mount option in /etc/fstab, for example:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   ext4   defaults,discard   1   2
    
  • In alcuni casi l'opzione discard può avere implicazioni sulle prestazioni.In some cases, the discard option may have performance implications. In alternativa, è possibile eseguire il comando fstrim manualmente dalla riga di comando oppure aggiungerlo a crontab per eseguirlo a intervalli regolari: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
    

risoluzione dei problemiTroubleshooting

Quando si aggiungono dischi dati a una VM Linux, potrebbero verificarsi errori in caso di disco inesistente nel LUN 0.When adding data disks to a Linux VM, you may encounter errors if a disk does not exist at LUN 0. Se si aggiunge un disco manualmente usando il comando azure vm disk attach-new e si specifica un LUN (--lun) anziché consentire alla piattaforma Azure di determinare il LUN appropriato, fare attenzione che nel LUN 0 sia/sarà già presente un disco.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.

L'esempio seguente mostra un frammento di codice dell'output di 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 

I due dischi dati sono disponibili nel LUN 0 e nel LUN 1 (la prima colonna dell'output lsscsi indica [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]). Entrambi i dischi devono essere accessibili dalla VM.Both disks should be accessbile from within the VM. Se è stata specificata manualmente l'aggiunta del primo e del secondo disco al LUN 1 e al LUN 2 rispettivamente, è possibile che i dischi non siano visualizzati correttamente all'interno della VM.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

In questi esempi il valore host di Azure è 5, ma può variare a seconda del tipo di archiviazione selezionato.The Azure host value is 5 in these examples, but this may vary depending on the type of storage you select.

Questo comportamento del disco non è un problema di Azure, ma dipende dal modo in cui il kernel Linux segue le specifiche SCSI.This disk behavior is not an Azure problem, but the way in which the Linux kernel follows the SCSI specifications. Quando il kernel Linux analizza il bus SCSI per individuare i dispositivi collegati, affinché il sistema continui ad analizzare la presenza di altri dispositivi è necessario che ne rilevi uno nel LUN 0.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. Di conseguenza:As such:

  • Dopo aver aggiunto un disco dati, esaminare l'output di lsscsi per verificare la presenza di un disco nel LUN 0.Review the output of lsscsi after adding a data disk to verify that you have a disk at LUN 0.
  • Se il disco non viene visualizzato correttamente nella VM, verificare che sia presente un disco nel LUN 0.If your disk does not show up correctly within your VM, verify a disk exists at LUN 0.

Passaggi successiviNext steps