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

17

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

Après la mise à niveau vers 18.04 si j'essaie de démarrer mon ordinateur après l'hibernation, il démarre comme s'il n'y avait pas d'hibernation.

Kamil
la source
J'ai le même problème avec 18.04, je pense que la solution doit être de spécifier la bonne partition pour la reprise, mais je n'ai toujours pas trouvé le moyen de le faire. Tout ce que j'ai trouvé, c'est que Google n'a pas fonctionné pour moi.
user2819650
La partition est correctement définie dans /etc/initramfs-tools/conf.d/resume pour mon échange. Je soupçonne que l'hibernation ne se fait pas correctement ou que la reprise au démarrage ne fonctionne pas. Mais je ne sais pas comment le déboguer davantage. Syslog et dmesg ne donnent aucun indice sur le problème.
Kamil

Réponses:

29

Des modifications ont été apportées aux paramètres par défaut par rapport au LTS précédent (16.04). Dans mon cas, l'hibernation n'a pas fonctionné jusqu'à ce que j'aie effectué plusieurs étapes, dont l'augmentation de la taille du fichier d'échange, l'activation, la vérification des stratégies, etc.

Cela peut facilement être ma réponse la plus longue sur StackExchange entier, j'ai donc essayé de rendre les en-têtes descriptifs .

Bottes car il n'y avait pas d'hibernation

Il serait prudent de jeter un œil à vos journaux (cela dmesgpourrait aider) et de voir s'il y a quelque chose. Il y a des raisons pour lesquelles malgré le fait que vous ayez dit au système d'hiberner, il ne le fera pas, ou il suspendra à la place (RAM).

Regarder kern.loget syslogrechercher des messages liés à l'hibernation ne ferait pas aussi 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 de swap, mais vous avez un fichier de swap.

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

Hibernation désactivée

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

Jargon

Suspendre à la RAM - La RAM conserve les données, l'ordinateur s'endort plus rapidement, utilise plus d'énergie lorsqu'il est suspendu, se réveille plus rapidement. Certains appellent cela le sommeil.

Suspendre sur le disque - alias hibernation. La RAM est enregistrée pour permuter (partition ou fichier), l'ordinateur se met en veille plus lentement, utilise moins d'énergie en hibernation, se réveille plus lentement.

Suspend-to-RAM sous Linux par Rafael J. Wysocki et A. Leonard Brown

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

Pour hiberner, vous devez (simplification ici) enregistrer l'intégralité de votre RAM sur votre disque dur. Vous devez donc réserver suffisamment d'espace pour le faire. Sinon, cela échouera et vous n'hibernerez pas.

  1. free -m vous dira combien de mémoire vous avez, utilisez et combien il y a dans votre swap.
  2. df -h vous indiquera la quantité d'espace disque dont vous disposez sur chaque point de montage et la quantité utilisée, gratuite, etc. assez d'espace pour votre échange.
  3. cat fstabdevrait vous donner des informations si vous avez une partition ou un fichier d'échange. Selon Ubuntu Hibernation, la FAQ swapfilepeut ne pas toujours fonctionner avec certaines combinaisons de matériel / pilotes.

Si vous n'avez pas assez d'espace, suivez la FAQ sur le swap Ubuntu . Il vous indique comment augmenter le fichier d'échange, en ajouter un autre, vérifier s'il est utilisé, etc. Avec des commandes et des explications. Ressource vraiment sympa.

Je n'ai pas assez d'espace pour installer 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 garantir que la taille de l'image ne dépasse pas ce nombre. Cependant, si cela s'avère impossible, il essaiera quand même de suspendre en utilisant la plus petite image possible. En particulier, si "0" est écrit dans ce fichier, l'image suspendue sera aussi petite que possible. La lecture de ce fichier affichera la taille limite d'image actuelle, qui est définie par défaut sur 2/5 de la RAM disponible.

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

Prérequis - votre noyau prend-il en charge la suspension sur disque?

Le noyau prend en charge tout ce qui est répertorié /sys/power/state, donc:

cat /sys/power/state

Admis (à ma connaissance) les entrées y sont: mem, standby, freeze, disk. Explication:

  • mem- a plusieurs significations, laquelle exactement sur votre système vous découvrirez via cat /sys/power/mem_sleep. J'ai:s2idle [deep]
  • standby - Suspension à la mise sous tension (si prise en charge)
  • freeze - Suspendre au ralenti (STI)
  • disk- Suspension sur disque (STD), hibernation . Ça - tu veux.

Ensuite, nous devons vérifier cat /sys/power/disk. Si vous y êtes, disabledplongez dans votre BIOS à la recherche d'un démarrage sécurisé - c'est la seule idée que je puisse vous proposer 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, donc jeter un œil à votre BIOS est une bonne idée même si vous n'avez pas de "démarrage sécurisé".

Lire ici:

  1. Documents sur le noyau
  2. Wiki Debian sur l'hibernation

