Espandere i dischi rigidi virtuali in una macchina virtuale Linux

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

Questo articolo illustra l'espansione dei dischi del sistema operativo e dei dischi dati per una macchina virtuale Linux. È possibile aggiungere dischi dati per fornire spazio di archiviazione aggiuntivo ed è anche possibile espandere un disco dati esistente. Le dimensioni predefinite del disco rigido virtuale per il sistema operativo sono in genere di 30 GB in una macchina virtuale Linux in Azure. Questo articolo illustra l'espansione di dischi del sistema operativo o dischi dati. Non è possibile espandere le dimensioni dei volumi con striping.

Questo disco ha una capacità massima di 4.095 GiB. Tuttavia, molti sistemi operativi vengono partizionati con record di avvio principale (MBR) per impostazione predefinita. Il record di avvio principale (MBR) limita le dimensioni utilizzabili a 2 TiB. Se sono necessari più di 2 TiB, valutare la possibilità di collegare dischi dati per l'archiviazione dei dati. Se è necessario archiviare i dati sul disco del sistema operativo e richiedere spazio aggiuntivo, convertire i dati in una tabella di partizione GUID (GPT).

Avviso

Assicurarsi sempre che il file system sia in uno stato integro, che il tipo di tabella delle partizioni del disco (GPT o MBR) supporti le nuove dimensioni e assicurarsi che i dati vengano sottoposti a backup prima di eseguire operazioni di espansione del disco. Per altre informazioni, vedere Avvio rapido di Backup di Azure.

Identificare l'oggetto disco dati di Azure all'interno del sistema operativo

Quando si espande un disco dati, se sono presenti diversi dischi dati nella macchina virtuale, potrebbe essere difficile correlare i LUN di Azure ai dispositivi Linux. Se il disco del sistema operativo richiede l'espansione, viene chiaramente etichettato nel portale di Azure come disco del sistema operativo.

Per iniziare, identificare la relazione tra utilizzo del disco, punto di montaggio e dispositivo, con il comando df.

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

Qui è possibile vedere, ad esempio, che il file system /opt/db/data è quasi pieno e si trova nella partizione /dev/sdd1. L'output di df mostra il percorso del dispositivo, se il disco viene montato usando il percorso del dispositivo o l'UUID (preferito) nella scheda fstab. Prendere nota anche della colonna Tipo, che indica il formato del file system. Il formato è importante in un secondo momento.

Individuare ora il LUN correlato a /dev/sdd esaminando il contenuto di /dev/disk/azure/scsi1. L'output del comando ls seguente mostra che il dispositivo noto come /dev/sdd all'interno del sistema operativo Linux si trova in LUN1 quando si esamina il portale di Azure.

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

Espandere un disco gestito di Azure

Espansione senza tempi di inattività

È possibile espandere i dischi gestiti senza deallocare la macchina virtuale. L'impostazione della cache host del disco non cambia se è possibile espandere o meno un disco dati senza deallocare la macchina virtuale.

Questa funzionalità presenta le limitazioni seguenti:

  • È supportata solo per i dischi dati.
  • Se un disco HDD Standard, SSD Standard o SSD Premium è pari o inferiore a 4 TiB, deallocare la macchina virtuale e scollegare il disco prima di espanderlo oltre 4 TiB. Se un disco ha dimensioni già maggiori di 4 TiB, è possibile espanderlo senza deallocare la macchina virtuale e scollegare il disco. Questo non si applica ai dischi SSD Premium v2 o Ultra.
  • Non è supportata per i dischi condivisi.
  • Installare e usare uno dei seguenti elementi:
  • Non è disponibile in alcune macchine virtuali classiche. Usare questo script per ottenere un elenco di SKU di macchine virtuali classiche che supportano l'espansione senza tempi di inattività.

Espandi con Ultra Disk e Premium SSD v2

L'espansione di dischi Ultra e dischi SSD Premium v2 presenta le limitazioni aggiuntive seguenti:

  • Non è possibile espandere un disco mentre si verifica anche una copia in background dei dati su tale disco, ad esempio quando un disco viene idratato dagli snapshot.
  • Non è possibile espandere una macchina virtuale che usa controller NVMe per dischi Ultra o dischi SSD Premium v2 senza tempi di inattività.

