Comment hiberner sur un fichier swap avec LM 19.x

Vos petites astuces, répertoire des tutoriels et astuces
Répondre
Avatar du membre
Scrat
Messages : 644
Enregistré le : lun. 6 août 2018 19:05
Localisation : île d'Oléron

Comment hiberner sur un fichier swap avec LM 19.x

Message par Scrat »

Bonjour.

Le démarrage à froid de LM 19.x est plus ou moins long selon les configurations matérielles. Pour réduire ces temps de démarrage, on peut arrêter les PC en utilisant les modes "Mise en veille" ou "Hibernation", ce qui permet de redémarrer plus rapidement en récupérant le bureau dans l'état où on l'a laissé.

En mode "veille", le PC est toujours sous tension. Bien que faible, la consommation n'est pas nulle, et il faut donc vérifier l'état de la batterie si on prévoit une veille prolongée. L'avantage de ce mode est que la sortie de veille est quasi-immédiate. Il est donc très utile si la veille doit être de courte durée.

Pour une veille prolongée, par exemple plusieurs jours, il est préférable d'utiliser le mode "hibernation" qui stocke l'état de la mémoire sur le disque avant d'éteindre le PC. Le redémarrage est plus long que la sortie de veille, mais nettement plus rapide qu'un redémarrage normal. Malheureusement, ce mode n'est pas disponible par défaut sur LM 19.x, mais il est possible de l'activer par quelques commandes dans un terminal. Je propose ici la traduction du tutoriel anglophone d'activation de l'hibernation dans un fichier swap avec LM 19.x.

ATTENTION: Ce tutoriel s'adresse aux utilisateurs d'un système sans partition swap, mais avec un fichier nommé swapfile à la racine du système de fichiers. Si vous avez une partition swap dédiée, voyez plutôt ce tutoriel :
https://forums.linuxmint.com/viewtopic. ... 2&t=273202

1. PRÉPARATION :

La sortie d'hibernation ne fonctionne pas correctement sur tous les systèmes. Les problèmes peuvent venir de la configuration du BIOS ou de certains pilotes. Donc, avant de suivre ce tutoriel, utilisez Timeshift pour créer un cliché de votre système, et prévoyez un DVD ou une clé USB Live pour restaurer facilement ce cliché en cas de problème au démarrage.

2. TAILLE DU FICHIER DE SWAP :

En principe, il est recommandé que la taille du fichier de swap soit égale à celle de la mémoire.

On commence par vérifier l'état de la mémoire en tapant cette commande dans un terminal :

Code : Tout sélectionner

free -h
Je mets ici le retour de cette commande chez moi à titre d'exemple :

Code : Tout sélectionner

richard@pc-linuxshop-5678:~$ free -h
              total       utilisé      libre     partagé tamp/cache   disponible
Mem:           7,6G        2,2G        4,6G         98M        783M        5,0G
Partition d'échange:        8,0G         75M        7,9G
On voit que la mémoire totale de mon PC est de 7,6Go. La partition d'échange (le fichier swapfile) est de 8Go depuis que j'ai activé l'hibernation sur mon système, mais elle n'était que de 2Go à l'origine.

IMPORTANT : les commandes suivantes ne fonctionneront que si votre fichier swapfile se trouve à la racine / du système de fichiers. Si vous l'avez déplacé, ça ne fonctionnera pas.

On vérifie les caractéristiques du fichier swapfile avec cette commande :

Code : Tout sélectionner

swapon
Retour de cette commande chez moi:

Code : Tout sélectionner

richard@pc-linuxshop-5678:~$ swapon
NAME      TYPE SIZE  USED PRIO
/swapfile file   8G 75,3M   -2
On voit que le fichier swapfile est bien à la racine du système de fichiers et qu'il a la même taille que la mémoire (8Go), preuve que le redimensionnement effectué en suivant ce tutoriel a bien fonctionné. À l'origine, la taille de ce fichier n'était que de 2Go.

Si votre fichier a la bonne taille, vous pouvez passer à l'étape 4. Si le fichier est trop petit ou s'il n'existe pas, vous devez suivre l'étape 3 ci-dessous.

3. DÉFINITION DU FICHIER DE SWAP :

Il faut d'abord désactiver l'espace de swap :

Code : Tout sélectionner

sudo swapoff -a
Ensuite, on définit la variable d'environnement SIZE pour la taille requise en Go. Dans mon cas, il faut une taille de 8 Go:

Code : Tout sélectionner

SIZE=8
Cette variable va être utilisée dans le script de création du fichier swapfile. Mais avant de créer ce fichier, il faut s'assurer que vous avez assez de place sur la racine du système de fichiers :

Code : Tout sélectionner

df / -h
Si l'espace disponible est inférieur à la taille requise pour le fichier swapfile, vous ne pourrez pas aller plus loin.
Si l'espace disponible est suffisant, lancez ce script en faisant un copier-coller de la totalité :

Code : Tout sélectionner

sudo dd if=/dev/zero of=/swapfile bs=1M count=$(($SIZE * 1024))
sudo chmod 0600 /swapfile
sudo mkswap /swapfile
sudo sed -i '/swap/{s/^/#/}' /etc/fstab
sudo tee -a /etc/fstab<<<"/swapfile  none  swap  sw 0  0"
Ce script crée le fichier swapfile et configure le système pour l'utiliser. Cela désactive aussi tout autre espace de swap que vous auriez pu définir auparavant pour éviter les conflits. La première instruction (commande dd) prend un certain temps, surtout si la taille demandée est importante, donc patientez.

