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 et passer à une émulation de machine « assez moderne » (au minimum `pc-i440fx-2.1`, spécifier `pc` basculant automatiquement vers la dernière version). Cela ne peut se faire via `virt-manager`, il faut donc passer par `virsh edit nom-de-vm`. Exemple d'extrait de configuration XML : {{{#!xml hvm
}}} == 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` : {{{#!config 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` : {{{#!shell tune2fs -o discard /dev/sda1 tune2fs -o discard /dev/mapper/vg0-racine }}} Si la configuration des disques a changé (par exemple elle n'était pas `scsi` mais `virtio`), il faut ajuster la liste des modules noyau disponibles au démarrage : {{{#!shell echo MODULES=most >> /etc/initramfs-tools/conf.d/driver-policy update-initramfs -u -k all }}} == 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 : {{{#!shell virsh shutdown nom-de-vm virsh start nom-de-vm }}} Pour vérifier le support du mode `discard` on utilisera la commande suivante : {{{#!shell lsblk --discard }}} Ceci devrait afficher des valeurs non nulles dans les colonnes `DISC-GRAN` et `DISC-MAX`. Pour tester il suffit de suivre la procédure suivante : * côté hôte, vérifier l'occupation disque actuelle : {{{#!shell qemu-img info /var/lib/libvirt/images/nom-de-vm.img }}} * côté VM, créer un fichier volumineux : {{{#!shell dd if=/dev/urandom of=/var/tmp/tempo bs=1M count=500 }}} * côté VM, déclencher l'écriture sur disque : {{{#!shell sync }}} * côté hôte, constater l'espace supplémentaire occupé : {{{#!shell qemu-img info /var/lib/libvirt/images/nom-de-vm.img }}} * côté VM, supprimer le fichier volumineux : {{{#!shell rm /var/tmp/tempo }}} * côté VM, déclencher la libération de l'espace disque : {{{#!shell fstrim -v /var/tmp }}} * côté hôte, vérifier la libération de l'espace : {{{#!shell qemu-img info /var/lib/libvirt/images/nom-de-vm.img }}}