Disponibilità a livello di area

Il ridimensionamento dei dischi Ultra e dei dischi SSD Premium v2 è attualmente disponibile in tutte le aree supportate da SSD Premium v2 e Ultra, ad eccezione dei seguenti:

  • Stati Uniti occidentali 2
  • Europa occidentale
  • Stati Uniti orientali

Creare un disco gestito di Azure

Assicurarsi di avere installato la versione più recente dell'interfaccia della riga di comando di Azure e di aver eseguito l'accesso a un account Azure tramite az login.

Questo articolo richiede una VM esistente in Azure con almeno un disco dati collegato e preparato. Se non si ha già una VM da usare, vedere Creare e preparare una macchina virtuale con dischi dati.

Negli esempi seguenti sostituire i nomi dei parametri di esempio con i propri valori, ad esempio gruppodi risorse e macchinavirtuale.

Importante

Se il disco soddisfa i requisiti in Espandere senza tempi di inattività, è possibile ignorare i passaggi 1 e 3.

La compattazione di un disco esistente non è supportata e può causare la perdita di dati.

Dopo aver espanso i dischi, è necessario espandere il volume nel sistema operativo per sfruttare i vantaggi del disco più grande.

  1. Non è possibile eseguire operazioni sui dischi rigidi virtuali mentre la macchina virtuale è in esecuzione. Deallocare la macchina virtuale con az vm deallocate. L'esempio seguente dealloca la VM denominata myVM nel gruppo di risorse myResourceGroup:

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    Nota

    Per espandere il disco rigido virtuale è necessario deallocare la macchina virtuale. L'arresto della macchina virtuale tramite az vm stop non comporta il rilascio delle risorse di calcolo. Per rilasciare le risorse di calcolo, usare az vm deallocate.

  2. Vedere un elenco di dischi gestiti presenti nel gruppo di risorse con az disk list. L'esempio seguente mostra un elenco di dischi gestiti nel gruppo di risorse denominato myResourceGroup:

    az disk list \
        --resource-group myResourceGroup  \
        --query '[*].{Name:name,size:diskSizeGB,Tier:sku.tier}' \
        --output table
    

    Espandere il disco richiesto con az disk update. L'esempio seguente espande il disco gestito denominato myDataDisk per portarlo a 200 GB:

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    Nota

    Quando si espande un disco gestito, le dimensioni vengono arrotondate a quelle del disco gestito più vicino. Per una tabella delle dimensioni e dei livelli dei dischi gestiti disponibili, vedere Informazioni sulla fatturazione di Archiviazione su disco di Azure.

  3. Avviare la macchina virtuale con az vm start. L'esempio seguente avvia la VM denominata myVM nel gruppo di risorse myResourceGroup:

    az vm start --resource-group myResourceGroup --name myVM
    

Espandere il file system e una partizione del disco

Nota

Sebbene siano disponibili molti strumenti che possono essere usati per eseguire il ridimensionamento della partizione, gli strumenti descritti nel resto di questo documento sono gli stessi strumenti usati da determinati processi automatizzati, ad esempio cloud-init. Come descritto qui, lo strumento growpart con il pacchetto gdisk offre compatibilità universale con dischi GPT (GUID Partition Table), poiché le versioni precedenti di alcuni strumenti come fdisk non supportavano GPT.

Rilevamento di una dimensione del disco modificata

Se un disco dati è stato espanso senza tempi di inattività usando la procedura indicata in precedenza, le dimensioni del disco riportate non cambiano fino a quando il dispositivo non viene nuovamente analizzato, il che normalmente avviene solo durante il processo di avvio. Questa nuova analisi può essere chiamata su richiesta con la procedura seguente. In questo esempio, utilizzando i metodi di questo documento, si scopre che il disco dati è attualmente /dev/sda ed è stato ridimensionato da 256 GiB a 512 GiB.

  1. Identificare le dimensioni attualmente riconosciute nella prima riga di output di fdisk -l /dev/sda

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. Inserire un carattere 1 nel file di ripetizione dell'analisi per il dispositivo. Si noti il riferimento a sda nell'esempio. L'identificatore del disco cambierebbe se venisse ridimensionato un dispositivo disco diverso.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. Verificare che le nuove dimensioni del disco siano ora riconosciute

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

