Provisioning spesso e sottile: qual è la differenza?

In questo articolo, esamineremo dettagliatamente l’aspetto della preallocazione dello spazio di archiviazione delle impostazioni del disco virtuale e scopriremo cos’è la provisioning spessa e sottile, in cosa differiscono e quale di questi tipi di preallocazione dello spazio di archiviazione è migliore per la tua infrastruttura.

Provisioning Spessa

La provisioning spessa è un tipo di preallocazione dello spazio di archiviazione. Con la provisioning spessa, l’intera capacità di archiviazione del disco virtuale è preallocata nello storage fisico quando il disco virtuale viene creato. Un disco virtuale con provisioning spesso consuma tutto lo spazio allocato ad esso nel datastore fin dall’inizio, quindi lo spazio non è disponibile per l’uso da parte di altre macchine virtuali.

Ci sono due sottotipi di dischi virtuali con provisioning spesso:

  • A Lazy zeroed disk is a disk that takes all of its space at the time of its creation, but this space may contain some old data on the physical media. This old data is not erased or written over, so it needs to be “zeroed out” before new data can be written to the blocks. This type of disk can be created more quickly, but its performance will be lower for the first writes due to the increased IOPS (input/output operations per second) for new blocks;
  • Un disco a zero eager è un disco che ottiene tutto lo spazio richiesto ancora al momento della sua creazione e lo spazio viene cancellato da eventuali dati precedenti sui supporti fisici. La creazione di dischi a zero eager richiede più tempo, perché vengono scritti zeri sull’intero disco, ma le loro prestazioni sono più veloci durante le prime scritture. Questo sottotipo di disco virtuale con provisioning spesso supporta funzionalità di clustering, come la tolleranza ai guasti.

Per motivi di sicurezza dei dati, l’azzeramento rapido è più comune dell’azzeramento lento con dischi virtuali con allocazione spessa. Perché? Quando si elimina un VMDK, i dati sul datastore non vengono completamente cancellati; i blocchi vengono semplicemente contrassegnati come disponibili, fino a quando il sistema operativo non li sovrascrive. Se si crea un disco virtuale con azzeramento rapido su questo datastore, l’area del disco verrà completamente cancellata (cioè azzerata), impedendo così a chiunque con cattive intenzioni di recuperare i dati precedenti, anche se utilizzano software di terze parti specializzati.

Thin Provisioning

Il thin provisioning è un altro tipo di preallocazione dello spazio di archiviazione. Un disco virtuale con thin provisioning consuma solo lo spazio di cui ha bisogno inizialmente e cresce con il tempo in base alla domanda.

Ad esempio, se si crea un nuovo disco virtuale da 30GB con thin provisioning e si copiano 10 GB di file, la dimensione del file VMDK risultante sarà di 10 GB, mentre avreste un file VMDK da 30GB se aveste scelto di utilizzare un disco con allocazione spessa.

I dischi virtuali sottoprovvisionati sono rapidi da creare e utili per risparmiare spazio di archiviazione. Le prestazioni di un disco sottoprovvisionato non sono superiori a quelle di un disco sottoprovvisionato con allocazione pigra di zeri, perché per entrambi questi tipi di dischi è necessario scrivere zeri prima di scrivere i dati in un nuovo blocco. Si noti che quando si elimina i dati da un disco virtuale sottoprovvisionato, la dimensione del disco non viene ridotta automaticamente. Questo perché il sistema operativo elimina solo gli indici dalla tabella dei file che fanno riferimento al corpo del file nel sistema di file; segna i blocchi che appartenevano ai file “eliminati” come liberi e accessibili per scrivere nuovi dati. Ecco perché vediamo la rimozione dei file come istantanea. Se fosse una cancellazione completa, dove gli zeri venivano scritti sui blocchi occupati dai file eliminati, ci vorrebbe circa lo stesso tempo della copia dei file in questione. Vedere l’illustrazione semplificata qui sotto.

Problemi Che Possono Verificarsi Nell’Utilizzo Dei Dischi Virtuali Sottoprovvisionati

L’utilizzo dei dischi virtuali sottoprovvisionati non è sempre senza problemi. Ci sono alcuni problemi di cui dovresti essere consapevole e preparato a gestire.

Consideriamo un esempio che rende le macchine virtuali inutilizzabili. Ad esempio, abbiamo un datastore da 20 GB con tre macchine virtuali in esecuzione su di esso. Ogni macchina virtuale ha un disco virtuale sottoposto a provisioning sottile con una dimensione massima di 10 GB. (Questa pratica è chiamata “sovrapposizione” – assegniamo ai dischi virtuali più spazio di quanto possano fisicamente occupare. Questo viene fatto spesso, poiché consente di scalare il sistema aggiungendo più storage fisico quando necessario.) La dimensione del file di ogni disco virtuale si espanderà man mano che vengono aggiunti dati, fino a quando non ci sarà più spazio libero nel datastore. La situazione diventa critica quando sul datastore rimane solo 1 GB di spazio libero, ad esempio quando VM1 occupa 8 GB, VM2 occupa 7 GB e VM3 occupa 4 GB.

I metodi tradizionali di eliminazione dei file all’interno delle macchine virtuali non aiuteranno a ridurre le dimensioni dei dischi virtuali sottoposti a provisioning sottile. Se vengono scritti più di 1 GB di nuovi dati su una qualsiasi di queste macchine virtuali, tutte e tre falliranno e sarà necessario migrare una o più delle macchine virtuali su un altro datastore per ripristinare il loro stato di esecuzione.

Come ridurre le dimensioni di un disco virtuale sottoposto a provisioning sottile dopo l’eliminazione dei file

Per poter ridurre la dimensione del file VMDK dei tuoi dischi virtuali sottoposti a provisioning sottile, è necessario sapere come azzerare i blocchi che precedentemente occupavano i dati eliminati. Scopriamo come fare questo.

Nota: Le operazioni di riduzione del disco sono possibili solo se le macchine virtuali non contengono snapshot. Inoltre, si prega di prestare attenzione ed eseguire i comandi a proprio rischio. Eseguire sempre il backup di tutti i dati importanti prima di effettuare qualsiasi operazione sui dischi.

Ridimensionare Dischi VMware Sottoposti a Thin Provisioning in Linux

Consideriamo un esempio: abbiamo un file VMDK di 10.266.496 KB (10GB) (abbiamo appreso le sue dimensioni recandoci nella directory sul datastore dove è situata la nostra macchina virtuale) e vogliamo ridimensionare il disco virtuale su cui è installato il sistema operativo Linux guest. Possiamo provare a eliminare file non necessari su questo disco virtuale. Tuttavia, Linux non azzera automaticamente i blocchi dopo l’eliminazione dei file; dovrai farlo tu stesso. Puoi farlo utilizzando l’utilità dd (data duplicator) per copiare e convertire i dati. Questo strumento è disponibile su tutti i sistemi Linux.

Nota: Prima di eseguire l’utilità dd, è necessario assicurarsi che il datastore abbia abbastanza capacità per utilizzarla (ad esempio, per il server ESXi, è possibile controllare la capacità di archiviazione nella sezione archiviazione del client vSphere – vai a Configurazione > Archiviazione).

Utilizziamo l’utilità dd.

  1. Prima, controlliamo lo spazio libero su una macchina virtuale Linux ospite utilizzando il comando df -h:

    root@test-virtual-machine:/# df -h

    Otteniamo il seguente output nella console:

    Filesystem   Size   Used   Avail   Use%   Mounted on
    udev         469M   0      469M    0%     /dev
    tmpfs        99M    6,3M   92M     7%     /run
    /dev/sda7    17G    8,8G   6,4G    58%    /
    tmpfs        491M   116K   491M    1%     /dev/shm
    tmpfs        5,0M   4,0K   5,0M    1%     /run/lock
    tmpfs        491M   0      491M    0%     /sys/fs/cgroup
    /dev/sda1    945M   121M   760M    14%    /boot
    /dev/sda6    3,7G   13M    3,5G    1%     /var/log
    tmpfs        99M    36K    99M     1%     /run/user/1000
    

    Da quest’output possiamo vedere che la partizione / (root) contiene 8,8 GB di file.

  2. Eliminiamo alcuni gigabyte di file non necessari nella partizione root. Ecco cosa vediamo nella console se eseguiamo il comando df -h /:

    Filesystem   Size   Used   Avail   Use%   Mounted on
    /dev/sda7    17G    4,7G   11G     31%    /

    Quindi, la nostra partizione root ora contiene 4,7 GB di file. Tuttavia, andando nella directory dove è situato il nostro file VMDK, possiamo vedere che la sua dimensione è ancora di 10,266,496 KB (10 GB).

  3. Ora riempiamo lo spazio libero con zeri (nel nostro caso, riempiamo 10 GB su 11 GB disponibili). Per prima cosa, digitiamo cd seguito dal nome della directory alla quale è montata la partizione che deve essere azzerata (nel nostro caso è cd /, perché vogliamo navigare alla partizione root). Dopo di che, eseguiamo il seguente comando, modificando le variabili per adattarle alle nostre esigenze:

    dd bs=1M count=10240 if=/dev/zero of=zero

    In questo comando:

    • dd può essere eseguito solo come super utente.
    •  bs imposta la dimensione del blocco (ad esempio, bs=1M ti darebbe una dimensione del blocco di 1 Megabyte).
    •  count specifica il numero di blocchi da copiare (il valore predefinito è perché dd continui all’infinito o fino a quando l’input non si esaurisce). Nel nostro caso, 10,240 MB è la quantità di spazio libero che vogliamo riempire con zeri, quindi il numero di blocchi da 1 Megabyte è 10240.
    •  if sta per “file di input”. Qui devi indicare la fonte da cui desideri copiare i dati. Nel nostro caso, è /dev/zero – un file speciale (un pseudodispositivo) che fornisce tanti caratteri nulli quanti ne vuoi leggere.
    •  of sta per “file di output”. Qui imposti la destinazione dove desideri scrivere/incollare i tuoi dati (nel nostro caso, il nome del file è zero).

    Dopo aver eseguito il comando sopra, la dimensione del nostro file VMDK cresce. Questo è l’output che vediamo dopo il completamento con successo del comando:

    10240+0 record in
    10240+0 record out
    10737418240 byte (10 GB) copiati, 59,4348 s, 181 MB/s
    Comando completato con successo.

    Quindi, ora la dimensione del nostro file VMDK è di 11,321,856 KB (10.8 GB), il che significa che si è espanso. Inoltre, se eseguiamo nuovamente il comando df -h /, vedremo quanto segue:

    Filesystem   Size   Used   Avail   Use%   Mounted on
    /dev/sda7    17G    15G    569M    97%    /

    Questo significa che quasi tutta la partizione root (cioè il 97%) è occupata. Questo perché abbiamo riempito la maggior parte dello spazio precedentemente “disponibile” con zeri. Ora, il nostro disco virtuale a sottoprovisionamento sottile è pronto per essere ridotto.

Nota: Per eseguire il ridimensionamento, è necessario installare VMware Tools.

  1. Per le macchine virtuali in esecuzione su VMware ESXi o VMware Workstation, eseguiamo i seguenti due comandi nel sistema operativo guest Linux.a) Per assicurarci che la partizione del disco sia disponibile, eseguiamo il comando:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk list

    Ecco l’output che vediamo nel nostro caso (ossia, vediamo l’elenco delle partizioni disponibili):

    /
    /boot
    /var/log

    La partizione di root è presente, quindi possiamo procedere.b) Per ridurre la partizione, eseguiamo il seguente comando:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk shrink /

    Ecco l’output che vediamo nel nostro caso:

    Si prega di ignorare qualsiasi avviso riguardante lo spazio su disco durante il processo di ridimensionamento.
    Progresso: 100 [===========>]
    Ridimensionamento del disco completato.
    

    Adesso, le dimensioni del nostro file VMDK ridimensionato sono 5.323.456 KB (cioè, 5,08 GB – molto meno dei 10,8 GB precedenti).

Nota: Se la tua macchina virtuale guest è in esecuzione su un server ESXi, dopo aver riempito i blocchi con zeri, puoi seguire questi passaggi:

  1. Spegnete la macchina virtuale o disconnettete il disco virtuale che desiderate ridurre.
  2. Connettiti all’host ESXi con il client SSH.
  3. Naviga nella cartella della macchina virtuale.
  4. Verifica l’utilizzo del disco con du -h.
  5. Esegui vmkfstools -K test-virtual-machine.vmdk.
  6. Verifica nuovamente l’utilizzo del disco con du -h.

Ridimensionamento dei Dischi VMware Thin-Provisioned in Windows

Come Linux, Windows non cancella automaticamente i blocchi dopo l’eliminazione dei file. Per poter azzerare lo spazio libero dei dischi di destinazione sulla tua macchina virtuale Windows, è necessario scaricare SDelete – un’utilità gratuita della suite Sysinternals di Microsoft – e decomprimere i file dall’archivio scaricato in c:\program files\sdelete

Seguire poi questi passaggi:

  1. Eseguire cmd
  2. Andare alla cartella in cui si trova SDelete. Nel nostro caso, è: cd c:\program files\sdelete

  3. Per ogni partizione nella console, utilizzare il comando sdelete -z. Ecco cosa abbiamo nel nostro caso:

    sdelete -z c:
    sdelete -z d:

    Questi comandi azzereranno qualsiasi spazio libero sul disco sottoprovisionato riempiendo lo spazio non utilizzato nelle partizioni specificate. Attendere un paio di minuti fino al completamento del processo. Il file VMDK si espanderà alla sua dimensione massima durante il processo.

  4. Assicurati che VMware Tools siano installati sulla tua macchina virtuale Windows. Di default, VMware Tools sono installati in c:\program files\vmware\vmware tools\

    Naviga in questa directory digitando:

    cd c:\program files\vmware\vmware tools\

  5. Per visualizzare le partizioni del disco disponibili, digita:

    vmwaretoolboxcmd disk list

  6. Ridimensiona le partizioni del disco di cui hai bisogno. Nel nostro caso, abbiamo eseguito i comandi:

    vmwaretoolboxcmd disk shrink c:\
    vmwaretoolboxcmd disk shrink d:\

    Attendi finché il programma non avrà terminato il ridimensionamento del disco.

Puoi utilizzare questo metodo per le macchine virtuali che girano su VMware ESXi o VMware Workstation.

VMware Storage Distributed Resource Scheduler

Sopra, abbiamo menzionato una soluzione per ridurre manualmente i dischi thin-provisioned. Tuttavia, c’è un altro modo per gestire i tuoi dischi virtuali (sia thin-provisioned che thick-provisioned), se utilizzi un cluster datastore in vSphere. VMware fornisce la migrazione automatica dei dischi virtuali all’interno del cluster datastore per evitare l’overflow dello spazio su disco dove si trovano i dischi virtuali thin-provisioned e per bilanciare le risorse di I/O.

Se hai più di un datastore condiviso montato sul server ESXi, puoi configurare lo Scheduler delle Risorse Distribuite dello Storage (Storage DRS). Lo Storage DRS è una funzionalità intelligente di vCenter Server per gestire in modo efficiente lo storage VMFS e NFS che fornisce il posizionamento e la migrazione automatica dei dischi delle macchine virtuali. Puoi anche impostare lo Storage DRS su modalità manuale se preferisci approvare manualmente le raccomandazioni di migrazione.

Segui questi passaggi per abilitare lo Storage DRS:

  1. Accedi al cluster del datastore nel client Web vSphere.
  2. Vai a vCenter > Cluster Datastore.
  3. Seleziona il tuo cluster datastore e clicca su Gestisci > Impostazioni > Servizi > Storage DRS.
  4. Clicca su Modifica.
  5. Configura le impostazioni di automazione, le funzioni correlate all’I/O e le opzioni avanzate che ti servono.
  6. Clicca su OK per finire.

Se non ci sono cluster datastore nel tuo ambiente vSphere, segui questi passaggi per creare e configurare un nuovo cluster datastore:

  1. Vai su vCenter > Datacenters nel client web di vSphere.
  2. Fai clic con il pulsante destro del mouse sul tuo Datacenter e seleziona Nuovo cluster di datastore.
  3. Inserisci il nome del tuo cluster di datastore e spunta la casella vicino a “Attiva Storage DRS“.
  4. Seleziona le impostazioni di automazione, le funzioni correlate all’I/O e le opzioni avanzate di cui hai bisogno.
  5. Fai clic su OK per finire.

Conclusioni

In questo post del blog, abbiamo preso in considerazione i tipi di dischi virtuali e valutato i vantaggi e gli svantaggi di ciascuno al fine di comprendere meglio le differenze tra provisioning spesso e provisioning sottile. I dischi a provisioning spesso con allocazione a zero immediato sono i migliori per prestazioni e sicurezza, ma richiedono abbastanza spazio di archiviazione libero e richiedono molto tempo per essere creati. I dischi a provisioning spesso con allocazione a zero ritardata sono buoni per i loro tempi di creazione ridotti, ma non forniscono la stessa velocità dei dischi a zero immediato e sono meno sicuri. I dischi a provisioning sottile sono la scelta migliore per risparmiare spazio di datastore al momento della creazione del disco.

Puoi creare un disco virtuale con una dimensione massima maggiore dello spazio fisico disponibile (“sovrapposizione”) e aggiungere più archiviazione fisica in futuro, ma ricorda che se lo spazio disco fisico si riempie e il disco a provisioning sottile non può crescere per ospitare più dati, le tue macchine virtuali diventeranno inutilizzabili, quindi non dimenticare di controllare la quantità di spazio libero. Abbiamo anche esaminato i metodi per ridurre i dischi virtuali VMware a provisioning sottile, nel caso preferissi non aggiungere più archiviazione e abbassi lo spazio occupato.

Source:
https://www.nakivo.com/blog/thick-and-thin-provisioning-difference/