[ESX] Réduire la taille d'un vmdk

Dans mon métier, on doit parfois économiser de la place, mais sans rien effacer... Avant [VMWare] c'était impossible, maintenant, il existe un moyen... il s'agit du thin provisioning, en opposition au thick provisioning.

Thin ou Thick

Pour faire court, il est conseillé en VMWare de toujours alouer ses disques en mode thick (ce mode a l'avantage de faire des disques performants et rapides, mais a le désavantage (relatif) d'allouer toute la place demandée à la création du disque).

C'est aussi ce type de disque qui est créé par les outils P2V.

Alors oui, l'on peut débattre sur les raisons qui vous poussent à transformer des disques thick en thin provisioning, mais sur un ESXi de labo les performances sont rarement la priorité, et souvent vous n'avez pas la possibilité de "migrer" la machine d'un DataStore a un autre en changeant le type de provisioning.

J'ai dû, sur un ESXi qui supporte le réseau de formation, gagner de la place. En gros, j'avais besoin de récuper au minimim  50 GB) et il se trouve que sur mon seul datastore du labo, j'avais deux disques vmdk de 50 GB en mode thick (soit une allocation de 100GB), alors que l'un n'avait que 10 GB réellement utilisé, l'autre occupait 25 GB). Malheureusement pour moi, il ne me restait que 15 GB de libre sur le Datastore...

Marche a suivre

Soyez conscient que pour ces manœuvres, votre serveur ne sera pas disponible a vos utilisateurs. 

Voyez la NOTE plus bas si vous devez maintenir un accès au serveur (ou que cette procédure prend trop de temps pour une fenêtre offline).

  • Trouvez les bons disques

Vous devez parcourir vos Disques Virtuels dans vos machines pour voir le quel est le moins rempli.

Videz la poubelle, voyez si tout ce qui est sur le disque est réelement nécessaire (par exemple, j'avais 5 GB de temporaires et de fichiers d'installation inutile sur sur ce disque).

Arrêtez les services inutiles par exemple SQL, antivirus, etc... (Voir la NOTE)

N'oubliez pas aussi de passer par la case défragmentation avant de continuer, cela peut sembler logique, mais j'avoue ne pas y avoir penser au début, et avoir perdu une bonne heure pour un résultat médiocre.

  • Préparez le disque en utilisant les outils VMWare dans la machine Virtuel

Comme vous le savez surement, quand vous effacer un fichier, Windows n'efface pas réellement les données: le descripteur du fichier (son nom, le créateur, les dates connues [création, modification, accès], l'emplacement physique sur le disque, etc) est placé dans la poubelle, l'opération de vider la poubelle, efface ces descripteurs et marque les block de données comme libre... Windows sera libre de faire usage "au besoin" de ces blocks plus tard (bien plus tard en faite).

Donc l'outil VMWare va se charger de "mettre a zéro" ces blocks; en créant de gros fichiers de 2 GB nommé "wiper0", "wiper1", ... Ces fichiers vont permettre a l'ESX d'identifier les blocks comme étant réellement inutilisés.

Si comme moi vous rencontrez ce type de message, dites vous que vous etes dans le bon, c'est juste que VMWare ne fait pas de shrink sur un disque en mode thin (c'est idiot mais bon)...

Normalement, votre disque est de base en thick, donc cette option sera active pour vous. Une fois que l'outil aura fait son œuvre, arrêter la machine Virtuelle.

NOTE Normalement vous devez avoir un downtime pour faire ces opérations "a l"aise"; mais il existe un moyen pour ne pas couper le serveur durant ces manœuvres, et donc maintenir l'accès; je n'ai pas tester cette méthode, donc je vous recommande la plus extrême prudence:

Arriver a ce point, vous devriez arreter votre serveur, mais vous pouvez aussi créer un snapshot du disque en question; tous les accès en écriture sur ce disque seront fait sur le snapshot et non sur le disque d'origine.

A la fin du clone - remplacement, il suffira d'effacer tout les snapshots de la machine; cela aura pour effet d'ajouter dans votre image finale, tout les changements effectués depuis le snapshot et de libérer ainsi la précieuse place.

  • Ouvrez une session "root" via SSH sur un host ESX qui a accès au datastore

Rendez-vous en ligne de commande dans le bon dossier de stockage du serveur:

# cd /vmfs/volumes/datastore1/srv-mordred

Dans cet exemple, j'utilise datastore1 comme volume VMFS et srv-mordred comme nom de machine virtuelle.

