Grande découverte à mettre au crédit d'un voyage en train : Sous linux, il n'y a pas que le patch SoftwareSuspend2 qui permette de faire du suspend to disk!

Tout d'abord, qu'est-ce que le suspend to disk? Pour nos amis sous windows, c'est ce qu'on appelle la "mise en veille prolongée". Si ça ne vous dit toujours rien, en voici le principe général. Lorsque l'on utilise un ordinateur, tous les programmes exécutés sont placés dans la mémoire vive (ou ram). Le principe du suspend to disk est que lorsque l'on désire éteindre son ordinateur, au lieu de fermer tous les programmes, on fait une copie du contenu de la mémoire vive sur le disque dur (plus précisément dans le swap, sorte de "mémoire vive sur disque dur"), puis l'ordinateur s'arrête suivant le processus normal (en fermant toutes les applications donc). Au démarrage suivant, le système trouve une signature dans le swap, qui lui indique que le système s'est arrêté en utilisant le suspend to disk. Au lieu de continuer le démarrage de manière classique et d'arriver à la page de login, le systême charge en mémoire l'image qu'il a détectée (vous savez, celle qui a été copiée dans le swap avant extinction de l'ordi). On se retrouve alors au final avec un systême dans le même état que celui avant extinction (fenêtres ouvertes sur les mêmes bureaux, avec les mêmes documents chargés, etc...)

Comment faire pour que ça marche? C'est très simple :

  1. Il faut avoir une partition de swap d'au moins la taille de la mémoire vive
  2. Il faut connaître le périphérique correspondant à cette partition (chez moi c'est /dev/hda5)
  3. Ajouter "resume=/dev/hda5" à la ligne de boot de votre kernel (dans menu.lst pour grub ou lilo.conf pour lilo)
  4. aptitude install hibernate
  5. configuration de /etc/hibernate/hibernate.conf

Dans ce fichier, il n'est a priori besoin de changer que la partie suivante:

### suspend2 (for Software Suspend 2)
#UseSuspend2 yes
#Reboot no
#EnableEscape yes
#DefaultConsoleLevel 1
#Compressor lzf
#Encryptor none
# ImageSizeLimit 200
## useful for initrd usage:
# SuspendDevice swap:/dev/hda2
## Powerdown method - 3 for suspend-to-RAM, 4 for ACPI S4 sleep, 5 for poweroff
# PowerdownMethod 5
## Any other /proc/software_suspend setting can be set like so:
# ProcSetting expected_compression 50
## Or traditionally like this:
# Suspend2AllSettings 0 0 2056 65535 5
## Or even from the results of hibernate --save-settings with this:
# Suspend2AllSettingsFile /etc/hibernate/suspend-settings.conf
## For filewriter:
# FilewriterLocation /suspend_file 1000
# VerifyFilewriterResume2 yes
# ProcSetting userui_program /usr/local/sbin/suspend2ui_text

### sysfs_power_state
## To use /sys/power/state to suspend your machine (which may offer
## suspend-to-RAM, suspend-to-disk, standby, etc) comment out all the options
## above for Software Suspend 2, below for acpi_sleep, and uncomment this line.
## You may replace mem with any one of the states from "cat /sys/power/state"
UseSysfsPowerState disk
PowerdownMethod shutdown

une fois cette config effectuée, vous pouvez lancer la commande hibernate, en root et observer le résultat. Si vous voulez que vos autres utilisateurs puissent faire de même, vous devez mettre /usr/bin/hibernate en setuid root, ou configurer correctement sudo, ou bien encore utiliser la gestion des évènements acpi (qui sera l'objet d'un prochain chapitre).

Voili voilou, on s'éclate comme on peut en pays geekien!

Modification du 14/02/2006

Si votre ordinateur reboot ou fait un shutdown juste après une reprise de suspend to disk, c'est de la faute au démon acpid. Pour l'instant, je n'ai pas trouvé de solution propre pour éviter ça, donc j'ai désactivé acpid! En attendant mieux...