Réduire la taille des images virtuelles est nécessaire pour deux raisons: Un gain d’espace et de temps de transfert. Lors de l’industrialisation de serveurs virtuels, j’utilise des masters de machines virtuelles pour une plus rapide mise en production.
Ces masters sont issus de machines virtuelles configurées et représentes une image figée d’un système exploitation (Linux ou MS Windows).
Le problème est que plus la machine virtuelle est utilisée/configurée, plus elle grossit, de surcroît si cette machine virtuelle contient MS Windows.
Alors, comment réduire la taille sur disque d’une machine virtuelle?
- Utiliser les outils de virtualisation comme virt-spartify (version testée : 1.14.8).
Le gain n’est pas très important (10%) et nécessite beaucoup de temps de traitement. De plus, il est préférable de changer la configuration par défaut: Virt-sparsify utilise un répertoire temporaire (/tmp par défaut) pour décompresser l’image QCOW en RAW. Si le répertoire est trop petit, le programme s’arrête.
- Préparer la machine virtuelle Ms Windows en vue d’être compressée.
Dans un premier temps, je supprime la mémoire virtuelle disque (swap) puis redémarre pour la prise compte.
Je nettoie ensuite MS Windows (fichiers temporaires, prefetch, cache navigateurs…) avec l’outil libre bleachBit. Je défragmente le système de fichiers NTFS avec UltraDefrag (Full optimisation). Pour finir, j’utilise l’outil de SYSInternals SDelete pour nettoyer l’espace libre:
sdelete -c c: sdelete -z c:
La deuxième commande permet de « zéroifier » l’espace libre; utile pour la compression de l’image QCOW2. Je redéfinis la mémoire virtuelle disque de Ms Windows avant d’arrêter la machine virtuelle et terminer la création du master:
qemu-img convert -c -O qcow2 input.qcow2 output.qcow2
Pour une image virtuelle de 100Go, la taille utilisée sur disque a été réduite de 40Go à 27Go!
That’s all folks