Modifications entre les versions 1 et 3 (s'étendant sur 2 versions)
Version 1 à la date du 2017-11-24 23:57:33
Taille: 2443
Commentaire: premier jet…
Version 3 à la date du 2017-12-07 19:32:08
Taille: 3323
Commentaire: quelques oublis…
Texte supprimé. Texte ajouté.
Ligne 9: Ligne 9:
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`. 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`.
Ligne 12: Ligne 14:
<os>
  <type arch='x86_64' machine='pc'>hvm</type>
</os>
Ligne 40: Ligne 46:
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
}}}
Ligne 47: Ligne 58:
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`.
Ligne 52: Ligne 68:
dd if=/dev/urandom of=/var/tmp/tempo bs=1M count=256 dd if=/dev/urandom of=/var/tmp/tempo bs=1M count=500
}}}
 * côté VM, déclencher l'écriture sur disque : {{{#!shell
sync
Ligne 60: Ligne 79:
 * côté VM, déclencher la libération de l'espace disque : {{{#!shell
fstrim -v /var/tmp
}}}

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 :

<os>
  <type arch='x86_64' machine='pc'>hvm</type>
</os>

<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

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 :

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 :

virsh shutdown nom-de-vm
virsh start nom-de-vm

Pour vérifier le support du mode discard on utilisera la commande suivante :

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 :

    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

KVMLibvirt/EspaceDisque (dernière édition le 2017-12-07 19:32:08 par JeanChristopheAndré)