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.
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 .
Il serait prudent de consulter vos journaux (dmesg
pourrait 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 syslog
pour 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.
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.
Les stratégies peuvent également désactiver ou interdire l'hibernation.
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.
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.
free -m
vous dira combien de mémoire vous avez, utilisez et combien est dans votre échange.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.cat fstab
devrait vous donner des informations si vous avez une partition ou un fichier d'échange. Selon Ubuntu Hibernation, FAQ swapfile
peut 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.
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.
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: mem
name__, standby
name__, freeze
name__, disk
name__. 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à disabled
name__, 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:
TBH, même si votre noyau ne supporte PAS l'hibernation, vous pouvez l'essayer autrement, faites défiler jusqu'à la section Interfaces
name __ .
Dans aucun ordre particulier:
N'utilisez pas BTRFS et hibernate: des données corrompues seront le résultat.
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.
/etc/fstab
par le nouveau. Redémarrez pour voir que les modifications sont prises correctement (enregistrez la sauvegarde de fstab
afin que vous puissiez facilement revenir en arrière, au cas où.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 systemd
et 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!
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.resume=
pour pointer vers swap partition.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 root
a fstab
name__. Donc, soit /dev/sdaX
ou UUID
ou LVM. Pour l'hibernation dans un fichier, indiquez la partition où votre fichier peut être trouvé.
En train de lire:
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
mkswap
est utilisé pour formater le fichier, lisez la suite ici
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
Test: cat /sys/power/disk
a disabled
name__. 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) .
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/fstab
sans 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.
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