Aggiungere un disco a una VM Linux

Si applica a: ✔️ Set di scalabilità flessibili di macchine virtuali ✔️ Linux

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.

Collegare un nuovo disco a una VM

Se si vuole aggiungere un nuovo disco dati vuoto nella macchina virtuale, usare il comando az vm disk attach con il parametro --new. Se la macchina virtuale è in una zona di disponibilità, il disco viene creato automaticamente nella stessa area della macchina virtuale. Per ulteriori informazioni, vedere Overview of Availability Zones (Panoramica delle zone di disponibilità in Azure). L'esempio seguente crea un disco denominato myDataDisk da 50 GB:

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

Latenza più bassa

Nelle aree selezionate la latenza di collegamento del disco è stata ridotta, quindi si noterà un miglioramento fino al 15%. Ciò è utile se sono stati pianificati o non pianificati failover tra macchine virtuali, si sta ridimensionando il carico di lavoro o si esegue un carico di lavoro con scalabilità elevata, ad esempio servizio Azure Kubernetes. Tuttavia, questo miglioramento è limitato al comando esplicito di collegamento del disco, az vm disk attach. Il miglioramento delle prestazioni non verrà visualizzato se si chiama un comando che può eseguire in modo implicito un collegamento, ad esempio az vm update. Non è necessario eseguire alcuna azione diversa dalla chiamata del comando di collegamento esplicito per visualizzare questo miglioramento.

La latenza inferiore è attualmente disponibile in ogni area pubblica, ad eccezione di:

  • Canada centrale
  • Stati Uniti centrali
  • Stati Uniti orientali
  • Stati Uniti orientali 2
  • Stati Uniti centro-meridionali
  • Stati Uniti occidentali 2
  • Germania settentrionale
  • JIO India occidentale
  • Europa settentrionale
  • Europa occidentale

Collegare un disco esistente

Per collegare un disco esistente, individuare l'ID del disco e trasmetterlo al comando az vm disk attach. Nell'esempio seguente viene proposta una query per un disco denominato myDataDisk in myResourceGroup, che viene collegato alla macchina virtuale denominata myVM:

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

Formattare e montare il disco

È necessario SSH nella macchina virtuale per partizionare, formattare e montare il nuovo disco in modo che la macchina virtuale di Linux possa usarlo. Per altre informazioni, vedere How to use SSH with Linux on Azure (Come usare SSH con Linux in Azure). L'esempio seguente si connette a una macchina virtuale con l'indirizzo IP pubblico 10.123.123.25 con il nome utente azureuser:

ssh azureuser@10.123.123.25

Trovare il disco

Dopo aver eseguito la connessione alla macchina virtuale, trovare il disco. In questo esempio viene usato lsblk per elencare i dischi.

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

L'output è simile all'esempio seguente:

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

Ecco, sdc è il disco che vogliamo, perché è 50G. Se si aggiungono più dischi e non si è certi del disco in base alle dimensioni, è possibile passare alla pagina della macchina virtuale nel portale, selezionare Dischi e controllare il numero LUN per il disco in Dischi dati. Confrontare il numero LUN dal portale con l'ultimo numero della parte HTCL dell'output, ovvero il LUN. Un'altra opzione consiste nell'elencare il contenuto della /dev/disk/azure/scsi1 directory:

ls -l /dev/disk/azure/scsi1

L'output dovrebbe essere simile all'esempio seguente:

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

Formattare il disco

Formattare il disco con parted, se le dimensioni del disco sono due tebibyte (TiB) o superiori, è necessario usare il partizionamento GPT, se è inferiore a 2TiB, è possibile usare il partizionamento MBR o GPT.

Nota

È consigliabile usare la versione parted più recente disponibile per la distribuzione. Se le dimensioni del disco sono pari a 2 tebibyte (TiB) o superiori, è necessario usare il partizionamento GPT. Se la dimensione del disco è inferiore a 2 TiB, è possibile usare il partizionamento MBR o GPT.

Nell'esempio seguente viene usato parted in /dev/sdc, in cui il primo disco dati si trova in genere nella maggior parte delle macchine virtuali. Sostituire sdc con l'opzione corretta per il disco. Viene anche formattata usando il file system XFS .

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

Usare l'utilità partprobe per assicurarsi che il kernel sia a conoscenza della nuova partizione e del file system. Se non si usa partprobe , i comandi blkid o lsblk non restituiscono immediatamente l'UUID per il nuovo file system.

