Come collegare un disco dati a una macchina virtuale Linux

Importante

Azure offre due diversi modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica. Questo articolo illustra l'uso del modello di distribuzione classica. Microsoft consiglia di usare il modello di Gestione risorse per le distribuzioni più recenti. Vedere come collegare un disco dati tramite il modello di distribuzione di Resource Manager.

È possibile collegare sia dischi vuoti sia dischi contenenti dati alle VM di Azure. In entrambi i casi i dischi sono file con estensione vhd che risiedono in un account di archiviazione di Azure. Come con l'aggiunta di un disco a un computer Linux, dopo aver collegato il disco, è necessario inizializzarlo e formattarlo affinché sia pronto per l'uso. Questo articolo illustra in dettaglio come collegare sia i dischi vuoti sia i dischi contenenti dati alle VM e come inizializzare e formattare successivamente un nuovo disco.

Nota

È consigliabile usare uno o più dischi separati per archiviare i dati di una macchina virtuale. Al momento della creazione, una macchina virtuale di Azure dispone di un disco del sistema operativo e di un disco temporaneo. Non usare il disco temporaneo per archiviare i dati persistenti. Come si può dedurre dal nome, fornisce solo archiviazione temporanea. Non offre funzionalità di ridondanza o backup perché non risiede nel servizio di archiviazione di Azure. Il disco temporaneo è in genere gestito dall'agente Linux di Azure e viene montato automaticamente in /mnt/resource oppure in /mnt nelle immagini Ubuntu. D'altra parte, il kernel potrebbe assegnare a un disco dati il nome /dev/sdc; in tal caso è necessario suddividere in partizioni, formattare e montare tale risorsa. Per dettagli, vedere Guida dell'utente dell'agente Linux di Azure.

Per altre informazioni sui dischi, vedere Informazioni sui dischi e sui dischi rigidi virtuali per le macchine virtuali.

Collegare un disco vuoto

  1. Aprire l'interfaccia della riga di comando di Azure 1.0 e connettersi alla sottoscrizione di Azure. Assicurarsi che sia attiva la modalità Azure Service Management (azure config mode asm).
  2. Immettere azure vm disk attach-new per creare e collegare un nuovo disco, come illustrato nell'esempio seguente. Sostituire myVM con il nome della macchina virtuale Linux e specificare le dimensioni in GB del disco, che in questo esempio è di 100 GB:

    azure vm disk attach-new myVM 100
    
  3. Dopo che è stato creato e collegato, il disco dati verrà elencato nell'output di azure vm disk list <virtual-machine-name> come illustrato nell'esempio seguente:

    azure vm disk list TestVM
    

    L'output è simile all'esempio seguente:

    info:    Executing command vm disk list
    
    * Fetching disk images
    * Getting virtual machines
    * Getting VM disks
     data:    Lun  Size(GB)  Blob-Name                         OS
     data:    ---  --------  --------------------------------  -----
     data:         30        myVM-2645b8030676c8f8.vhd  Linux
     data:    0    100       myVM-76f7ee1ef0f6dddc.vhd
     info:    vm disk list command OK
    

Collegare un disco esistente

