Le thin provisioning : principe.
Dans une machine virtuelle, pour la plupart de des hyperviseurs, vous pouvez créer des disques en « thin provisioning ». Cela signifie que l’espace physique alloué sur le disque dur de l’hyperviseur ne sera alloué qu’au fur et à mesure des besoins.
Par exemple, si on crée un disque de 300Go, il ne prendra en réalité que quelques kilo octets à la création. Dès que vous stockez des données dessus, l’espace alloué va grandir en fonction de ces données. Pour une machine virtuelle Linux, après installation, un disque virtuel de 300Go n’occupera que quelques Go.
Voici une image qui résume le process :
En revanche, lorsque vous supprimez des fichiers du disque virtuel, l’espace alloué n’est pas réduit pour autant. Le disque virtuel se retrouve avec des espaces disponibles, prêts à être remplis par les prochaines données que vous allez insérer.
Imaginons un disque virtuel de 300Go. Vous copiez 250Go dessus, puis vous les supprimez. Vous vous retrouvez avec de l’espace alloué de 250Go… pour rien.
Réduire l’espace utilisé pour une VM Linux
Attention, cette opération est courante, mais n’est pas totalement sans risque. Il est fortement recommandé d’avoir un backup fonctionnel.
De plus, l’ensemble des opérations prend un temps assez long, au minimum quelques heures, pendant lesquelles votre machine virtuelle sera inaccessible.
Supprimer les fichiers sur la machine virtuelle
Afin de faire le plus de place possible, vous pouvez supprimer tous les fichiers inutiles sur la VM. Cela peut être des fichiers de logs trop vieux, le cache apt ou yum, le contenu de /tmp ou de /var/tmp… tout ce que vous savez être inutile (j’insiste sur ce point là, ne supprimez aucun fichier pour lequel vous avez un doute)
Mettre tous les secteurs inutilisé à 0.
Pour cela, il faut redémarrer votre VM en mode single user. Je conseille fortement de redémarrer sur l’image ISO de SystemRescueCD.
Une fois la machine démarrée, voici les étapes à suivre.
Si votre machine utilise les LVM (Logical Volume Manager) :
vgchange -a y
Lister les partitions disponibles :
fdisk -l | grep dev
Sur chacune des ces partitions, exécuter la commande suivante :
# remplacez sda1 par les valeurs # obtenues lors du fdisk -l | grep dev zerofree -v /dev/sda1
Cette opération est la première qui peut être longue. De plus, l’affichage ne change pas, donc soyez patients, et attendez bien que le système vous rendre la main.
Y compris sur les partitions LVM :
# remplacez VolGroup00 et LogVol00 par les valeurs # obtenues lors du fdisk -l | grep dev zerofree -v /dev/mapper/VolGroup00-LogVol00
Une fois terminé, vous devez éteindre la machine virtuelle.
Vmware : réduire la taille du vmdk
Le fichier vmdk est celui qui contient le disque dur virtuel. Maintenant que les vides sont remplis par des 0, nous allons pouvoir le(s) réduire.
Loguez vous en ssh sur l’ESXi hébergeant votre machine virtuelle, et rendez vous dans son répertoire de stockage :
cd /vmfs/volumes/datastore1/<VM>
Affichez la liste des VMDK :
ls -lah *.vmdk
Vous devriez obtenir quelque chose comme ça :
/vmfs/volumes/xxxxxxxxx/Delain # ls -alh *vmdk -rw------- 1 root root 300.0G Dec 6 14:18 Delain-flat.vmdk -rw------- 1 root root 544 Nov 18 08:01 Delain.vmdk
Le fichier flat ne nous intéresse pas. Il correspond à la taille maximum du disque virtuel et ne doit pas être modifié. Pour chaque vmdk qui n’est pas « flat », lancez la commande suivante :
vmkfstools --punchzero Delain.vmdk
Cette opération va prendre beaucoup de temps, comme précédemment, laissez tourner, soyez patient…
Une fois terminé, vous pouvez redémarrer la machine virtuelle, et l’espace inutilisé aura été libéré du datastore.
Risques et limitations du thin provisioning
Le thin provisioning doit être utilisé avec précaution. En effet, rien ne vous empêche de faire de la sur allocation, et de provisionner des disques dont la capacité excède votre capacité réelle de stockage. Cela ne vous posera pas de problème… tant que les disques de VM ne se remplissent pas. En effet, vous pouvez complètement remplir votre stockage, alors que les VM penseront qu’elles ont encore de l’espace disponible sur le disque. Il faut donc surveiller avec attention votre espace libre.
De plus,le thin provisioning est déconseillé pour les applications qui demandent beaucoup d’écriture sur le disque, ou bien qui nécessitent une réactivité immédiate du disque. C’est le cas par exemple des bases de données.