Montare il disco

Creare ora una directory per montare il nuovo file system usando mkdir. Nell'esempio seguente viene creata una directory in /datadrive:

sudo mkdir /datadrive

Usare mount quindi per installare il file system. Nell'esempio seguente la partizione viene /dev/sdc1 montata nel punto di /datadrive montaggio:

sudo mount /dev/sdc1 /datadrive

Rendere permanente il montaggio

Per assicurarsi che l'unità venga rimontata automaticamente dopo un riavvio, è necessario aggiungerla al /etc/fstab file. È anche consigliabile usare l'UUID (Universally Unique Identifier) in /etc/fstab per fare riferimento all'unità anziché solo al nome del dispositivo ,ad esempio /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. Ai dischi dati rimanenti verrebbero quindi assegnati gli stessi ID di dispositivo. Per individuare l'UUID della nuova unità, usare l'utilità blkid:

sudo blkid

L'output è simile al seguente esempio:

/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

Se il file /etc/fstab non viene modificato in modo corretto, il sistema potrebbe non essere disponibile per l'avvio. In caso di dubbi, fare riferimento alla documentazione della distribuzione per informazioni su come modificare correttamente questo file. È inoltre consigliabile creare una copia di backup del file /etc/fstab prima della modifica.

Aprire quindi il /etc/fstab file in un editor di testo. Aggiungere una riga alla fine del file, usando il valore UUID per il /dev/sdc1 dispositivo creato nei passaggi precedenti e il punto di montaggio di /datadrive. Usando l'esempio di questo articolo, la nuova riga sarà simile alla seguente:

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

Al termine della modifica del file, salvare e chiudere l'editor.

In alternativa, è possibile eseguire il comando seguente per aggiungere il disco al /etc/fstab file:

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

Nota

Se si rimuove successivamente un disco dati senza modificare fstab, è possibile che si verifichi un errore di avvio della VM. La maggior parte delle distribuzioni specifica le opzioni fstab nofail e/o nobootwait. Queste opzioni consentono l'avvio di un sistema anche se il montaggio del disco non riesce in fase di avvio. Per altre informazioni su questi parametri, consultare la documentazione della distribuzione.

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. 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).

La console seriale della macchina virtuale di Azure può essere usata per l'accesso della console alla macchina virtuale se la modifica di fstab ha generato un errore di avvio. Altri dettagli sono disponibili nella documentazione della console seriale.

Supporto delle funzioni TRIM/UNMAP per Linux in Azure

Alcuni kernel di Linux supportano operazioni TRIM/UNMAP allo scopo di rimuovere i blocchi inutilizzati sul disco. Questa funzionalità è utile principalmente per informare Azure che le pagine eliminate non sono più valide e possono essere eliminate. Questa funzionalità consente di risparmiare sui dischi fatturati in base alla quantità di spazio di archiviazione utilizzata, ad esempio dischi standard non gestiti e snapshot del disco.

Esistono due modi per abilitare la funzione TRIM in una VM Linux. Come di consueto, consultare la documentazione della distribuzione per stabilire l'approccio consigliato:

  • Usare l'opzione di montaggio discard in /etc/fstab, ad esempio:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • In alcuni casi l'opzione discard può avere implicazioni sulle prestazioni. In alternativa, è possibile eseguire il comando fstrim manualmente dalla riga di comando oppure aggiungerlo a crontab per eseguirlo a intervalli regolari:

sudo apt install util-linux
sudo fstrim /datadrive

Risoluzione dei problemi

Quando si aggiungono dischi dati a una VM Linux, potrebbero verificarsi errori in caso di disco inesistente nel LUN 0. Se si aggiunge un disco manualmente usando il comando az 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.

L'esempio seguente mostra un frammento di codice dell'output di 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]). Entrambi i dischi devono essere accessibili dalla macchina virtuale. 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.

Nota

In questi esempi il valore host di Azure è 5, ma può variare a seconda del tipo di archiviazione selezionato.

Questo comportamento del disco non è un problema di Azure, ma dipende dal modo in cui il kernel Linux segue le specifiche SCSI. 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. Di conseguenza:

  • Dopo aver aggiunto un disco dati, esaminare l'output di lsscsi per verificare la presenza di un disco nel LUN 0.
  • Se il disco non viene visualizzato correttamente nella VM, verificare che sia presente un disco nel LUN 0.

Passaggi successivi