Systemd : mise en veille des VM de libvirtd à la mise en veille de la machine hôte

Lors d’une mise en veille d’une machine Debian utili­sant systemd et héber­geant des machines virtuelles créés avec libvirtd, les machines virtuelles empêchent la mise en veille. Résul­tat, une coupure franche de la machine. Ce qui n’est pas bon.

Pour y remé­dier, c’est fort simple.

mkdir /etc/systemd/system-sleep

Dans ce réper­toire, créer le script suivant (appe­lons-le virsh.sh par exemple) :

#!/bin/bash
# vim:set sw=4 ts=4 sts=4 ft=sh expandtab:

case "$1" in
    pre)
        for i in $(virsh list | grep running | awk '{print $2}')
        do
            virsh suspend $i
        done
        ;;
    post)
        for i in $(virsh list | grep paused | awk '{print $2}')
        do
            virsh resume $i
        done
        ;;
    *) exit $NA
        ;;
esac

On le rend exécu­table :

chmod 755 /etc/systemd/system-sleep/virsh.sh

Je pense qu’il est bon de reloa­der le dæmon systemd :

systemctl daemon-reload

Et c’est bon ! La mise en veille fonc­tionne tout à fait norma­le­ment main­te­nant.

Expli­ca­tion : avant de mettre en veille, on suspend toutes les machines virtuelles qui sont en train de tour­ner, et après on les rallume (ce qui rallu­mera aussi celles que vous aviez vous-même mises en veille, mais bon).