Journal Astuce : réparer l’hibernation non fonctionnelle sur Fedora 32

Posté par  (site web personnel) . Licence CC By‑SA.
21
18
mai
2020

Cher journal,

Aujourd’hui, je t’écris pour adresser ure petite astuce aux plus ou moins néophytes qui, comme moi, souffrent d’une hibernation non fonctionnelle sur Fedora 32.

J’ai migré il y a peu sur Fedora 32. Tout se passait très bien à un poil près : l’hibernation se terminait en vulgaire poweroff. Quelle ingratitude, so nineties, dans un monde où la mode est désormais à l’hibernation plutôt qu’à l’extinction ! (ahem)
Bref, l’UC se coupait bien après avoir « gratté » des données mais au relancement, le système démarrait comme s’il s’était juste éteint, occasionnant au passage la perte des programmes ouverts et des données non enregistées.

L’hibernation a toujours (plus ou moins) été un problème avec Linux, en partie à cause de la tambouille que fait chaque constructeur au niveau ACPI.

J’ai tenté de rechercher la cause du problème avec la documentation idoine mais sans succès : tout semblait bien fonctionner du point de vue du noyau (a priori on écarte une incompatibilité matérielle).

Finalement, après recherche, le problème vient plutôt de la configuration de Fedora : le module « resume » (nécessaire à l’hibernation) n’est pas intégré à l’initrd par défaut.

En attendant une solution définitive, voici une solution de contournement proposée sur le rapport de bogue Bugzilla du projet, dont je propose ici une modeste traduction.

Diagnostiquer si votre système est concerné par ce problème

Tout d’abord, armé(e) du terminal, il faut vérifier si le module resume est bien absent de l’initrd :
sudo lsinitrd -m | grep -E '^resume$'

Si la commande ne ressort rien, c’est que votre initrd est construit sans le module resume et donc vous êtes concerné par le problème soulevé plus haut.

Correction temporaire

Ajouter le module manquant et reconstruire l’initrd avec dracut :
sudo dracut -fv -a resume

On relance la première commande pour voir si le module sera bien chargé :
sudo lsinitrd -m | grep -E '^resume$'

Celle‑ci devrait renvoyer le résultat suivant, Indiquant que le module est bien chargé :
resume

Vous pouvez maintenant placer votre système en hibernation pour voir si la correction est effective :
sudo systemctl hibernate

Normalement, vous devriez retrouver votre système dans le même état que vous l’avez quitté, comme une simple veille.

Correction permanente

Si l’astuce ci‑dessus a résolu votre problème, vous pouvez rendre la solution permanente en attendant que Fedora propose une solution propre. Pour cela, il faut préciser à dracut d’ajouter le module resume à chaque reconstruction de l’initrd. Pour cela, il faut créer le fichier 99-fix-resume.conf et y ajouter la ligne suivante : « add_dracutmodules+="resume" ». La commande suivante le fait :
sudo echo 'add_dracutmodules+="resume"' > /etc/dracut.conf.d/99-fix-resume.conf
Après quoi, il faut reconstruire l’initrd avec dracut :
sudo dracut -fv

Et voilà, l’hibernation devrait être de nouveau fonctionnelle. En tout cas, #Chezmoiçamarche.

En espérant que cela soit clair utile à d’autres.