4. DÉFINITION DES PARAMÈTRES DU NOYAU :

Lancez cette commande dans un terminal en faisant un copier-coller :

Code : Tout sélectionner

RESUME_PARAMS="resume=UUID=$(findmnt / -o UUID -n) resume_offset=$(sudo filefrag -v /swapfile|awk 'NR==4{gsub(/\./,"");print $4;}') "
Ensuite, lancez cette commande :

Code : Tout sélectionner

if grep resume /etc/default/grub>/dev/null; then echo -e "\nERROR: Hibernation already configured. Remove the existing configuration from /etc/default/grub and add these parameters instead:\n$RESUME_PARAMS";else sudo sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=\"/GRUB_CMDLINE_LINUX_DEFAULT=\"$RESUME_PARAMS/" /etc/default/grub;fi
S'il y a un message d'erreur, faites ce que vous disent les messages.

Si tout s'est bien passé, mettez le grub à jour par cette commande :

Code : Tout sélectionner

sudo update-grub
5. AJOUT DE L'OPTION "HIBERNER" DANS LE MENU "QUITTER" :

Lancez cette commande dans un terminal en faisant un copier-coller :

Code : Tout sélectionner

sudo tee /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla <<'EOB'
[Enable hibernate]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions
ResultActive=yes
EOB
6. TEST DU MODE HIBERNATION :

Commencez par redémarrer le PC normalement pour que les modifications apportées au système soient prises en compte.

Ensuite, lancez cette commande dans un terminal pour vérifier si le mode d'hibernation est bien disponible :

Code : Tout sélectionner

busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager CanHibernate
La réponse à cette commande doit être "yes". Si ce n'est pas le cas, vous devrez résoudre les problèmes en vous reportant à la section 7 ce tutoriel.

Si la réponse à la commande précédente est bien "yes", vous pouvez tester la mise en hibernation en sélectionnant "Hiberner" dans le menu "Quitter". Attendez que le PC s'arrête, puis redémarrez le. Si tout a fonctionné correctement, vous retrouverez votre bureau dans l'état où vous l'avez laissé. En particulier, vous retrouverez votre fenêtre terminal ouverte avec le résultat de la dernière commande que vous avez lancée.

Vous pouvez aussi mettre le PC en hibernation sans passer par le menu avec cette commande dans un terminal :

Code : Tout sélectionner

systemctl hibernate
7. RÉSOLUTION DES PROBLÈMES :

Si votre système vous dit que l'hibernation n'est pas supportée, c'est probablement à votre BIOS/UEFI. Vérifier ses paramètres. En particulier il doit supporter le mode "ACPI sleep state S4". Il peut aussi être nécessaire de désactiver le "secure boot" et le "fast boot" dans l'UEFI. Pour cela, consultez les spécialistes du forum, car c'est hors de mes compétences. :mrgreen:

Si vous n'utilisez pas le noyau par défaut, il est possible que votre noyau n'ait pas été compilé avec le support d'hibernation. Pour le vérifier, lancez cette commande:

Code : Tout sélectionner

grep CONFIG_HIBERNATION /boot/config-$(uname -r)
Si votre système autorise l'hibernation, il peut encore se planter à la mise en hibernation ou plus vraisemblablement à la sortie d'hibernation. Ces problème peuvent provenir du BIOS/UEFI, certains ayant une implémentation défectueuse de l'ACPI, ou encore de problèmes matériels liés aux pilotes, au noyau ou au firmware. Si vous en êtes là, c'est que vous n'avez vraiment pas de bol ! :lol:

En résumé, il est conseillé d'avoir des BIOS à jour et de désactiver autant de périphériques que possible, ce qui peut s'avérer suffisant pour résoudre les problèmes. Vous pouvez également essayer différents noyaux.

Pour les utilisateurs de cartes graphiques NVIDIA, peut-être trouverez-vous des informations intéressantes ici :
https://forums.linuxmint.com/viewtopic.php?t=258577

À noter que sur mon matériel avec carte graphique NVIDIA (voir ma signature), l'activation de l'hibernation s'est faite sans problème. 8-)

Enfin, le dernier recours pour les problèmes insolubles : consultez les forums. :mrgreen:

NOTE AUX BONNES VOLONTÉS : merci de me relire et de vérifier si je n'ai pas laissé passer trop de c...ries. :mrgreen:
Portable Lenovo Ideapad 320-17IKB - Linux Mint 19.3 Tricia - Cinnamon 4.4.8
Noyau Linux 4.15.0-180-generic - CPU Intel© Core™ i5-7200U CPU @ 2.50GHz × 2
RAM 7.6 Go - Disque HDD 960.4 Go
Carte Graphique Nvidia GeForce 920MX 2 Go - Intel Corporation HD Graphics 620

On a toujours tort d'essayer d'avoir raison devant des gens qui ont toutes les bonnes raisons de croire qu'ils n'ont pas tort ! (Raymond Devos) :lol:

Répondre