Cette page décrit comment optimiser la gestion de l'espace disque quand on virtualise avec Libvirt/KVM.
Configuration de la VM
Les disques doivent être sur un bus SCSI et le contrôleur SCSI en mode VirtIO.
Le format de l'image disque peut être au moins un des choix qcow2 ou raw (autres choix pas testés).
De plus il faut indiquer l'option discard='unmap' sur ces disques. Cela ne peut se faire via virt-manager, il faut donc passer par virsh edit nom-de-vm.
Exemple d'extrait de configuration XML :
<disk type='file' device='disk'> <driver name='qemu' type='qcow2' io='native' discard='unmap'/> <source file='/var/lib/libvirt/images/nom-de-vm.img'/> <backingStore/> <target dev='sda' bus='scsi'/> <alias name='scsi0-0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </controller>
Configuration du système Debian hébergé
Les systèmes de fichiers peuvent être sur des partitions du disque ou des volumes logiques LVM (autres choix pas testés).
Dans le cas de LVM, il faudra configurer l'option suivante dans /etc/lvm/lvm.conf :
issue_discards = 1
Le format des systèmes de fichiers doit être ext4 (autres choix pas testés), sur lequel on positionnera l'option discard :
tune2fs -o discard /dev/sda1 tune2fs -o discard /dev/mapper/vg0-racine
Validation de la mise en place
La configuration ne sera totalement active qu'après un arrêt puis démarrage (et non redémarrage) de la VM :
virsh shutdown nom-de-vm virsh start nom-de-vm
Pour tester il suffit de suivre la procédure suivante :
côté hôte, vérifier l'occupation disque actuelle :
qemu-img info /var/lib/libvirt/images/nom-de-vm.img
côté VM, créer un fichier volumineux :
dd if=/dev/urandom of=/var/tmp/tempo bs=1M count=500
côté VM, déclencher l'écriture sur disque :
sync
côté hôte, constater l'espace supplémentaire occupé :
qemu-img info /var/lib/libvirt/images/nom-de-vm.img
côté VM, supprimer le fichier volumineux :
rm /var/tmp/tempo
côté VM, déclencher la libération de l'espace disque :
fstrim -v /var/tmp
côté hôte, vérifier la libération de l'espace :
qemu-img info /var/lib/libvirt/images/nom-de-vm.img