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

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.

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.

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 .
-
Per prima cosa, verifichiamo lo spazio libero su una VM Linux guest utilizzando il comando
df -h:root@test-virtual-machine:/# df -hOtteniamo 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/1000Da questo output possiamo vedere che la partizione
/(root) contiene 8,8 GB di file. -
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).
-
Ora riempiremo lo spazio libero con degli zero (nel nostro caso, riempiremo 10 GB su 11 GB disponibili). Per prima cosa, digitiamo
cdseguito 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=zeroIn questo comando:
ddpuò essere eseguito solo come superutente.bsimposta la dimensione del blocco (ad esempio,bs=1Mimposterebbe una dimensione del blocco di 1 megabyte).countspecifica il numero di blocchi da copiare (l’impostazione predefinita è cheddcontinui 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.-
ifsta 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. ofsta 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.
-
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:
- Spegnere la VM oppure scollegare il disco virtuale che si desidera ridurre.
- Connettersi all’host ESXi tramite il client SSH.
- Accedere a
Virtual Machine Folder. - Verifica l’utilizzo del disco con
du -h. - Eseguire
vmkfstools -K test-virtual-machine.vmdk. - 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:
- Eseguire
cmd -
Andare alla directory in cui si trova
SDelete. Nel nostro caso, è:cd c:program filessdelete -
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.
-
Assicurati che VMware Tools sia installato sulla tua VM Windows. Per impostazione predefinita, VMware Tools viene installato in
c:program filesvmwarevmware toolsAccedi a questa directory digitando:
cd c:program filesvmwarevmware tools -
Per visualizzare le partizioni del disco disponibili, digita:
vmwaretoolboxcmd disk list -
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:
- Accedere al cluster di archivio dati in vSphere Web Client.
- Andare su
vCenter > Datastore Clusters. - Selezionare il proprio cluster di archivio dati e fare clic su
Manage > Settings > Services > Storage DRS. - Fare clic su
Edit. - Configurare le impostazioni di automazione, le funzionalità relative all’I/O e le opzioni avanzate necessarie.

- Fare clic su
OKper terminare.
Se nell’ambiente vSphere non sono presenti archivi dati, seguire questi passaggi per crearne e configurarne uno nuovo:
- Accedere a
vCenter > Datacentersnel vSphere Web Client. - Fare clic con il tasto destro del mouse sul proprio datacenter e selezionare
New Datastore Cluster. - Inserire il nome del cluster di archivio dati e spuntare la casella di controllo accanto a
"Turn On Storage DRS". - Selezionare le impostazioni di automazione, le funzioni relative all’I/O e le opzioni avanzate necessarie.
- Fare clic su
OKper 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.