Réduire un VMDK
Rédigé par Alexandre le 2014-03-14
Suite à la migration en vSphere 5.5, je me suis aperçu que l'infrastructure de stockage était en sur-allocation. Même si la sur-allocation ne présente pas de problème, puisque représentant uniquement un espace disque alloué plus grand que celui disponible, je me suis lancé dans l'optimisation de l'espace de stockage.
La suite vSphere, en version 4.1 du moins, ne permettait pas de réduire les disques virtuels (VMDK) sauf en passant par VMware Converter (fastidieux et austère). Depuis la version 5, il est possible de réduire un VMDK via la ligne de commande.
Identification
Avant toute chose, il faut bien faire attention sur quelle machine virtuelle on travaille et sur quel disque.
Pour les besoins de cet article, j'ai créé une machine virtuelle sous Debian 7 disposant de trois disques virtuels :
Ici, nous allons réduire le disque virtuel du système, il faut alors l'identifier ;quer sur Modifier les paramètres...
.
Après avoir déroulé les détails du disque que l'on souhaite, il est nécessaire de noter, sur un papier par exemple, les choses suivantes :
- La taille du disque : valeur en face de
Disque dur 1
- L'emplacement du disque : valeur de la section
Disk file
- L'adresse du disque : la partie
Virtual Device Node
Voilà ce que ça donne dans notre exemple :
10 Go
[datastore_demo] vm-demo/vm-demo.vmdk
SCSI(0:0) Disque dur 1
Préparatifs
Maintenant que ces informations ont été relevées, il faut préparer la machine virtuelle et plus particulièrement son système de fichiers. Cette étape dépend grandement du système d'exploitation invité, mais grosso-modo, pour Windows, il faut utiliser la console Computer Management
, et pour Linux, personnellement, j'utilise SysRecueCD.
Si on souhaite réduire le VMDK de 10 Gio à 5, je recommande de réduire le système de fichier de l'invité à 4 Gio. Il sera possible de l'agrandir à 5 Gio une fois le VMDK réduit.
Bon, passons aux choses sérieuses :
- Se connecter en SSH à l'hyperviseur
- Se rendre dans le dossier regroupant les fichiers de la machine virtuelle
cd /vmfs/volumes/datastore_demo/vm-demo
- Afficher le contenu
ls -la
total 14686224
drwxr-xr-x 1 root root 2240 Feb 19 09:53 .
drwxr-xr-t 1 root root 2240 Feb 19 09:54 ..
-rw------ - 1 root root 655872 Feb 19 09:53 vm-demo-ctk.vmdk
-rw------ - 1 root root 10737418240 Feb 19 09:53 vm-demo-flat.vmdk
-rw------ - 1 root root 8684 Feb 19 09:53 vm-demo.nvram
-rw------ - 1 root root 583 Feb 19 08:42 vm-demo.vmdk
-rw-r--r- - 1 root root 0 Feb 19 08:15 vm-demo.vmsd
-rwxr-xr-x 1 root root 3267 Feb 19 09:53 vm-demo.vmx
-rw-r--r- - 1 root root 262 Feb 19 08:15 vm-demo.vmxf
-rw------ - 1 root root 66048 Feb 19 09:53 vm-demo_1-ctk.vmdk
-rw------ - 1 root root 1073741824 Feb 19 08:15 vm-demo_1-flat.vmdk
-rw------ - 1 root root 530 Feb 19 08:15 vm-demo_1.vmdk
-rw------ - 1 root root 197120 Feb 19 09:53 vm-demo_2-ctk.vmdk
-rw------ - 1 root root 3221225472 Feb 19 08:15 vm-demo_2-flat.vmdk
-rw------ - 1 root root 530 Feb 19 08:16 vm-demo_2.vmdk
-rw-r--r- - 1 root root 172570 Feb 19 09:53 vmware.log
Si vous avez un fichier vm-demo.vmx~
, c'est que la machine virtuelle est en cours de fonctionnement ; il faut l'arrêter avant de continuer.
Bien que la liste soit assez conséquente, seulement deux fichiers nous intéressent :
vm-demo.vmdk
(identifier sur nos notes de tout à l'heure) : contient la définition des propriétés du disque de la machine virtuellevm-demo-flat.vmdk
: le disque qui contient les données de la machine virtuelle
Avant de commencer à bricoler, on va mettre les disques actuels au chaud ; encore une fois, la machine virtuelle doit être arrêtée !
mkdir origine
mv vm-demo.vmdk origine/vm-demo.vmdk
mv vm-demo-flat.vmdk origine/vm-demo-flat.vmdk
Tout ce qui est d'origine est maintenant dans le dossier éponyme. Nous allons cloner le descripteur avant de le modifier, afin de toujours pouvoir revenir en arrière :
cp origine/vm-demo.vmdk origine/vm-demo-new.vmdk
Réduire
La réduction passe tout d'abord par la modification du fichier de description du disque virtuel :
vi origine/vm-demo-new.vmdk
Le fichier ne contient pas énormément de lignes, et en plus, une seule est à modifier :
# Extent description
RW 20971520 VMFS "vm-demo-flat.vmdk"
La valeur 20971520
est la taille du disque de la VM que l'on obtient en Gio, soit en allant dans les propriétés de la machine virtuelle, soit en utilisant cette simple formule : taille = (valeur * 512) / (1024 * 1024 * 1024)
. Ok, mais nous on veut passer du Gigaoctet à cette valeur, heureusement les maths sont nos amies : valeur = (taille * 1024 * 1024 * 1024) / 512
.
En gardant mon exemple de 5 Gio, la ligne de mon fichier ressemblera à ceci :
# Extent description
RW 10485760 VMFS "vm-demo-flat.vmdk"
Une fois le fichier enregistré, nous allons cloner le disque d'origine afin de créer un VMDK de la bonne taille ; pour se faire :
vmkfstools -i origine/vm-demo-new.vmdk vm-demo.vmdk
Destination disk format: VMFS zeroedthick
Cloning disk 'origine/vm-demo-new.vmdk'...
Clone: 50% done.
La commande rend le prompt sans atteindre les 100% et c'est tout à fait normal puisque le clone est plus petit que la cible : pourcentage = (100 * taille_voulue) / taille_actuelle
.
Nettoyage
La machine virtuelle peut maintenant être redémarrée et testée.
Une fois les tests concluants, il n'y a plus qu'à supprimer le dossier origine
:
rm -r origine/
Cette méthode a beau être relativement longue à exécuter, elle demeure plus rapide qu'en passant par VMware Converter.
Référence
- Whitneytechnologies (en)