Aprovisionamiento «thick» y «thin»: ¿en qué se diferencian?
En este artículo, vamos a analizar en detalle el aspecto de la preasignación de almacenamiento en los ajustes de los discos virtuales y a averiguar qué son el aprovisionamiento «thick» y el «thin», en qué se diferencian y cuál de estos tipos de preasignación de almacenamiento es más adecuado para tu infraestructura.
Asignación completa
La asignación completa es un tipo de preasignación de almacenamiento. Con la asignación completa, la capacidad total de almacenamiento del disco virtual se preasigna en el almacenamiento físico en el momento de crear el disco virtual. Un disco virtual con asignación completa consume todo el espacio que se le ha asignado en el almacén de datos desde el principio, por lo que ese espacio no está disponible para que lo utilicen otras máquinas virtuales.
Existen dos subtipos de discos virtuales con aprovisionamiento denso:
- Un
Lazy zeroed diskes un disco que ocupa todo su espacio en el momento de su creación, pero este espacio puede contener algunos datos antiguos en el soporte físico. Estos datos antiguos no se borran ni se sobrescriben, por lo que es necesario «ponerlos a cero» antes de que se puedan escribir nuevos datos en los bloques. Este tipo de disco se puede crear más rápidamente, pero su rendimiento será menor durante las primeras escrituras debido al aumento de las IOPS (operaciones de entrada/salida por segundo) para los nuevos bloques; - Un
Eager zeroed diskes un disco que obtiene todo el espacio necesario en el momento de su creación, y dicho espacio se limpia por completo de cualquier dato anterior presente en el soporte físico. La creación de discos con «eager zeroing» lleva más tiempo, ya que se escriben ceros en todo el disco, pero su rendimiento es mayor durante las primeras escrituras. Este subtipo de disco virtual con aprovisionamiento completo admite funciones de clúster, como la tolerancia a fallos.

Por motivos de seguridad de los datos, el «eager zeroing» es más habitual que el «lazy zeroing» en los discos virtuales con aprovisionamiento completo. ¿Por qué? Cuando se elimina un VMDK, los datos del almacén de datos no se borran por completo; los bloques simplemente se marcan como disponibles, hasta que el sistema operativo los sobrescribe. Si se crea un disco virtual con «eager zeroing» en este almacén de datos, el área del disco se borrará por completo (es decir, se pondrá a ceros), lo que impedirá que cualquier persona con malas intenciones pueda recuperar los datos anteriores, incluso si utiliza software especializado de terceros.
Aprovisionamiento delgado
El aprovisionamiento delgado es otro tipo de preasignación de almacenamiento. Un disco virtual con aprovisionamiento delgado consume solo el espacio que necesita inicialmente y crece con el tiempo según la demanda.
Por ejemplo, si se crea un nuevo disco virtual de 30 GB con aprovisionamiento fino y se copian 10 GB de archivos en él, el tamaño del archivo VMDK resultante será de 10 GB, mientras que se obtendría un archivo VMDK de 30 GB si se hubiera optado por utilizar un disco con aprovisionamiento grueso.

Los discos virtuales con aprovisionamiento fino se crean rápidamente y resultan útiles para ahorrar espacio de almacenamiento. El rendimiento de un disco con aprovisionamiento delgado no es superior al de un disco con aprovisionamiento denso y ceros diferidos, ya que en ambos tipos de disco es necesario escribir ceros antes de escribir datos en un nuevo bloque. Ten en cuenta que, cuando eliminas datos de un disco virtual con aprovisionamiento delgado, el tamaño del disco no se reduce automáticamente. Esto se debe a que el sistema operativo solo elimina de la tabla de archivos los índices que hacen referencia al cuerpo del archivo en el sistema de archivos; marca los bloques que pertenecían a los archivos «eliminados» como libres y accesibles para que se escriban nuevos datos en ellos. Por eso la eliminación de archivos nos parece instantánea. Si se tratara de una eliminación completa, en la que se escribieran ceros sobre los bloques que ocupaban los archivos eliminados, se tardaría aproximadamente el mismo tiempo que en copiar los archivos en cuestión. Véase la ilustración simplificada a continuación.

