web-dev-qa-db-fra.com

Ubuntu 18.04 ne peut pas reprendre après la mise en veille prolongée

Hibernate fonctionnait correctement lorsque j'utilisais Ubuntu 17.04. Après la mise à niveau vers 17.10, je ne pouvais pas reprendre à cause d’un écran noir après la reprise ( ce bogue ).

Après la mise à niveau vers 18.04, si je tente de démarrer mon ordinateur après la mise en veille prolongée, celui-ci démarre comme si aucune mise en veille prolongée n'était effectuée.

13
Kamil

Les réglages par défaut ont été modifiés par rapport à la version LTS précédente (16.04). Dans mon cas, l'hibernation ne fonctionnait pas avant plusieurs étapes, dont l'augmentation de la taille du fichier d'échange, son activation, le respect des règles, etc.

Cela peut facilement être ma réponse la plus longue sur StackExchange complet, alors j'ai essayé de créer des en-têtes descriptifs .

Bottes comme il n'y avait pas d'hibernation

Il serait prudent de consulter vos journaux (dmesgpourrait vous aider) et de voir s’il en reste quelque chose. Il y a des raisons pour lesquelles, malgré le fait que vous disiez au système de mettre en veille prolongée, ce n'est pas le cas, ou le système suspendra en RAM (à la place).

Il suffit de regarder kern.log et syslogpour rechercher des messages liés à la veille prolongée qui font mal. Les sections commençant par "problème" peuvent vous aider avec des problèmes spécifiques.

Fichier d'échange ou partition d'échange

L'un des changements cruciaux est que maintenant vous n'avez pas de partition d'échange, mais vous avez un fichier d'échange.

Le fichier d'échange peut ne pas fonctionner pour votre mélange de matériel/pilotes/système d'exploitation et de veille prolongée.

Hibernation désactivée

Les stratégies peuvent également désactiver ou interdire l'hibernation.

Jargon

Suspendre à RAM - RAM conserve les données, l'ordinateur se met en veille plus rapidement, utilise plus d'énergie lorsqu'il est suspendu, se réveille plus rapidement. Certains appellent cela dormir.

Suspend to disk - aka hibernation. RAM est enregistré pour un échange (partition ou fichier), l'ordinateur se met en veille plus lentement, utilise moins d'énergie en veille prolongée, se réveille plus lentement.

Suspend-to-RAM in Linux by Rafael J. Wysocki and A. Leonard Brown

Prérequis - avez-vous assez d'espace?

Pour passer en hibernation, vous devez (simplification ici) sauvegarder l’intégralité de votre RAM sur votre disque dur. Donc, vous devez réserver suffisamment d’espace pour le faire. Si vous ne le faites pas, cela échouera et vous ne hibernerez pas.

  1. free -m vous dira combien de mémoire vous avez, utilisez et combien est dans votre échange.
  2. df -h vous dira combien d'espace disque vous avez sur chaque point de montage et combien est utilisé, gratuit, etc. Ceci est important car vous voudrez peut-être spécifier plus tard où votre fichier d'échange sera situé, ou à quelle partition "couper" avoir assez d'espace pour votre échange.
  3. cat fstab devrait vous donner des informations si vous avez une partition ou un fichier d'échange. Selon Ubuntu Hibernation, FAQ swapfilepeut ne pas toujours fonctionner avec certaines combinaisons matériel/pilotes.

Si vous ne disposez pas de suffisamment d’espace, suivez FAQ sur les échanges Ubunt . Il vous indique comment augmenter le fichier d'échange, en ajouter un autre, vérifier s'il est utilisé, etc. À l'aide de commandes et d'explications. Ressource vraiment sympa.

Je n'ai pas assez d'espace pour ma RAM!

Les documents du noyau disent:

/ sys/power/image_size contrôle la taille de l'image créée par le mécanisme de suspension sur disque. Il peut être écrit une chaîne représentant un entier non négatif qui sera utilisé comme limite supérieure de la taille de l'image, en octets. Le mécanisme de suspension sur disque fera de son mieux pour que la taille de l’image ne dépasse pas ce nombre. Toutefois, si cela s'avère impossible, le système essaiera néanmoins de suspendre en utilisant la plus petite image possible. En particulier, si "0" est écrit dans ce fichier, l'image de suspension sera aussi petite que possible. La lecture de ce fichier affichera la limite de taille d'image actuelle, qui est définie par défaut sur 2/5 des RAM disponibles.

Alors, essayez de modifier la taille de votre image. Comment - poser une autre question s'il vous plaît.

Conditions préalables - votre noyau prend-il en charge la suspension sur disque?

Le noyau supporte tout ce qui est listé dans /sys/power/state, donc:

cat /sys/power/state

À ma connaissance, les entrées autorisées incluent: memname__, standbyname__, freezename__, diskname__. Explication:

  • mem- a plusieurs sens, celui que vous découvrirez exactement sur votre système via cat /sys/power/mem_sleep. J'ai: s2idle [deep]
  • standby- Suspension au démarrage (si prise en charge)
  • freeze- Suspend To Idle (STI)
  • disk- Suspension sur disque (STD), mise en veille prolongée . Ça - tu veux.