Bonne journée ’nal.

  • # Correction à la demande de l’auteur du journal

    Posté par  . Évalué à 3. Dernière modification le 18 mai 2020 à 12:17.

    Les corrections que tu as demandées ont été effectuées. Tu peux regarder comment j’ai procédé en cliquant sur le lien Markdown.

    P.‑S. — J’ai aussi supprimé le trait d’union de « non fonctionnelle ». Pour rappel, on met un trait d’union quand il s’agit d’un nom, comme un non‑dit, mais pas quand il s’agit d’un adjectif.

    • [^] # Re: Correction à la demande de l’auteur du journal

      Posté par  (site web personnel) . Évalué à 2.

      Merci pour la correction et la précision grammaticale.

      Par ailleurs, saurais-tu comment saisir ces 3 symboles (sortes de petits apostrophes) pour formater le texte en code, sur un clavier BÉPO ?
      Cela ne fonctionne pas avec le symbole « ’ » de la touche « ? ».

      Ex. :

      ’’’
      echo "Ahah" ; firefox https://huit.re/testurl
      ’’’

      • [^] # Re: Correction à la demande de l’auteur du journal

        Posté par  . Évalué à 1.

        Je le fait avec la combinaison Alt Gr È puis Espace, autrement dit un accent grave sur l’espace.

        Si quelqu’un à mieux, je prends.

      • [^] # Re: Correction à la demande de l’auteur du journal

        Posté par  . Évalué à 3. Dernière modification le 18 mai 2020 à 17:28.

        J’sais pô, j’ai pô d’BÉPO !

        Mais, d’après bepo.fr, c’est Maj + %.

        Donk l’affirme, donc ça le confirme.

        Tu ne dois pas faire beaucoup de scripts Shell, parce que c’est un des moyens de créer un sous‑shell, donc c’est très utilisé.

        Par exemple, si tu veux stocker le nom d’hôte dans une variable hostname :

        hostname=`hostname`
        • [^] # Re: Correction à la demande de l’auteur du journal

          Posté par  . Évalué à 2.

          Hello

          Bah, je fais pas mal de shell (bash surtout, ksh, zsh), je n'utilise plus cette syntaxe, mais plutôt $()

          hostname=$(hostname)

          Bien sûr, ça ne marchera pas avec de très vieux shell, et peut-être pas sur des shells minimalistes, mais c'est supporté par "dash" et le "sh" de Busybox, donc ça me suffit

          ;-)

          • [^] # Re: Correction à la demande de l’auteur du journal

            Posté par  (Mastodon) . Évalué à 3. Dernière modification le 19 mai 2020 à 09:50.

            La syntaxe à base de $() est POSIX donc supportée par le Bourne shell de base. Faut aller chercher assez loin pour trouver des shells pas compatibles.

            Je crois par exemple que ce n'est pas supporté par /usr/bin/sh sur solaris mais tout admin sérieux précisera et utilisera les outils dans /usr/xpg4/bin ou /usr/xpg6/bin pour ses scripts et savoir quelle génération de norme POSIX il veut suivre.

            Personnellement ça fait des années que je n'ai plus utilisé les backticks pour ça.

  • # hibernation ou poweroff ... second choix actuellement !

    Posté par  . Évalué à 2.

    effectivement, on peut dire que l'hibernation est une bien meilleure option pour le côté usage pour l'utilisateur que le poweroff.

    Toutefois, vues les failles du thendurbolt actuellement (https://thunderspy.io/) l'utilisation de poweroff n'est pas foncièrement un mauvais choix si vous tenez à vos données !

  • # sudo echo ?

    Posté par  (site web personnel) . Évalué à 6.

    J'ai déjà eu des soucis avec un sudo echo >, dans des scripts notamment. Et j'ai appris à le remplacer par :

    echo 'add_dracutmodules+="resume"' | sudo tee /etc/dracut.conf.d/99-fix-resume.conf

    ou tee -a pour ajouter au fichier.

    Des avis sur la question ?

    « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

    • [^] # Re: sudo echo ?

      Posté par  (Mastodon) . Évalué à 2. Dernière modification le 18 mai 2020 à 16:00.

      oui c'est ce que je fais aussi car par défaut la redirection se fait de façon non privilégiée et ça ne marcherait pas.

  • # initrd ?

    Posté par  (site web personnel) . Évalué à 8. Dernière modification le 18 mai 2020 à 20:10.

    intro : merci pour ce journal et cette astuce + explication

    La fedora de mon mini laptop acer c720p est passée en 32 (tout comme elle était auparavant passé en 31, et encore avant … ne me souviens plus, peut être fedora 26 ? ou 25 ?) en mise à jour, et je n'ai pas rencontré ce problème

    Finalement, après recherche, le problème vient plutôt de la configuration de Fedora : le module « resume » (nécessaire à l’hibernation) n’est pas intégré à l’initrd par défaut.

    Faut dire qu'une question me vient à l'esprit : pourquoi diable utiliser un initrd sur un laptop personnel ? Alors qu'il suffit d'ajouter rootfstype=ext4 (ou =xfs) en option noyal et ça boote très bien tout seul, avec le noyau par défaut. Maintenant (et depuis longtemps, qq versions du moins) le noyau et Fedora vont aller chercher tout seuls comme des grands les modules nécessaires au fonctionnement (Plus besoin de se faire son noyal avec juste le nécessaire compilé en dur, le noyau par défaut et c'est ok. Par exemple sur ce laptop : l'écran tactile, mais aussi le bluetooth, au total 81 modules pour ce laptop) Tout fonctionne nickel. Par défaut. Et du coup je n'ai pas vu ce problème avec dracut et l'hibernation :p

    ça peut être utile ? ;-)

    illustration boot sans initrd

    • [^] # Re: initrd ?

      Posté par  (site web personnel) . Évalué à 5.

      Et ça marche avec un disque chiffré ?

      • [^] # Re: initrd ?

        Posté par  (site web personnel) . Évalué à 3. Dernière modification le 25 mai 2020 à 20:23.

        Je n'ai pas testé, c'est un test intéressant à faire pour voir s'il faut modifier qq chose de particulier ;-) (je présume que si / est chiffré (et/ou /usr) alors il faut l'initrd, si /home chiffré seulement alors ok sans initrd : mais à vérifier)

    • [^] # Re: initrd ?

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 25 mai 2020 à 20:34.

      J'ajoute une nécessaire, visiblement, recommandation :
      Ne vous lancez pas dans cette manip si vous n'êtes pas à l'aise avec :

      • efi et ses entrées
      • grub2
      • avec sa conf /boot/loader/entries/…

      Sur mes deux pc, un en 'legacy bios' l'autre en 'efi tianocore payload coreboot' : tout fonctionne nickel. En ajustement cosmétique j'ai juste du recréer l'entrée efi fedora (sinon il faisait une erreur puis passait à la découverte automatique, donc c'est vraiment cosmétique, mais il est possible que certains efi soient plus embêtants, en exigeant une modification pour booter : heureusement que les explications, au dessus, ne sont pas complètes en mode "pas à pas")

      en plus ce n'est pas là qu'on récupère le plus de temps au boot. ça, c'est plus cosmétique et pour suivre les actualités. Le gain de temps boot se fait surtout en ajustement les services strictement nécessaire à la machine (en retirant mdraid et lvm-monitor si ni lvm ni mdraid ne sont utilisés, ou encore en retirant le systemd-udev-settle et le NetworkManager-wait-online, ainsi que tout ceux inutiles pour l'usage de votre machine) Illustrations :

      Installation par défaut d'une F32 ce matin :
      f32 par défaut

      La même après réglages :
      f32 config

  • # Hibernation, pourquoi faire ?

    Posté par  (site web personnel) . Évalué à 6.

    Il fut un temps j'utilisais l'hibernation. C'était principalement sur mon Pentium 4 avec ma SuSE 9.1 qui mettait plus d'une minute à démarrer.

    Mais maintenant, avec les machines de guerre et les démarrage en moins d'une dizaines de secondes (2,5s du démarrage à dwm sur mon thinkpad x1 4th gen) j'ai du mal à voir l'intérêt de l'hibernation. De plus, l'hibernation requiert une partition swap ou un fichier swap file et avec les machines ayant maintenant jusqu'à 16Go de RAM, ça devient couteux en écriture (bonjour l'usure des SSD !).

    Qui utilise encore vraiment l'hibernation ? Idée de sondage peut-être ? :)

    git is great because linus did it, mercurial is better because he didn't

    • [^] # Re: Hibernation, pourquoi faire ?

      Posté par  (Mastodon) . Évalué à 2.

      J'avoue que j'utilise essentiellement la veille mais que le soir j'éteins. Plus par habitude et parce que je n'ai pas `me poser de question si j'ai eu une mise à jour ou pas (bien que j'ai une notification sur mon bureau). Je sais que je serais le lendemain sur le nouveau noyau, nouvelles librairies, etc.

      De toute manière je n'ai pas l'habitude de laisser une appli démarrée avec le même document ouvert plusieurs jours d'affilée.

    • [^] # Re: Hibernation, pourquoi faire ?

      Posté par  . Évalué à 5.

      C'est pour retrouver ton pc comme tu l'as laissé, avec les projets non sauvegardés, les documents ouverts, es onglets du navigateur. Tu n'as pas toujours envie de tout fermer proprement, pouvoir reprendre ou tu en étais, est très confortable !

      • [^] # Re: Hibernation, pourquoi faire ?

        Posté par  (site web personnel) . Évalué à 4.

        avec les projets non sauvegardés

        mieux vaut quand même le faire avent hibernation, au cas où.

        « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

      • [^] # Re: Hibernation, pourquoi faire ?

        Posté par  (Mastodon) . Évalué à 2.

        Les applications modernes sauvegardent maintenant tout seul.

        Après c'est surtout un choix personnels. Il y a des gens qui veulent retrouver toutes leurs fenêtres dans l'état identique dans lequel elles étaient. Moi je préfère recommencer d'une page blanchr d'autant plus qu'entre un jour où je travaille, un soir ou jour de week-end où je ferais tout autre chose je n'aurais pas du tout les mêmes applications ouvertes (ni même le même user à vrai dire).

      • [^] # Re: Hibernation, pourquoi faire ?

        Posté par  . Évalué à 1.

        Pareil, mais fichiers sauvegardés. Tous mes fichiers de code, de doc et autres, ouverts sur différents espaces virtuels.

        J'utilise la mise en veille en mémoire, c'est très simple : systemctl suspend en tant que simple utilisateur et appuyer sur une touche pour redémarrer.

        • [^] # Re: Hibernation, pourquoi faire ?

          Posté par  . Évalué à 2.

          En fait, le pb c'est qu'on ne sait pas facilement, si c'est suspend to disk ou suspend to ram.
          Si on ne veut pas consommer d'élec, il faudrait faire un suspend to disk mais c'est précisément celui-ci qui pose problème …

          • [^] # Re: Hibernation, pourquoi faire ?

            Posté par  . Évalué à 2.

            Pourquoi "on ne sait pas facilement" ? Pour moi "systemctl suspend" c'est en mémoire. Apparemment "systemctl hibernate" sert à l'hibernation.

            La mise ne veille en mémoire consomme sans doute un peu d'énergie mais permet de mettre la machine en veille simplement, ce que je trouve commode.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.