Problemas que pueden surgir al utilizar discos virtuales con aprovisionamiento ligero
El uso de discos virtuales con aprovisionamiento ligero no siempre es sencillo. Hay algunos problemas que debe tener en cuenta y para los que debe estar preparado.
Consideremos un ejemplo que deja las máquinas virtuales inutilizables. Por ejemplo, tenemos un almacén de datos de 20 GB con tres máquinas virtuales ejecutándose en él. Cada máquina virtual tiene un conjunto de discos virtuales con aprovisionamiento delgado con un tamaño máximo de 10 GB. (Esta práctica se denomina «sobreaprovisionamiento»: asignamos a los discos virtuales más espacio del que pueden ocupar físicamente. Se hace a menudo, ya que permite la ampliación del sistema añadiendo más almacenamiento físico según sea necesario). El tamaño de cada disco virtual aumentará a medida que se añadan datos, hasta que no quede espacio libre en el almacén de datos. La situación se vuelve crítica cuando solo queda 1 GB de espacio libre en el almacén de datos, como ocurre, por ejemplo, cuando la VM1 ocupa 8 GB, la VM2 ocupa 7 GB y la VM3, 4 GB.
Los métodos habituales de eliminación de archivos dentro de las máquinas virtuales no servirán para reducir el tamaño de los discos virtuales con aprovisionamiento ligero. Si se escriben más de 1 GB de datos nuevos en cualquiera de estas máquinas virtuales, las tres dejarán de funcionar, y tendrás que migrar una o varias de ellas a otro almacén de datos para restablecer su estado de funcionamiento.
Cómo reducir el tamaño de un disco virtual con aprovisionamiento fino después de eliminar archivos
Para poder reducir el tamaño del archivo VMDK de sus discos virtuales con aprovisionamiento fino, debe saber cómo poner a cero los bloques que ocupaban los datos que ha eliminado previamente. Veamos cómo hacerlo. Nota: Las operaciones de reducción de discos solo son posibles si las máquinas virtuales no contienen instantáneas. Además, ten cuidado y ejecuta los comandos bajo tu propia responsabilidad. Haz siempre un backup de todos tus datos importantes antes de llevar a cabo cualquier operación en el disco.
Reducción de discos VMware con aprovisionamiento fino en Linux
Veamos un ejemplo: tenemos un archivo VMDK de 10 266 496 KB (10 GB) (hemos comprobado su tamaño accediendo al directorio del almacén de datos donde se encuentra nuestra máquina virtual) y queremos reducir el disco virtual en el que está instalado el sistema operativo Linux invitado. Podemos intentar eliminar los archivos innecesarios de este disco virtual. Sin embargo, Linux no pone a cero automáticamente los bloques después de eliminar los archivos; tendrás que hacerlo tú mismo. Para ello, puede utilizar la utilidad « dd » (duplicador de datos) para copiar y convertir datos. Esta herramienta está disponible en todos los sistemas Linux.
Nota: Antes de ejecutar la utilidad « dd », es necesario asegurarse de que el almacén de datos tiene capacidad suficiente para utilizarla (por ejemplo, en el caso de un servidor ESXi, puede comprobar la capacidad de almacenamiento en la sección de almacenamiento del cliente vSphere; vaya a Configuration > Storage).
Utilicemos la utilidad dd .
-
En primer lugar, comprobamos el espacio libre en una máquina virtual Linux invitada mediante el comando
df -h:root@test-virtual-machine:/# df -hObtenemos el siguiente resultado en la consola:
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/1000En este resultado podemos ver que la partición
/(root) contiene 8,8 GB de archivos. -
Eliminemos unos cuantos gigabytes de archivos innecesarios de la partición raíz. Esto es lo que vemos en la consola al ejecutar el comando
df -h /:Filesystem Size Used Avail Use% Mounted on
/dev/sda7 17G 4,7G 11G 31% /Así pues, nuestra partición raíz contiene ahora 4,7 GB de archivos. Sin embargo, al acceder al directorio donde se encuentra la ubicación de nuestro archivo VMDK, vemos que su tamaño sigue siendo de 10 266 496 KB (10 GB).
-
Ahora vamos a rellenar el espacio libre con ceros (en nuestro caso, rellenaremos 10 GB de los 11 GB disponibles). En primer lugar, escribimos
cdseguido del nombre del directorio en el que está montada la partición que hay que rellenar con ceros (en nuestro caso escd /, ya que queremos acceder a la partición raíz). Después de eso, ejecutamos el siguiente comando, modificando las variables según nuestras necesidades:dd bs=1M count=10240 if=/dev/zero of=zeroEn este comando:
ddsolo se puede ejecutar como superusuario.bsestablece el tamaño del bloque (por ejemplo,bs=1Mte daría un tamaño de bloque de 1 megabyte).countespecifica el número de bloques que se van a copiar (por defecto,ddcontinúa indefinidamente o hasta que se agote la entrada). En nuestro caso, 10 240 MB es la cantidad de espacio libre que queremos rellenar con ceros, por lo que el número de bloques de 1 megabyte es 10 240.-
ifsignifica «archivo de entrada». Aquí es donde debes indicar el origen desde el que deseas copiar los datos. En nuestro caso, es/dev/zero– un archivo especial (un pseudodispositivo) que proporciona tantos caracteres nulos como desees leer de él. ofsignifica «archivo de salida». Aquí es donde se establece el destino en el que se desea escribir o pegar los datos (en nuestro caso, el nombre del archivo eszero).
Después de ejecutar el comando anterior, el tamaño de nuestro archivo VMDK aumenta. Este es el resultado que vemos después de que el comando se complete con éxito:
10240+0 records in
10240+0 records out
10737418240 bytes (10 GB) copied, 59,4348 s, 181 MB/s
Command has been completed successfully.Así pues, ahora el tamaño de nuestro archivo VMDK es de 11 321 856 KB (10,8 GB), lo que significa que se ha ampliado. Además, si volvemos a ejecutar el comando
df -h /, veremos lo siguiente:Filesystem Size Used Avail Use% Mounted on
/dev/sda7 17G 15G 569M 97% /Esto significa que casi toda la partición raíz (es decir, el 97 %) está ocupada. Esto se debe a que hemos rellenado con ceros la mayor parte del espacio que antes estaba «disponible». Ahora, nuestro disco virtual con aprovisionamiento delgado está listo para ser reducido.
Nota: Para realizar la reducción, es necesario instalar VMware Tools.
-
Para las máquinas virtuales que se ejecutan en VMware ESXi o VMware Estación de Trabajo, ejecutamos los dos comandos siguientes en el sistema operativo invitado Linux. a) Para asegurarnos de que la partición del disco está disponible, ejecutamos el comando:
root@test-virtual-machine:/# vmware-toolbox-cmd disk list
Este es el resultado que vemos en nuestro caso (es decir, vemos la lista de particiones disponibles):
/
/boot
/var/log
La partición raíz está presente, por lo que podemos continuar. b) Para reducir la partición, ejecutamos el siguiente comando:
root@test-virtual-machine:/# vmware-toolbox-cmd disk shrink /
Este es el resultado que vemos en nuestro caso:
Please disregard any warnings about disk space for the duration of shrink process.
Progress: 100 [===========>]
Disk shrinking complete.Ahora, el tamaño de nuestro archivo VMDK reducido es de 5 323 456 KB (es decir, 5,08 GB, mucho menos que los 10,8 GB que tenía antes).
Nota: Si tu máquina virtual invitada se ejecuta en un servidor ESXi, después de rellenar los bloques con ceros, puedes seguir estos pasos:
- Apaga la máquina virtual o desconecta el disco virtual que deseas reducir.
- Conéctate al host ESXi con el cliente SSH.
- Accede a
Virtual Machine Folder. - Verifica el uso del disco con
du -h. - Ejecuta
vmkfstools -K test-virtual-machine.vmdk. - Verifica de nuevo el uso del disco con
du -h.
Reducir discos VMware con aprovisionamiento dinámico en Windows
Al igual que Linux, Windows no pone a cero automáticamente los bloques después de eliminar archivos. Para poder poner a cero el espacio libre de los discos de destino en tu máquina virtual Windows, debes descargar SDelete —una utilidad gratuita del paquete Sysinternals de Microsoft— y descomprimir los archivos del archivo descargado en c:program filessdelete
A continuación, sigue estos pasos:
- Ejecuta
cmd -
Ve al directorio donde se encuentra
SDelete. En nuestro caso, es:cd c:program filessdelete -
Para cada partición de la consola, utilice el comando
sdelete -z. Esto es lo que tenemos en nuestro caso:sdelete -z c:
sdelete -z d:
Estos comandos pondrán a cero cualquier espacio libre del disco con aprovisionamiento ligero, rellenando todo el espacio no utilizado de las particiones especificadas. Espere un par de minutos hasta que finalice el proceso. Su archivo VMDK se expandirá hasta su tamaño máximo durante el proceso.
-
Asegúrate de que VMware Tools esté instalado en tu máquina virtual Windows. De forma predeterminada, VMware Tools se instala en
c:program filesvmwarevmware toolsAccede a este directorio escribiendo:
cd c:program filesvmwarevmware tools -
Para ver las particiones de disco disponibles, escribe:
vmwaretoolboxcmd disk list -
Reducí el tamaño de las particiones de disco que necesites. En nuestro caso, ejecutamos los comandos:
vmwaretoolboxcmd disk shrink c:
vmwaretoolboxcmd disk shrink d:
Espera a que el programa haya terminado de reducir el tamaño del disco.
Puedes utilizar este método para máquinas virtuales que se ejecuten en VMware ESXi o VMware Estación de Trabajo.
VMware Storage Distributed Resource Scheduler
Anteriormente, hemos mencionado una solución para reducir manualmente los discos con aprovisionamiento fino. Sin embargo, existe otra forma de gestionar los discos virtuales (tanto con aprovisionamiento fino como con aprovisionamiento completo), si se utiliza un clúster de almacenes de datos en VMware vSphere. VMware ofrece la migración automática de discos virtuales dentro del clúster de almacenes de datos para evitar el desbordamiento del almacenamiento en disco donde se encuentran los discos virtuales con aprovisionamiento fino y para equilibrar los recursos de E/S.
Si tiene más de un almacén de datos compartido montado en el servidor ESXi, puede configurar el Storage Distributed Resource Scheduler (Storage DRS). Storage DRS es una función inteligente de vCenter Server que permite gestionar de forma eficiente el almacenamiento VMFS y NFS, y que ofrece la colocación y migración automáticas de los discos de las máquinas virtuales. También puedes configurar Storage DRS en modo manual si prefieres aprobar las recomendaciones de migración manualmente.
Sigue estos pasos para habilitar Storage DRS:
- Accede al clúster de almacenes de datos en vSphere Web Client.
- Ve a
vCenter > Datastore Clusters. - Selecciona tu clúster de almacenes de datos y haz clic en
Manage > Settings > Services > Storage DRS. - Haga clic en
Edit. - Configure los ajustes de automatización, las funciones relacionadas con la E/S y las opciones avanzadas que necesite.