Avec une simple commande ls -l vous obtiendrez tout le contenu du dossier; mais en précisant un peu, il y a moyen de faire beaucoup mieux:

# ls -ltr *.vmdk
-rw-------    1 root     root                502 Feb  3 10:38 srv-mordred.vmdk
-rw-------    1 root     root                505 Feb  3 10:39 srv-mordred_1.vmdk
-rw-------    1 root     root        53687091200 Feb  3 10:41 srv-mordred_1-flat.vmdk
-rw-------    1 root     root        32212254720 Feb  3 10:41 srv-mordred-flat.vmdk

L'on constate que les vmdk se répartissent en deux type des petits fichiers (moins de 5 KB, ici 502 et 506 bytes) et de très gros fichiers où est ajouté "-flat" au nom du disque, il se peut que vous ayez des fichiers avec "-XXXXX" ajouté dans le nom, ce sont les fichiers de snapshot, "-XXXXX-delta" contiendront donc logiquement les données de différence par rapport au disque d'origine.

NOTE: Vous pourrez noter que la console ne voit pas la taille réellement occupée par le disque, mais bien la taille maximum allouée a la création du disque (ici un disque de 30 GB et un de 50 GB), même si vous avez créer un disque "thin"; pour avoir cette taille réel, il vous faut allez dans le datastore browser.

  • Créez un clone 'Thin' de votre disque

C'est ici que tout se joue, l'outil qui va tout faire pour vous (ou presque): "vmkfstools", ordonnons lui de faire un clone thin de votre disque:

# vmkfstools -i srv-mordred_1.vmdk -d thin srv-mordred_thin_1.vmdk

l'option -i (input) spécifie le fichier source, l'option -d (destination) attends deux paramètres, le format du disque et son nom; dans ce cas ci,nous précision thin et le nom sera clair lui aussi.

Destination disk format: VMFS thin-provisioned
Cloning disk 'srv-mordred_thin_1.vmdk'...
Clone: 100% done.

Une fois le clone fini, un petit 'ls' pour vérifier la présence du nouveau couple de fichiers:

/vmfs/volumes/4c60049a-11de6447-ed1a-0018714d6da6/srv-mordred # ls -ltr *.vmdk
-rw-------    1 root     root                502 Feb  3 10:38 srv-mordred.vmdk
-rw-------    1 root     root                505 Feb  3 10:39 srv-mordred_1.vmdk
-rw-------    1 root     root        53687091200 Feb  3 10:41 srv-mordred_1-flat.vmdk
-rw-------    1 root     root                510 Feb  3 10:39 srv-mordred_1_thin.vmdk
-rw-------    1 root     root        53687091200 Feb  3 10:41 srv-mordred_1_thin-flat.vmdk
-rw-------    1 root     root        32212254720 Feb  3 10:41 srv-mordred-flat.vmdk

 Vous pourriez être surpris que la taille du nouveau fichier flat est exactement la même que l'original thick; c'est du au fait que la console "voit" la taille des disques et non l'espace réellement occupé sur le stockage. Vous devrez allez dans le datastore browser pour y voir l'espace occupé.

  • Remplacer le disque 'thick' avec le clone 'thin'

vous pouvez sans crainte effacer l'ancien 'thick' disque par le clone que vous venez de créer : 

# mv -f srv-mordred_1_thin-flat.vmdk srv-mordred_1-flat.vmdk

N'oubliez pas d'effacer le fichier de description "srv-mordred_1_thin.vmdk" qui n'a plus de raison d'être.

# rm -f srv-mordred_1_thin.vmdk

Vous pouvez bien sur toujours éditer le fichier de description pour y ajouter une ligne:

ddb.thinProvisioned = "1"

afin d'expliquer correctement a VSphere que c'est un disque thin et non thick.

EDIT: Connaitre la taille utilisée réelement et virtuellement

L'allocation de la taille se fait via le vsphere... Vous y verez la taille effectivement restante... a coté de la taille déjà "allouée"...

vous allez dans votre dossier /vmfs/volumes/VOLUMES

il existe une commande 'du -h' qui vous affichera l'usage disque réel de vos dossiers (pas l'alloué).

Un parametrage un peu barbare 'du --apparent-size -h' vous affichera l'usage disque virtuel (y compris les VMDK qui pointent vers des RDM)

 

 

 

 

 

Commentaires

Réduire la taille d'un vmdk

Bonjour,Et la conclusion ? on ne voit pas qu 'es ce qu'il nous reste en espace disque ?A quel moment on peux choisir la nouvelle taille a lui allouer ? Merci