Per collegare un disco esistente, è necessario che in un account di archiviazione sia disponibile un file con estensione vhd.

  1. Aprire l'interfaccia della riga di comando di Azure 1.0 e connettersi alla sottoscrizione di Azure. Assicurarsi che sia attiva la modalità Azure Service Management (azure config mode asm).
  2. Controllare se il disco rigido virtuale che si desidera collegare è già caricato nella sottoscrizione di Azure:

    azure vm disk list
    

    L'output è simile all'esempio seguente:

     info:    Executing command vm disk list
    
    * Fetching disk images
     data:    Name                                          OS
     data:    --------------------------------------------  -----
     data:    myTestVhd                                     Linux
     data:    TestVM-ubuntuVMasm-0-201508060029150744  Linux
     data:    TestVM-ubuntuVMasm-0-201508060040530369
     info:    vm disk list command OK
    
  3. Se non si trova il disco che si vuole usare, è possibile caricare un disco rigido virtuale locale nella sottoscrizione usando azure vm disk create o azure vm disk upload. Un esempio di disk create verrebbe visualizzato come nell'esempio seguente:

    azure vm disk create myVhd .\TempDisk\test.VHD -l "East US" -o Linux
    

    L'output è simile all'esempio seguente:

    info:    Executing command vm disk create
    + Retrieving storage accounts
    info:    VHD size : 10 GB
    info:    Uploading 10485760.5 KB
    Requested:100.0% Completed:100.0% Running:   0 Time:   25s Speed:    82 KB/s
    info:    Finishing computing MD5 hash, 16% is complete.
    info:    https://mystorageaccount.blob.core.windows.net/disks/myVHD.vhd was
    uploaded successfully
    info:    vm disk create command OK
    

    È inoltre possibile usare azure vm disk upload per caricare un disco rigido virtuale in un account di archiviazione specifico. Altre informazioni sui comandi per la gestione dei dischi dati delle macchine virtuali di Azure sono disponibili qui.

  4. Collegare adesso il disco rigido virtuale alla macchina virtuale:

    azure vm disk attach myVM myVhd
    

    Assicurarsi di sostituire myVM con il nome della macchina virtuale e myVHD con il disco rigido virtuale desiderato.

  5. È possibile verificare che il disco sia collegato alla macchina virtuale con azure vm disk list <virtual-machine-name>:

    azure vm disk list myVM
    

    L'output è simile all'esempio seguente:

     info:    Executing command vm disk list
    
    * Fetching disk images
    * Getting virtual machines
    * Getting VM disks
     data:    Lun  Size(GB)  Blob-Name                         OS
     data:    ---  --------  --------------------------------  -----
     data:         30        TestVM-2645b8030676c8f8.vhd  Linux
     data:    1    10        test.VHD
     data:    0    100        TestVM-76f7ee1ef0f6dddc.vhd
     info:    vm disk list command OK
    

Nota

Dopo l'aggiunta di un disco dati, sarà necessario accedere alla macchina virtuale e inizializzare il disco in modo che la macchina virtuale possa usarlo per l'archiviazione. Per altre informazioni sull'inizializzazione del disco, vedere i passaggi riportati di seguito.