- Haga clic en
OKpara finalizar.
Si no hay clústeres de almacenes de datos en su entorno vSphere, siga estos pasos para crear y configurar un nuevo clúster de almacenes de datos:
- Acceda a
vCenter > Datacentersen el vSphere Web Client. - Haga clic con el botón derecho del ratón en su centro de datos y seleccione
New Datastore Cluster. - Introduzca el nombre de su clúster de almacenes de datos y marque la casilla situada junto a «
"Turn On Storage DRS"». - Seleccione los ajustes de automatización, las funciones relacionadas con la E/S y las opciones avanzadas que necesite.
- Haga clic en «
OK» para finalizar.
Conclusión
En esta entrada del blog, hemos analizado los tipos de discos virtuales y hemos sopesado las ventajas y desventajas de cada uno para comprender mejor las diferencias entre el aprovisionamiento «thick» y el «thin». Los discos con aprovisionamiento «thick» y ceros anticipados son los mejores en cuanto a rendimiento y seguridad, pero requieren suficiente espacio de almacenamiento libre y su creación lleva mucho tiempo. Los discos con aprovisionamiento «thick» y ceros diferidos son buenos por su breve tiempo de creación, pero no ofrecen tanta velocidad como los discos con ceros anticipados y son menos seguros. Los discos con aprovisionamiento «thin» son la mejor opción para ahorrar espacio en el almacén de datos en el momento de la creación del disco.
Puedes crear un disco virtual con un tamaño máximo superior al espacio físico del que dispones («sobreaprovisionamiento») y añadir más almacenamiento físico en el futuro, pero recuerda que, si el espacio del disco físico se agota y el disco de aprovisionamiento fino no puede ampliarse para albergar más datos, tus máquinas virtuales quedarán inutilizables; por lo tanto, no olvides vigilar la cantidad de espacio libre. También hemos repasado métodos para reducir el tamaño de los discos virtuales de VMware con aprovisionamiento fino, por si prefieres no añadir más almacenamiento y necesitas reducir el espacio ocupado.