Aggiungere un disco a una VM Linux
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
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, se si ridimensiona il carico di lavoro o si esegue un carico di lavoro con stato a scalabilità elevata, ad esempio il servizio Azure Kubernetes. Tuttavia, questo miglioramento è limitato al comando di collegamento esplicito del disco, az vm disk attach
. Non verrà visualizzato il miglioramento delle prestazioni se si chiama un comando che può eseguire in modo implicito un collegamento, ad esempio az vm update
. Non è necessario eseguire alcuna azione diversa da chiamare il 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
- West US 2
- Germania settentrionale
- India occidentale Jio
- 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 il sdc
disco che vogliamo, perché è 50G. Se si aggiungono più dischi e non si è certi del disco basato solo sulle 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 deve 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 la dimensione del disco è di due tebibyte (TiB) o superiore, è 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 parted
usato 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 formattato 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 viene montata la /dev/sdc1
partizione 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 specifica. 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 alla 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 rimosse. 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 comandofstrim
manualmente dalla riga di comando oppure aggiungerlo a crontab per eseguirlo a intervalli regolari:
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
- Per assicurarsi che la VM di Linux sia configurata correttamente, vedere le raccomandazioni per ottimizzare le prestazioni della macchina virtuale di Linux .
- Espandere la capacità di archiviazione aggiungendo altri dischi e configurando RAID per prestazioni aggiuntive.