TBH, même si votre noyau ne prend PAS en charge l'hibernation, vous pouvez l'essayer d'une autre manière, faites défiler jusqu'à la sectionInterfaces .

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 peux citer ici, alors disons que c'est du 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 quitte correctement l'hibernation - c'est généralement la cause de l'écran noir lors de la reprise . Consultez le wiki ArchLinux pour obtenir des conseils sur la façon de déboguer les problèmes. Je suggérerais également la FAQ Ubuntu sur les problèmes de mise en veille prolongée. La navigation dans les bogues du Launchpad peut également donner des résultats. IIRC, il y a un paramètre de noyau spécifiant en quelques secondes un délai avant de reprendre.
  6. L'autorisation de mise en veille prolongée diffère selon les différentes versions de Polkit

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

Je veux hiberner - échanger la partition

Il y a des cas où les gens renoncent au fichier d'échange et retournent à la partition d'échange. Après tout, cela a fonctionné sur les LTS précédents. Je n'ai pas essayé, donc je n'offrirai pas de pointeurs.

Je veux hiberner - avec un fichier d'échange

  1. Assurez-vous d'avoir suffisamment d'espace là-bas. La FAQ sur le swap Ubuntu vous indique de 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 c'est un long sujet.
  2. Augmentez le fichier d'échange ou créez-en un nouveau avec une taille suffisante (de préférence, je suis d'accord avec @muru ) et changez-le /etc/fstaben un nouveau. Redémarrez pour voir le changement est bien pris (stocker la sauvegarde du fstabafin que vous puissiez facilement revenir en arrière au cas où.
  3. Dirigez votre noyau vers cela avec les paramètres appropriés, afin qu'il sache d'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 vous - comme moi - décidiez finalement que la suspension vers la RAM est suffisante et que vous ne voulez pas avoir 32 Go sur un fichier d'échange (pas si bien pour les gens avec un SSD dans leurs ordinateurs portables, par exemple). Mais!

  1. hibernate to swap file nécessite resume=de savoir sur quelle partition se trouve votre fichier swap et resume_offset=de savoir à partir de quel fichier swap commencer la reprise.
  2. hibernate to partition nécessite resume=de pointer pour échanger la partition.
  3. la résolution des problèmes d' écran noir pourrait bien nécessiter resumedelay=.

Documents du noyau sur le retard de la reprise de l'hibernation:

resumedelay = [HIBERNATION] Délai (en secondes) de pause avant d'essayer 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 l' rootélément dans fstab. Donc, ou /dev/sdaXou UUIDou LVM. Pour hiberner dans un fichier - fournissez une 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 de swap introuvable

Le fichier d'échange doit être formaté correctement. Si vos journaux vous le disent, vous essayez d'hiberner dans un fichier ou votre paramètre de reprise n'est pas correct.

Basculez pour partitionner ou corriger le fichier ou modifier l'interface utilisée pour l'hibernation.

Voir: /unix/43508/debian-hibernate-problem-pm-swap-header-not-found

mkswapest utilisé pour formater le fichier, en savoir plus ici

Problème! Hibernation non autorisée!

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

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

Pour Mint, 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/diska disabled. Les journaux affichent "Échec d'hibernation du système via logind: le verbe Sleep n'est pas pris en charge".

Solution: recherchez votre BIOS et trouvez la chose problématique. Éteignez-le.

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

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

Interfaces

  1. swsusp - interface de noyau de bas niveau. Voir Prérequis - noyau pour quels fichiers. L'écriture directe dans des fichiers peut entraîner une suspension (vers la RAM, le disque et l'hybride). Selon SwapFAQ problématique avec l'hibernation au fichier.
  2. uswsusp - ArchWiki et Wiki Debian et belle question AskUbuntu avec une explication comment l'utiliser .
  3. systemd - ArchWiki dessus
  4. pm-utils - AFAIK qui est une collection de scripts originaires de Debian - je serais ravi d'accueillir moi-même plus d'informations.

Remarques de clôture

Pour moi, il a fallu presque deux jours de travail pour le compiler. J'espère que cela vous aidera (ainsi que d'autres) à résoudre votre problème plus rapidement. Il y a encore des points que j'ai ratés mais il est 2h du matin et je n'ai plus envie d'écrire plus maintenant. Je suis bien sûr ouvert aux conseils de quiconque pour améliorer les choses, alors commentez. Je répondrai une fois que je dors, travaille etc. :-)

Je ne suis pas certain que l'hibernation sur le disque soit géniale. J'ai fini par dormir. Mais pour moi, le problème était d'avoir un fichier de 32 Go juste pour pouvoir faire l'hibernation, car j'évite généralement d'échanger du tout. Mon fichier d'échange initial était à 2 Go et il était principalement vide. YMMV. Et bonne chance! Et commencez par les journaux!

