VMWare: Reclamar espacio no usado VMDK thin

Para conseguir un ahorro de espacio ocupado por las VMs en el datastore, muchos administradores deciden utilizar el tipo de provisionado "Thin" al utilizar el asistente de creación de algunas VMs:

Provisionado disco de la VM 
Como ya sabemos, un disco con "Thin provision", irá aumentado su tamaño bajo demanda hasta el límite marcado (virtual disk size).

Sin embargo, su tamaño no se reducirá una vez liberado el espacio.

Veamos el siguiente ejemplo, para entender su funcionamiento:

Unidad de Windows VS browse datastore

1) Unidad de Windows: Tamaño utilizado: 815MB. (Windows, unidad E:)
2) Fichero VMDK en el Datastore: 43GB. (VSphere Client)

En algún momento, la unidad E: ha ocupado 43GB y actualmente ocupa 815MB.

El tamaño del fichero VMDK, ocupa 43GB.

Para VMs con más de un disco virtual, podemos identificar el volumen de Windows que corresponde a cada fichero VMDK de la siguiente forma:

VMWare: Identificar VMDK y disco Windows (SYSADMIT.com)

Antes de iniciar el proceso, debemos asegurarnos:

- La VM no está funcionando con snapshots, en caso afirmativo, eliminamos los snapshots existentes.
- Disponemos de un backup de la VM.

Para reclamar el espacio no usado en un fichero VMDK con provisionado thin y ajustarlo a la realidad, podemos seguir los siguientes pasos:

1) Marcar con "0" el espacio libre del interior de la VM:

Con la VM en marcha:

* Si la VM es Windows:

sdelete.exe -z Unidad:

Podemos descargar de forma gratuita la utilidad sdelete:

https://technet.microsoft.com/en-us/sysinternals/bb897443

C:\WINUTIL\SDelete>sdelete.exe 

SDelete - Secure Delete v1.61
Copyright (C) 1999-2012 Mark Russinovich
Sysinternals - www.sysinternals.com


usage: sdelete.exe [-p passes] [-s] [-q] ...
       sdelete.exe [-p passes] [-z|-c] [drive letter] ...
   -a         Remove Read-Only attribute
   -c         Clean free space
   -p passes  Specifies number of overwrite passes (default is 1)
   -q         Don't print errors (Quiet)
   -s or -r   Recurse subdirectories
   -z         Zero free space (good for virtual disk optimization)


Ejemplo de ejecución sdelete sobre la unidad E:

Ejecutar desde una ventana de CMD "como administrador": 

C:\WINUTIL\SDelete>sdelete.exe E: -Z 

SDelete - Secure Delete v1.61
Copyright (C) 1999-2012 Mark Russinovich
Sysinternals - www.sysinternals.com

SDelete is set for 1 pass.
Free space cleaned on E:\
1 drives zapped


* Si la VM es Linux:

dd if=/dev/zero of=/volumen-montado/zeroes && rm -f /volumen-montado/zeroes

2) Detenemos la VM que está utilizando el fichero VMDK

3) Ejecución vmkfstools -K, sobre el fichero VMDK: 

Conectamos vía SSH al host VMWare ESXi que tiene acceso al datastore donde se ubica el fichero VMDK.

Nos situamos en la ubicación donde se encuentra en fichero VMDK:

~ # ls /vmfs/volumes/DATASTORE01/EX1/
EX1-ctk.vmdk     EX1.vmx          EX1_2-ctk.vmdk   vmware-3.log
EX1-flat.vmdk    EX1.vmxf         EX1_2-flat.vmdk  vmware.log
EX1.nvram        EX1_1-ctk.vmdk   EX1_2.vmdk
EX1.vmdk         EX1_1-flat.vmdk  vmware-1.log
EX1.vmsd         EX1_1.vmdk       vmware-2.log

~ # cd /vmfs/volumes/DATASTORE01/EX1/


Ejecutamos vmkfstools -K sobre el fichero VMDK:

vmkfstools -K EX1_2.vmdk
vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
Hole Punching: 100% done.


4) Resultado: Vista VSphere Client, browse datastore:

Antes: 41GB
Ahora: 866MB

Vsphere client, resultado final

Ya podemos iniciar la VM que utiliza el fichero VMDK.

Información adicional:

El paso 3, en vez de utilizar la herramienta vmkfstools, podemos utilizar VMWare Converter.

Normalmente, el proceso vmkfstools es más rápido que utilizar VMWare Converter.

2 comentarios:

  1. Hola, tengo una consulta con respecto a una VM con Thin Provision. Resulta que el S.O de la VM es WIndows 2003 SP2. (Viejo, pero muy funcional para pruebas de aplicaciones en mi trabajo). Resulta que la maquina tiene 31 GB de espacio utilizado. Y tiene como espacio total 41GB. Pero en el ESX tengo aprovisionamiento a 100GB. COmo hago para reclamar ese espacio y que la VM siga siendo Thin?

    ResponderEliminar
    Respuestas
    1. Hola Jose,

      ¡Gracias por participar en el blog!

      Entiendo que desde el administrador de discos de Windows (diskmgmt.msc), ves espacio no particionado de 100GB - 41GB = 59GB.

      Hay varios métodos para solucionar el problema.

      Uno de ellos es configurar en la VM un segundo disco de 41GB, arrancar la VM con una ISO de un programa de clonado: Ghost, Acronis, Clonezilla, etc... y hacer una imagen disk to disk.

      Una vez finalice, basta con retirar el disco antiguo e indicar que arranque con en nuevo.

      Si todo ha ido bien, bastará con borrar el VMDK del disco antiguo desde el ESXi.

      Un saludo!

      Xavi.

      Eliminar