Inizializzare un nuovo disco dati in Linux

  1. Stabilire una connessione SSH alla VM. Per altre informazioni, vedere Come accedere a una macchina virtuale che esegue Linux.
  2. In seguito è necessario trovare l'identificatore del dispositivo per inizializzare il disco dati. A questo scopo è possibile procedere in due modi:

    a) Grep per dispositivi SCSI nei log, come nel comando seguente:

    sudo grep SCSI /var/log/messages
    

    Per le distribuzioni recenti di Ubuntu, può essere necessario usare sudo grep SCSI /var/log/syslog perché la registrazione in /var/log/messages potrebbe essere disattivata per impostazione predefinita.

    L'identificatore dell'ultimo disco dati aggiunto verrà indicato nei messaggi visualizzati.

    Visualizzare i messaggi relativi al disco

    OPPURE

    b) Usare il comando lsscsi per trovare l'ID dispositivo. lsscsi può essere installato tramite yum install lsscsi (su distribuzioni basate su Red Hat) o apt-get install lsscsi (su distribuzioni basate su Debian). È possibile trovare il disco che si sta cercando in base al relativo LUN o numero di unità logica. Ad esempio, il LUN per i dischi collegati può essere facilmente trovato in azure vm disk list <virtual-machine> come:

    azure vm disk list myVM
    

    L'output è simile al seguente:

    info:    Executing command vm disk list
    + Fetching disk images
    + Getting virtual machines
    + Getting VM disks
    data:    Lun  Size(GB)  Blob-Name                         OS
    data:    ---  --------  --------------------------------  -----
    data:         30        myVM-2645b8030676c8f8.vhd  Linux
    data:    0    100       myVM-76f7ee1ef0f6dddc.vhd
    info:    vm disk list command OK
    

    Confrontare questi dati con l'output di lsscsi per la stessa macchina virtuale di esempio:

    [1:0:0:0]    cd/dvd  Msft     Virtual CD/ROM   1.0   /dev/sr0
    [2:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sda
    [3:0:1:0]    disk    Msft     Virtual Disk     1.0   /dev/sdb
    [5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc
    

    L'ultimo numero della tupla in ogni riga è il lun. Per altre informazioni, vedere man lsscsi .

  3. Al prompt dei comandi, digitare il comando seguente per creare un dispositivo:

    sudo fdisk /dev/sdc
    
  4. Quando richiesto, digitare n per creare una partizione.

    Creare un dispositivo

  5. Quando richiesto, digitare p per impostare la partizione come partizione primaria. Digitare 1 per impostarla come prima partizione, quindi premere INVIO per accettare il valore predefinito per il cilindro. In alcuni sistemi, è possibile visualizzare i valori predefiniti del primo e dell'ultimo settore e non del cilindro. È possibile scegliere di accettare questi valori predefiniti.

    Creare la partizione

  6. Digitare p per visualizzare i dettagli relativi al disco da suddividere in partizioni.

    Visualizzare le informazioni sul disco

  7. Digitare w per scrivere le impostazioni per il disco.

    Scrivere le modifiche sul disco

  8. È ora possibile creare il file system nella nuova partizione. Aggiungere il numero della partizione all'ID del dispositivo (nell'esempio seguente /dev/sdc1). Nell'esempio seguente viene creata una partizione ext4 in /dev/sdc1:

    sudo mkfs -t ext4 /dev/sdc1
    

    Creare il file system

    Nota

    Che i sistemi SUSE Linux Enterprise 11 supportano solo l'accesso di sola lettura ai file system ext4. Per questi sistemi è consigliabile formattare il nuovo file system come ext3 anziché ext4.

  9. Creare una directory per il montaggio del nuovo file system nel modo seguente:

    sudo mkdir /datadrive
    
  10. È infine possibile montare l'unità, come indicato di seguito:

    sudo mount /dev/sdc1 /datadrive
    

    Il disco dati è ora pronto per l'uso come /datadrive.

    Creare la directory e montare il disco

  11. Aggiungere la nuova unità a /etc/fstab:

    Per assicurarsi che l'unità venga rimontata automaticamente dopo un riavvio, è necessario aggiungerla al file /etc/fstab. È inoltre 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. L'utilizzo dell'UUID evita che venga montato il disco non corretto in una posizione specificata, se il sistema operativo rileva un errore del disco durante l'avvio, e l'assegnazione di tali ID dispositivo agli eventuali dischi dati rimanenti. Per individuare l'UUID della nuova unità, è possibile usare l'utilità blkid :

    sudo -i blkid
    

    L'output è simile al seguente esempio:

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

    Successivamente, aprire il file /etc/fstab in un editor di testo:

    sudo vi /etc/fstab
    

    In questo esempio viene usato il valore UUID del nuovo dispositivo /dev/sdc1 creato nei passaggi precedenti e il punto di montaggio /datadrive. Alla fine del file /etc/fstab aggiungere la riga di codice seguente:

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

    In alternativa, su sistemi basati su SUSE Linux, potrebbe essere necessario usare un formato leggermente diverso:

    /dev/disk/by-uuid/33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   ext3   defaults,nofail   1   2
    

    Nota

    L'opzione nofail garantisce che la macchina virtuale venga avviata anche se il file system è danneggiato o il disco non esiste 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 su VM Linux a causa di errori FSTAB).

    Per verificare che il file system venga montato correttamente, è possibile smontarlo e rimontarlo, ad esempio usando il punto di montaggio esemplificativo /datadrive creato nei passaggi precedenti:

    sudo umount /datadrive
    sudo mount /datadrive
    

    Se il comando mount restituisce un errore, verificare che la sintassi del file /etc/fstab sia corretta. Anche le eventuali altre unità o partizioni dati create devono essere inserite separatamente in /etc/fstab.

    Rendere scrivibile l'unità tramite questo comando:

    sudo chmod go+w /datadrive
    

    Nota

    Se si rimuove successivamente un disco dati senza modificare fstab, è possibile che si verifichi un errore di avvio della macchina virtuale. Se si tratta di un errore ricorrente, nella maggior parte delle distribuzioni sono disponibili le opzioni fstab nofail e/o nobootwait, che consentono l'avvio di un sistema anche in caso di errore di montaggio in fase di avvio. Per altre informazioni su questi parametri, consultare la documentazione della distribuzione.

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. Nel servizio di archiviazione standard, queste operazioni sono particolarmente utili per informare Azure che le pagine eliminate non sono più valide e possono essere rimosse. L'eliminazione delle pagine consente di risparmiare sui costi quando si creano file di grandi dimensioni per poi eliminarli.

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   ext4   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:

    Ubuntu

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

    RHEL/CentOS

    sudo yum 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 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.

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

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 altre informazioni sull'uso delle VM Linux, vedere gli articoli seguenti: