Provisioning “thick” e “thin”: qual è la differenza?

In questo articolo analizzeremo nei dettagli l’aspetto della pre-allocazione dello spazio di storage nelle impostazioni dei dischi virtuali e scopriremo cosa sono il thick provisioning e il thin provisioning, in cosa differiscono e quale di questi tipi di pre-allocazione dello spazio di storage sia più adatto alla vostra Infrastruttura.

Prova NAKIVO Backup & Replication

Prova NAKIVO Backup & Replication

Richiedi una prova gratuita per scoprire tutte le funzionalità di protezione dei dati offerte dalla soluzione. 15 giorni gratuiti. Nessuna limitazione in termini di funzionalità o capacità. Non è obbligatoria alcuna carta di credito.

Thick Provisioning

Il thick provisioning è un tipo di pre-allocazione dello spazio di archiviazione. Con il thick provisioning, l’intera capacità di archiviazione del disco virtuale viene pre-allocata sullo storage fisico al momento della creazione del disco virtuale. Un disco virtuale con thick provisioning occupa fin dall’inizio tutto lo spazio allocatogli nell’archivio dati, rendendo tale spazio non disponibile per l’uso da parte di altre VM.

Esistono due sottotipi di dischi virtuali con thick provisioning:

  • Un Lazy zeroed disk è un disco che occupa tutto il proprio spazio al momento della creazione, ma tale spazio può contenere alcuni dati precedenti sul supporto fisico. Questi dati precedenti non vengono cancellati né sovrascritti, pertanto devono essere “azzerati” prima che i nuovi dati possano essere scritti nei blocchi. Questo tipo di disco può essere creato più rapidamente, ma le sue prestazioni saranno inferiori durante le prime operazioni di scrittura a causa dell’aumento degli IOPS (operazioni di input/output al secondo) per i nuovi blocchi;
  • Un Eager zeroed disk è un disco che occupa tutto lo spazio obbligatorio già al momento della sua creazione, e lo spazio viene completamente ripulito da qualsiasi dato precedente presente sul supporto fisico. La creazione di dischi con azzeramento immediato richiede più tempo, poiché gli zeri vengono scritti sull’intero disco, ma le loro prestazioni sono più elevate durante le prime operazioni di scrittura. Questo sottotipo di disco virtuale con allocazione a pieno supporto (thick-provisioned) supporta funzioni di clustering, come la tolleranza ai guasti.

Thick provisioning

Per motivi di sicurezza dei dati, l’azzeramento immediato è più comune dell’azzeramento differito con i dischi virtuali con allocazione a pieno supporto. Perché? Quando si elimina un VMDK, i dati presenti sull’archivio dati non vengono completamente cancellati; i blocchi vengono semplicemente contrassegnati come disponibili, finché il sistema operativo non li sovrascrive. Se si crea un disco virtuale con azzeramento immediato su questo archivio dati, l’area del disco verrà completamente cancellata (ovvero azzerata), impedendo così a chiunque abbia intenzioni malevole di ripristinare i dati precedenti, anche utilizzando software di terze parti specializzato.

Thin Provisioning

Il thin provisioning è un altro tipo di pre-allocazione dello spazio di storage. Un disco virtuale con thin provisioning occupa inizialmente solo lo spazio di cui ha bisogno e cresce nel tempo in base alla domanda.

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

Thin Provisioning

I dischi virtuali con thin provisioning sono veloci da creare e utili per risparmiare spazio di storage. Le prestazioni di un disco con allocazione dinamica non sono superiori a quelle di un disco con allocazione statica azzerato in modo differito, poiché per entrambi questi tipi di disco è necessario scrivere degli zeri prima di scrivere i dati in un nuovo blocco. Si noti che quando si eliminano i dati da un disco virtuale con allocazione dinamica, la dimensione del disco non viene ridotta automaticamente. Ciò è dovuto al fatto che il sistema operativo elimina solo gli indici dalla tabella dei file che fanno riferimento al corpo del file nel file system; contrassegna i blocchi che appartenevano ai file “eliminati” come liberi e accessibili per la scrittura di nuovi dati. Questo è il motivo per cui la rimozione dei file appare istantanea. Se si trattasse di un’eliminazione completa, in cui venissero scritti degli zeri sui blocchi occupati dai file eliminati, ci vorrebbe all’incirca lo stesso tempo necessario per copiare i file in questione. Si veda l’illustrazione semplificata qui sotto.

View from the operating system

Problemi che possono verificarsi durante l’utilizzo di dischi virtuali con allocazione dinamica

L’utilizzo di dischi virtuali con allocazione dinamica non è sempre privo di intoppi. Esistono alcuni problemi di cui è necessario essere consapevoli e ai quali bisogna essere preparati ad affrontare.

Consideriamo un esempio che rende le VM inutilizzabili. Ad esempio, abbiamo un archivio dati da 20 GB su cui sono in esecuzione tre VM. Ogni VM dispone di un set di dischi virtuali con allocazione dinamica (thin-provisioned) con una dimensione massima di 10 GB. (Questa pratica è denominata “overprovisioning”: si assegna ai dischi virtuali più spazio di quello che possono occupare fisicamente. Si tratta di una pratica comune, poiché consente di garantire la scalabilità del sistema aggiungendo ulteriore spazio di storage fisico in base alle esigenze.) La dimensione di ciascun disco virtuale aumenterà man mano che vengono aggiunti dati, fino a quando non rimarrà più spazio libero sull’archivio dati. La situazione diventa critica quando sull’archivio dati rimane solo 1 GB di spazio libero, come ad esempio quando la VM1 occupa 8 GB, la VM2 occupa 7 GB e la VM3 occupa 4 GB.

I normali metodi di eliminazione dei file all’interno delle VM non consentono di ridurre le dimensioni dei dischi virtuali con allocazione dinamica. Se in una qualsiasi di queste VM viene scritto più di 1 GB di nuovi dati, tutte e tre smetteranno di funzionare e sarà necessario migrare una o più VM su un altro archivio dati per ripristinarne lo stato di funzionamento.

Come ridurre le dimensioni di un disco virtuale con allocazione dinamica dopo l’eliminazione dei file

Per poter ridurre le dimensioni del file VMDK dei dischi virtuali con allocazione dinamica, è necessario sapere come azzerare i blocchi precedentemente occupati dai dati eliminati. Scopriamo come farlo. Nota: Le operazioni di riduzione delle dimensioni dei dischi sono possibili solo se le VM non contengono snapshot. Si prega inoltre di prestare attenzione ed eseguire i comandi sotto la propria responsabilità. Eseguire sempre il backup di tutti i dati importanti prima di effettuare qualsiasi operazione sui dischi.

Riduzione dei dischi VMware con allocazione dinamica (Thin-Provisioned) in Linux

Consideriamo un esempio: abbiamo un file VMDK da 10.266.496 KB (10 GB) (ne abbiamo appreso la dimensione accedendo alla directory sull’archivio dati in cui si trova la nostra VM) e vogliamo ridurre il disco virtuale su cui è installato il sistema operativo Linux guest. Possiamo provare a eliminare i file non necessari presenti su questo disco virtuale. Tuttavia, Linux non azzera automaticamente i blocchi dopo l’eliminazione dei file; dovrete farlo manualmente. È possibile farlo utilizzando l’utilità dd (data duplicator) per la copia e la conversione dei dati. Questo strumento è disponibile su tutti i sistemi Linux.

Nota: Prima di eseguire l’utilità dd , è necessario assicurarsi che l’archivio dati disponga di capacità sufficiente per utilizzarlo (ad esempio, per un server ESXi, è possibile verificare la capacità di archiviazione nella sezione “Storage” del client vSphere – andare su Configuration > Storage).

Utilizziamo l’utilità dd .

  1. Per prima cosa, verifichiamo lo spazio libero su una VM Linux guest 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 questo output possiamo vedere che la partizione / (root) contiene 8,8 GB di file.

  2. Eliminiamo alcuni gigabyte di file non necessari dalla 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% /

    Pertanto, la nostra partizione root ora contiene 4,7 GB di file. Tuttavia, accedendo alla directory con l’ubicazione del nostro file VMDK, possiamo notare che la sua dimensione è ancora di 10.266.496 KB (10 GB).

  3. Ora riempiremo lo spazio libero con degli zero (nel nostro caso, riempiremo 10 GB su 11 GB disponibili). Per prima cosa, digitiamo cd seguito dal nome della directory in cui è montata la partizione che deve essere azzerata (nel nostro caso è cd /, poiché vogliamo accedere alla partizione root). Successivamente, eseguiamo il seguente comando, modificando le variabili in base alle nostre esigenze:

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

    In questo comando:

    • dd può essere eseguito solo come superutente.
    • bs imposta la dimensione del blocco (ad esempio, bs=1M imposterebbe una dimensione del blocco di 1 megabyte).
    • count specifica il numero di blocchi da copiare (l’impostazione predefinita è che dd continui all’infinito o fino all’esaurimento dei dati in ingresso). 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 è necessario indicare l’origine da cui si desidera copiare i dati. Nel nostro caso, è /dev/zero – un file speciale (uno pseudo-dispositivo) che fornisce tutti i caratteri nulli che si desidera leggere da esso.
    • of sta per «file di output». Qui si imposta la destinazione in cui si desidera scrivere/incollare i dati (nel nostro caso, il nome del file è zero).

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

    10240+0 records in
    10240+0 records out
    10737418240 bytes (10 GB) copied, 59,4348 s, 181 MB/s
    Command has been completed successfully.

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

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

Nota: Per eseguire la riduzione, è necessario installare VMware Tools.

  1. Per le VM 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

    Questo è l’output che vediamo nel nostro caso (ovvero, vediamo l’elenco delle partizioni disponibili):

    /
    /boot
    /var/log

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

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

    Ecco il risultato che vediamo nel nostro caso:

    Please disregard any warnings about disk space for the duration of shrink process.
    Progress: 100 [===========>]
    Disk shrinking complete.

    Ora, la dimensione del nostro file VMDK ridotto è di 5.323.456 KB (ovvero 5,08 GB – molto meno dei 10,8 GB precedenti).

Nota: Se la vostra VM è in esecuzione su un server ESXi, dopo aver riempito i blocchi con zeri, potete seguire questi passaggi:

  1. Spegnere la VM oppure scollegare il disco virtuale che si desidera ridurre.
  2. Connettersi all’host ESXi tramite il client SSH.
  3. Accedere a Virtual Machine Folder.
  4. Verifica l’utilizzo del disco con du -h.
  5. Eseguire vmkfstools -K test-virtual-machine.vmdk.
  6. Verifica nuovamente l’utilizzo del disco con du -h .

Riduzione dei dischi VMware con allocazione dinamica in Windows

Come Linux, Windows non azzera automaticamente i blocchi dopo l’eliminazione dei file. Per poter azzerare lo spazio libero dei dischi di destinazione sulla VM Windows, è necessario scaricare SDelete – un’utilità gratuita della suite Sysinternals di Microsoft – ed estrarre i file dall’archivio scaricato in c:program filessdelete

Quindi seguire questi passaggi:

  1. Eseguire cmd
  2. Andare alla directory in cui si trova SDelete . Nel nostro caso, è: cd c:program filessdelete

  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 lo spazio libero sul disco con allocazione dinamica, riempiendo lo spazio inutilizzato sulle partizioni specificate. Attendere un paio di minuti fino a quando il processo termina. Il file VMDK si espanderà fino alla sua dimensione massima durante il processo.

  4. Assicurati che VMware Tools sia installato sulla tua VM Windows. Per impostazione predefinita, VMware Tools viene installato in c:program filesvmwarevmware tools

    Accedi a questa directory digitando:

    cd c:program filesvmwarevmware tools

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

    vmwaretoolboxcmd disk list

  6. Riduci le partizioni del disco che ti servono. Nel nostro caso, abbiamo eseguito i comandi:

    vmwaretoolboxcmd disk shrink c:
    vmwaretoolboxcmd disk shrink d:

    Attendi che il programma abbia completato la riduzione del disco.

Puoi utilizzare questo metodo per le VM in esecuzione su VMware ESXi o VMware Workstation.

VMware Storage Distributed Resource Scheduler

In precedenza abbiamo menzionato una soluzione per ridurre manualmente i dischi con allocazione thin. Tuttavia, esiste un altro modo per gestire i dischi virtuali (sia con allocazione thin che con allocazione thick), se si utilizza un cluster di archivio dati in VMware vSphere. VMware offre la migrazione automatica dei dischi virtuali all’interno del cluster di archivi dati per evitare il sovraccarico dello spazio su disco in cui si trovano i dischi virtuali con allocazione thin e per bilanciare le risorse di I/O.

Se si dispone di più di un archivio dati condiviso montato sul server ESXi, è possibile configurare lo Storage Distributed Resource Scheduler (Storage DRS). Storage DRS è una funzione intelligente di vCenter Server che consente di gestire in modo efficiente lo storage VMFS e NFS, fornendo il posizionamento e la migrazione automatici dei dischi delle VM. È inoltre possibile impostare Storage DRS in modalità manuale se si preferisce approvare manualmente i suggerimenti di migrazione.

Seguire questi passaggi per abilitare Storage DRS:

  1. Accedere al cluster di archivio dati in vSphere Web Client.
  2. Andare su vCenter > Datastore Clusters.
  3. Selezionare il proprio cluster di archivio dati e fare clic su Manage > Settings > Services > Storage DRS.
  4. Fare clic su Edit.
  5. Configurare le impostazioni di automazione, le funzionalità relative all’I/O e le opzioni avanzate necessarie.datastore-cluster
  6. Fare clic su OK per terminare.

Se nell’ambiente vSphere non sono presenti archivi dati, seguire questi passaggi per crearne e configurarne uno nuovo:

  1. Accedere a vCenter > Datacenters nel vSphere Web Client.
  2. Fare clic con il tasto destro del mouse sul proprio datacenter e selezionare New Datastore Cluster.
  3. Inserire il nome del cluster di archivio dati e spuntare la casella di controllo accanto a "Turn On Storage DRS".
  4. Selezionare le impostazioni di automazione, le funzioni relative all’I/O e le opzioni avanzate necessarie.
  5. Fare clic su OK per terminare.

Conclusione

In questo post del blog abbiamo esaminato i tipi di dischi virtuali e valutato i vantaggi e gli svantaggi di ciascuno, al fine di comprendere meglio le differenze tra il thick provisioning e il thin provisioning. I dischi con thick provisioning e azzeramento immediato (eager zeroed) sono i migliori in termini di prestazioni e sicurezza, ma richiedono spazio di storage libero sufficiente e la loro creazione richiede molto tempo. I dischi con thick provisioning e azzeramento differito (lazy zeroed) sono vantaggiosi per i tempi di creazione ridotti, ma non offrono la stessa velocità dei dischi con azzeramento immediato e sono meno sicuri. I dischi con thin provisioning rappresentano la scelta migliore per risparmiare spazio nell’archivio dati al momento della creazione del disco.

È possibile creare un disco virtuale con una dimensione massima superiore allo spazio fisico disponibile (“overprovisioning”) e aggiungere ulteriore spazio di storage fisico in futuro; tuttavia, è importante ricordare che se lo spazio sul disco fisico si esaurisce e il disco con allocazione dinamica non può espandersi per accogliere ulteriori dati, le VM diventeranno inutilizzabili: pertanto, è fondamentale tenere sotto controllo la quantità di spazio libero. Abbiamo inoltre esaminato i metodi per ridurre le dimensioni dei dischi virtuali VMware con thin provisioning, nel caso in cui si preferisca non aggiungere ulteriore storage e sia necessario ridurre lo spazio occupato.

NAKIVO per il backup di VMware vSphere

NAKIVO per il backup di VMware vSphere

Protezione completa dei dati per le macchine virtuali VMware vSphere e opzioni di ripristino istantaneo. Destinazioni di backup sicure onsite, offsite e nel cloud. Funzioni anti-ransomware.

Le persone leggono anche