LAFK dit réintégrer Monica
la source
Très bonne réponse! Mais ce qui a finalement résolu mon cas était la FAQ Swap liée et elle me disait d'ajouter "resume = UUID" à une variable dans mon fichier de configuration grub et / ou quelque chose de similaire avec initramfs-tools. Pour une raison quelconque, j'avais un mauvais UUID là-bas, ce qui était probablement le problème. Je suggère donc à quelqu'un ayant un problème similaire de vérifier d'abord ce qui est écrit dans la FAQ sur le swap sous "Comment ajouter ou modifier une partition de swap?", Et le troisième point sur l'hibernation.
RimaNari
1
"disque - Suspendre sur disque (STD), hibernation. Ce - vous voulez." Suis-je le seul à en avoir profité? Merci beaucoup.
spakmad
très bonne réponse! une petite remarque: sur une de mes machines reprendre après mise en veille prolongée après une deuxième tentative de démarrage uniquement (rien ne s'affichait sur le moniteur lors de la première tentative). je pourrais résoudre ce problème en installant une pile HWE: $ sudo apt install linux-generic-hwe-18.04(pour certains matériels, cela linux-generic-hwe-18.04-edgepourrait même valoir le coup).
hiro protagoniste
1
Ah. Je ne vais pas hiberner! J'ai 512 Go de RAM. Eh bien ... (J'ai assez d'espace sur mon disque dur de 10 To, mais il faudrait des heures pour redémarrer!)
Alexis Wilke
9

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

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

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

Dans /etc/default/grubJ'ai utilisé une entrée distincte pour reprendre l'hibernation

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

Créer un policykit dans l'autorité locale (pkla)

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

Et insérez là

[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 certaines applications et utilisez systemctl hibernate(sans sudo) pour voir si cela fonctionne

Roey
la source
fonctionne bien! Merci beaucoup.
Yossarian42
merci mec, tu m'as sauvé!
Vahe Shadunts du
1

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

et voici la ... UNE CHOSE qui l'a fait fonctionner à nouveau ...

Dites à grub2 où se trouve la partition de swap:

Découvrez d'abord sur quelle partition il se trouve en utilisant la commande ci-dessous:

cat /etc/fstab

Le mien est sur sda7 tout comme la sortie suivante:

le swap était sur / dev / sda7 pendant l'installation

Ensuite, ajoutez dans Grub2 l'ajout suivant à la ligne suivante, à l'aide de la commande suivante:

sudo gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = désactiver la reprise = / 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é, peut-être était-ce simplement à cause d'une mise à jour du noyau qui l'a foiré, mais cela a néanmoins fonctionné.

markackerman8-gmail.com
la source
0

j'espère que cela aidera quelqu'un, mais je lance popos / ubuntu 19.04. Dans ma configuration, j'ai pu mettre en veille prolongée à l'aide de s2disk ou pm-hibernate, mais la reprise a échoué. Pour résoudre ce problème, car mon système est démarré en utilisant UEFI au lieu de grub. Je viens de réinstaller le chargeur de démarrage. Pour vérifier si vous exécutez UEFI, utilisez les éléments suivants:

[ -d /sys/firmware/efi ] && echo "Installed in UEFI mode" || echo "Installed in Legacy mode"

si en mode UEFI, j'ai suivi ce guide pour réinstaller le chargeur de démarrage, cela varie si vous utilisez un disque nvme ou un disque sata: https://support.system76.com/articles/bootloader/

assurez-vous que dans vos options kernalboot, vous spécifiez la partition ou l'UUID d'où reprendre, par exemple quelque chose comme ceci:

resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Vous pouvez ajouter ceci soit: 1) sudo kernel-stub -a "resume = UUID = ..." 2) éditez le fichier /etc/initramfs-tools/conf.d/resume et ajoutez: resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

vérifiez votre fichier / var / log / syslog pour quelque chose comme ceci: 4 août 22:26:42 pop-os / usr / bin / kernelstub [19639]: kernelstub: DEBUG kopts: root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro silencieux loglevel = 0 systemd .show_status = false resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Si le CV est manquant ou erroné, vous devrez à nouveau mettre à jour votre boot kernal.

Lingster
la source
0

Outre la configuration du point de reprise de swap dans grub mentionné dans la réponse de Sam73 , j'ai trouvé que mon Ubuntu 18.04 devait également installer laptop-mode-tools:

$sudo apt install laptop-mode-tools

puis changez ENABLE_LAPTOP_MODE_ON_AC=1dans le fichier de configuration:

$sudo vim /etc/laptop-mode/laptop-mode.conf

démarrez le mode ordinateur portable avec:

$sudo laptop_mode start

PS Vous pouvez vérifier si l'ordinateur portable démarre ou non avec

$cat /proc/sys/vm/laptop_mode

S'il s'imprime 0, le laptop_modene fonctionne pas, sinon, cela indique qu'il fonctionne correctement.

Yossarian42
la source