Nella parte restante di questo articolo viene usato il disco del sistema operativo per gli esempi della procedura per aumentare le dimensioni di un volume a livello di sistema operativo. Se il disco espanso è un disco dati, usare le indicazioni precedenti per identificare il dispositivo disco dati e seguire queste istruzioni come linee guida, sostituendo il dispositivo disco dati (ad esempio /dev/sda), numeri di partizione, nomi di volume, punti di montaggio e formati di file system, se necessario.

Tutte le linee guida del sistema operativo Linux devono essere visualizzate come generiche e possono essere applicate in qualsiasi distribuzione, ma in genere corrispondono alle convenzioni dell'editore del marketplace denominato. Fare riferimento ai documenti di Red Hat per i requisiti del pacchetto in qualsiasi distribuzione basata su Red Hat o sulla richiesta di compatibilità di Red Hat.

Aumentare le dimensioni del disco del sistema operativo

Le istruzioni seguenti si applicano a distribuzioni approvate da Linux.

Nota

Prima di procedere, creare una copia di backup completa della macchina virtuale o, almeno, acquisire uno snapshot del disco del sistema operativo.

  1. Seguire la procedura descritta in precedenza per espandere il disco nell'infrastruttura di Azure.

  2. Accedere alla macchina virtuale come utente radice usando il comando sudo dopo l'accesso come altro utente:

    sudo -i
    
  3. Usare il comando lsblk per determinare quale volume logico è montato nella radice del file system (/). In questo caso, si noterà che rootvg-rootlv viene montato in /. Se è necessario ridimensionare un file system diverso, sostituire il volume logico e il punto di montaggio in questa sezione.

    lsblk -f
    
    NAME                  FSTYPE      LABEL   UUID                                   MOUNTPOINT
    fd0
    sda
    ├─sda1                vfat                C13D-C339                              /boot/efi
    ├─sda2                xfs                 8cc4c23c-fa7b-4a4d-bba8-4108b7ac0135   /boot
    ├─sda3
    └─sda4                LVM2_member         zx0Lio-2YsN-ukmz-BvAY-LCKb-kRU0-ReRBzh
       ├─rootvg-tmplv      xfs                 174c3c3a-9e65-409a-af59-5204a5c00550   /tmp
       ├─rootvg-usrlv      xfs                 a48dbaac-75d4-4cf6-a5e6-dcd3ffed9af1   /usr
       ├─rootvg-optlv      xfs                 85fe8660-9acb-48b8-98aa-bf16f14b9587   /opt
       ├─rootvg-homelv     xfs                 b22432b1-c905-492b-a27f-199c1a6497e7   /home
       ├─rootvg-varlv      xfs                 24ad0b4e-1b6b-45e7-9605-8aca02d20d22   /var
       └─rootvg-rootlv     xfs                 4f3e6f40-61bf-4866-a7ae-5c6a94675193   /
    
  4. Verificare se esiste spazio disponibile nel gruppo di volumi LVM contenente la partizione radice. Se esiste spazio disponibile, andare al passaggio 12.

    vgdisplay rootvg
    
    --- Volume group ---
    VG Name               rootvg
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  7
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                6
    Open LV               6
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               <63.02 GiB
    PE Size               4.00 MiB
    Total PE              16132
    Alloc PE / Size       6400 / 25.00 GiB
    Free  PE / Size       9732 / <38.02 GiB
    VG UUID               lPUfnV-3aYT-zDJJ-JaPX-L2d7-n8sL-A9AgJb
    

    In questo esempio, la riga Free PE/Size indica che nel gruppo di volumi esiste uno spazio disponibile di 38,02 GB, in quanto il disco è già stato ridimensionato.

  5. Installare il pacchetto cloud-utils-growpart per fornire il comando growpart, necessario per aumentare le dimensioni del disco del sistema operativo e il gestore gdisk per i layout del disco GPT. Questo pacchetto è preinstallato nella maggior parte delle immagini del marketplace

    dnf install cloud-utils-growpart gdisk
    

    In Red Hat versioni 7 e successive è possibile usare il comando yum al posto di dnf.

  6. Determinare quale disco e quale partizione contengono il volume fisico o i volumi fisici LVM nel gruppo di volumi denominato rootvg usando il comando pvscan. Si notino le dimensioni e lo spazio disponibile elencati tra parentesi quadre ([ e ]).

    pvscan
    
    PV /dev/sda4   VG rootvg          lvm2 [<63.02 GiB / <38.02 GiB free]
    
  7. Verificare le dimensioni della partizione usando lsblk.

    lsblk /dev/sda4
    
    NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda4              8:4    0  63G  0 part
    ├─rootvg-tmplv  253:1    0   2G  0 lvm  /tmp
    ├─rootvg-usrlv  253:2    0  10G  0 lvm  /usr
    ├─rootvg-optlv  253:3    0   2G  0 lvm  /opt
    ├─rootvg-homelv 253:4    0   1G  0 lvm  /home
    ├─rootvg-varlv  253:5    0   8G  0 lvm  /var
    └─rootvg-rootlv 253:6    0   2G  0 lvm  /
    
  8. Espandere la partizione contenente il volume fisico usando growpart, il nome del dispositivo e il numero di partizione. In questo modo si espande la partizione specificata per usare tutto lo spazio contiguo disponibile nel dispositivo.

    growpart /dev/sda 4
    
    CHANGED: partition=4 start=2054144 old: size=132161536 end=134215680 new: size=199272414 end=201326558
    
  9. Verificare che la partizione sia stata ridimensionata in base alle dimensioni previste usando di nuovo il comando lsblk. Si noti che nell'esempio sda4 è cambiato da 63 G a 95 G.

    lsblk /dev/sda4
    
    NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda4              8:4    0  95G  0 part
    ├─rootvg-tmplv  253:1    0   2G  0 lvm  /tmp
    ├─rootvg-usrlv  253:2    0  10G  0 lvm  /usr
    ├─rootvg-optlv  253:3    0   2G  0 lvm  /opt
    ├─rootvg-homelv 253:4    0   1G  0 lvm  /home
    ├─rootvg-varlv  253:5    0   8G  0 lvm  /var
    └─rootvg-rootlv 253:6    0   2G  0 lvm  /
    
  10. Espandere il volume fisico per usare il resto della partizione appena espansa

    pvresize /dev/sda4
    
    Physical volume "/dev/sda4" changed
    1 physical volume(s) resized or updated / 0 physical volume(s) not resized
    
  11. Verificare che le nuove dimensioni del volume fisico siano le dimensioni previste, confrontando i valori [size/free] originali.

    pvscan
    
    PV /dev/sda4   VG rootvg          lvm2 [<95.02 GiB / <70.02 GiB free]
    
  12. Espandere il volume logico in base alla quantità richiesta, che non corrispondere a tutto lo spazio disponibile nel gruppo di volumi. Nell'esempio seguente /dev/mapper/rootvg-rootlv viene ridimensionato da 2 GB a 12 GB (un incremento di 10 GB) tramite il comando seguente. Questo comando ridimensiona anche il file system nel volume logico.

    lvresize -r -L +10G /dev/mapper/rootvg-rootlv
    

    Output di esempio:

    Size of logical volume rootvg/rootlv changed from 2.00 GiB (512 extents) to 12.00 GiB (3072 extents).
    Logical volume rootvg/rootlv successfully resized.
    meta-data=/dev/mapper/rootvg-rootlv isize=512    agcount=4, agsize=131072 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=524288, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=2560, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 524288 to 3145728
    
  13. Il comando lvresize chiama automaticamente il comando di ridimensionamento appropriato per il file system nel volume logico. Verificare se /dev/mapper/rootvg-rootlv, montato su /, include dimensioni aumentate del file system usando il comando df -Th:

    Output di esempio:

    df -Th /
    
    Filesystem                Type  Size  Used Avail Use% Mounted on
    /dev/mapper/rootvg-rootlv xfs    12G   71M   12G   1% /
    

Nota

Per usare la stessa procedura per ridimensionare qualsiasi altro volume logico, cambiare il nome lv nel passaggio 12.

Espansione senza tempi di inattività del supporto SKU di macchina virtuale classico

Se si usa uno SKU di macchina virtuale classico, potrebbe non supportare l'espansione dei dischi senza tempi di inattività.

Usare lo script di PowerShell seguente per determinare gli SKU di macchina virtuale con cui è disponibile:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}