Ensuite, nous devons vérifier cat /sys/power/disk. Si vous avez là disabledname__, plongez dans votre BIOS à la recherche de Secure Boot - c’est la seule idée que je puisse vous offrir et la seule chose que je sache peut interférer et désactiver l’hibernation. Bien que je ne connaisse que SecureBoot, il peut y avoir d'autres interférences, il est donc judicieux de jeter un coup d'œil à votre BIOS même si vous n'y avez pas encore de "démarrage sécurisé".

Lecture ici:

  1. documentation sur le noya
  2. Wiki Debian en veille prolongée

TBH, même si votre noyau ne supporte PAS l'hibernation, vous pouvez l'essayer autrement, faites défiler jusqu'à la section Interfacesname __ .

Lisez ceci - avertissements et problèmes - pas de BTRFS

Dans aucun ordre particulier:

  1. Tous les chipsets ne fonctionneront pas (je n'ai pas de sources que je puisse citer ici, alors disons des ouï-dire)
  2. VAIO a des problèmes, soi-disant il y a un drapeau pour les contrer
  3. SecureBoot est souvent cité comme interférant ou désactivant l'hibernation
  4. Wake-on-LAN consomme de l'énergie même en veille prolongée
  5. Le nombre de modules (graphiques en particulier) peut être initialisé AVANT que votre système ne reprenne correctement après la mise en veille - , cela est généralement la cause d'un écran noir lors de la reprise . Consultez le Wiki ArchLinux pour obtenir des conseils sur la manière de déboguer les problèmes. Je suggérerais également Ubuntu FAQ sur les problèmes d'hibernation. Parcourir les bogues du Launchpad peut également donner des résultats. IIRC, il existe un paramètre de noyau spécifiant en secondes un délai avant reprise.
  6. L'autorisation de procédure d'hibernation diffère selon les versions de Polkit

N'utilisez pas BTRFS et hibernate: des données corrompues seront le résultat.

Je veux hiberner - permuter la partition

Il existe des cas où des personnes renoncent au fichier d'échange et reviennent à la partition d'échange. Après tout, cela a fonctionné sur les précédents LTS. Je n'ai pas essayé, donc ne propose pas de pointeurs.

Je veux hiberner - avec fichier d'échange

  1. Assurez-vous d'avoir assez d'espace là-bas. FAQ sur les échanges Ubunt vous indique combien vous avez besoin, les commandes ci-dessus le font également. Si vous avez besoin de plus d'informations ici, posez une autre question s'il vous plaît, car il s'agit d'un long sujet.
  2. Augmentez le fichier d'échange ou créez-en un nouveau de taille suffisante (préféré, je suis d'accord avec @ mur ) et remplacez le /etc/fstab par le nouveau. Redémarrez pour voir que les modifications sont prises correctement (enregistrez la sauvegarde de fstabafin que vous puissiez facilement revenir en arrière, au cas où.
  3. Pointez votre noyau sur cela avec les paramètres appropriés, afin qu'il sache où reprendre.
  4. Mettez à jour/reconfigurez votre chargeur de démarrage et redémarrez.

Paramètres du noyau? Effrayant!

Lisez attentivement et décidez si vous souhaitez le faire, mais ce n'est qu'un moyen de configurer votre noyau. Il peut être plus facile d'hiberner via systemdet uswsusp(voir Interfaces , ci-dessous). Il se peut que, comme moi, vous décidiez en fin de compte que la suspension de la RAM est suffisante et que vous ne voulez pas disposer de 32 Go sur un fichier d'échange (par exemple, ce n'est pas si bien pour les personnes possédant un SSD dans leur ordinateur portable). Mais!

  1. hibernate to swap file nécessite resume= pour connaître la partition sur laquelle se trouve votre fichier. swap et resume_offset= pour savoir à partir de quel endroit du fichier swap commencer.
  2. hibernate to partition requiert resume= pour pointer vers swap partition.
  3. la résolution des problèmes d'écran noir peut nécessiter resumedelay=.

Le noyau docs sur le report de la sortie de veille prolongée:

resumedelay = [HIBERNATION] Délai (en secondes) pour faire une pause avant de tenter de lire les fichiers de reprise.

Paramètres requis pour le fichier d'échange et l'hibernation :

resume = [SWSUSP]

      Specify the partition device for software suspend

      Format:

      {/dev/<dev> | PARTUUID=<uuid> | <int>:<int> | <hex>}

resume_offset = [SWSUSP]

      Specify the offset from the beginning of the partition
      given by "resume=" at which the swap header is located,
      in <PAGE_SIZE> units (needed only for swap files).

      See Documentation/power/swsusp-and-swap-files.txt

Pour le resume= choisissez le même style que roota fstabname__. Donc, soit /dev/sdaX ou UUIDou LVM. Pour l'hibernation dans un fichier, indiquez la partition où votre fichier peut être trouvé.

En train de lire:

  1. https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
  2. https://wiki.archlinux.org/index.php/Kernel_parameters

Problème - en-tête d'échange introuvable

Le fichier d'échange doit être correctement formaté. Si vos journaux vous l'indiquent, vous essayez peut-être de passer en hibernation dans un fichier ou votre paramètre de CV n'est pas correct.

Basculez vers la partition ou corrigez le fichier ou changez l'interface utilisée pour l'hibernation.

Voir: https://unix.stackexchange.com/questions/43508/debian-hibernate-problem-pm-swap-header-not-found

mkswapest utilisé pour formater le fichier, lisez la suite ici

Problème! Hibernation non autorisée!

Testez: pm-hibernate (si le paquetage pm-utils est installé) ou systemctl hibernate vous indique que vous n’êtes pas autorisé. Paramètre par défaut sous Ubuntu depuis IIRC 12.04.

Solution (s): dépend de votre version de Polkit, de votre version d’Ubuntu et de sa saveur ... Voir cette question . De plus, ArchWiki on Polkit peut aider.

Pour la menthe, voir: https://forums.linuxmint.com/viewtopic.php?t=259912

Problème! Hibernation désactivée par quelque chose dans le BIOS!

Test: cat /sys/power/disk a disabledname__. Les journaux indiquent "Échec de la mise en veille prolongée du système via logind: verbe de veille non pris en charge".

Solution: recherchez dans votre BIOS et trouvez le problème. Éteignez.

Solution 2: essayez une autre interface de veille prolongée.

Voir: Comment activer l'hibernation dans 16.04.1? (Systemd) .

Des interfaces

  1. swsusp - interface noyau de bas niveau. Voir Prérequis - noyau pour quels fichiers. L'écriture dans des fichiers directement peut entraîner une suspension (de la RAM, du disque et hybride). Selon SwapFAQ problématique avec hibernation à déposer.
  2. uswsusp - ArchWiki et Debian Wiki et Belle question AskUbuntu avec une description de son utilisation .
  3. systemd - ArchWiki dessus
  4. pm-utils - Pour autant que je sache, c'est ne collection de scripts originaire de Debian - J'accueillerai volontiers plus d'informations moi-même.

Mot de la fin

Pour moi, il a fallu presque deux jours de travail pour compiler cela. J'espère que cela vous aidera (et aux autres) à résoudre votre problème plus rapidement. Il me reste des points qui me manquent mais il est 2 heures du matin et je n'ai plus envie d'écrire plus maintenant. Je suis bien sûr ouvert à tous les indicateurs pour améliorer la situation, alors laissez-nous aller. Je répondrai une fois que je dors, travaille, etc. :-)

Je ne suis pas certain que l'hibernation sur disque est géniale. Je suis allé avec dormir à la fin. Mais pour moi, le problème était d’avoir un fichier de 32 Go juste pour pouvoir passer en hibernation, car j’évite généralement l’échange. Mon fichier d'échange initial était à 2 Go et il était presque vide. YMMV. Néanmoins, bonne chance! Et commencez avec les journaux!

Utilisez l'UUID de la partition de swap au lieu de son point de montage dans le paramètre RESUME resume=UUID=<#> à la fois /etc/default/grub et /etc/initramfs-tools/conf.d/resume

Créez une entrée pour la partition de swap dans /etc/fstabsans point de montage quelque chose comme ceci

# Entry for Swap : 
UUID=# none  swap    sw              0       0

Dans /etc/default/grub j'ai utilisé une entrée séparée pour reprendre le mode veille prolongée

# FOR HIBERNATION 
GRUB_CMDLINE_LINUX="resume=UUID=..."

Créer un kit de politique dans l'autorité locale (pkla)

Sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Et y insérer

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes

Après cette mise à jour initramfs et GRUB

Sudo update-initramfs -u -k all
Sudo update-grub

Redémarrez, ouvrez des applications et utilisez systemctl hibernate (sans Sudo) pour voir si cela fonctionne.

6
Roey

J'espère que ça aide

Pour moi, cela a toujours fonctionné jusqu'au 18.04 et après 18.04, je l'ai activé tel quel dans de nombreux articles, mais cela a soudainement cessé de fonctionner hier (travail correct pendant 4-5 mois),

et voici le ... UNE CHOSE qui le fait fonctionner à nouveau ...

Dites à grub 2 où se trouve la partition d'échange:

Commencez par trouver sur quelle partition il se trouve: utilisez la commande ci-dessous cat /etc/fstab Mine est sur sda7, tout comme la sortie suivante

swap était sur/dev/sda7 lors de l'installation

Ensuite, ajoutez dans Grub 2 l’ajout suivant à la ligne suivante, en utilisant la commande suivante:

Sudo gedit /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = désactiver le CV =/dev/sda7"

La partie importante est "resume =/dev/sda7"

/ dev/sda7 dans mon cas

Ensuite, mettez à jour Grub avec la commande suivante, et après cela, il a recommencé à fonctionner parfaitement

Sudo update-grub

Après de nombreuses tentatives, c’est la seule chose qui a fonctionné, c’est peut-être juste à cause d’une mise à jour du noyau qui a tout gâché, mais cela a quand même fonctionné ... j’espère que cela aide

Cordialement, Mark

1