Comment devrais-je hiberner avec succès Ubuntu 16.04?
J'ai essayé presque toutes les solutions sur le Web, mais aucune d'entre elles n'était réellement utile. J'ai trouvé mon problème presque complètement similaire à celui-ci
Vous pouvez utiliser
Sudo pm-hibernate
pour vérifier si le fonctionnement en veille prolongée fonctionne sur votre système ( cela mettra en veille votre ordinateur ).
Si cela ne fonctionne pas, vérifiez si la taille de votre swap est au moins égale à celle de votre RAM.
Pour ajouter cette option au menu des paramètres, vous pouvez créer un fichier de configuration. Ouvrez une fenêtre de terminal et exécutez cette commande:
Sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Il ouvre nano avec un fichier vide. Copiez les lignes ci-dessous et collez-les dans la nano fenêtre.
[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
Enregistrez ensuite les modifications, fermez nano et redémarrez le système pour que Hibernate disponible apparaisse dans "Options d'alimentation".
Référence: Comment hiberner mon ordinateur? dans la documentation officielle de Ubuntu 16.04.
Esperons que ça marche. Cela a fonctionné pour moi après avoir essayé toutes les autres options.
systemctl
et en l’utilisant dans les cas difficilesPour moi, pm-hibernate
échoue toujours. Après quelques ajustements, j'ai pu hiberner en utilisant l'interface de systemd (init system à partir de 16.04). J'ai également réussi à le faire fonctionner le 17.04 avec un fichier d'échange. Cette étude de cas peut être utile pour les personnes ayant des problèmes.
Premier essai:
Sudo systemctl hibernate
Si cela échoue, commencez le dépannage: dans l'état de veille prolongée (HTD ou ACPI S4), l'état de l'ordinateur est écrit sur le disque, de sorte qu'aucune alimentation n'est nécessaire pour le conserver. L'état est écrit sur une partition d'échange ou dans un fichier d'échange. Remarque: si vous utilisez BTRFS, n'essayez PAS d'utiliser un fichier d'échange, car cela pourrait endommager le système de fichiers .
Votre partition d'échange ou votre fichier d'échange devra peut-être avoir la même taille que RAM pour permettre l'hibernation, mais il y a de bonnes chances que vous puissiez l'hiberner si sa taille est au moins égale à 2/5 de la taille de la RAM, selon la page wiki Arch , essayez donc d’autres étapes avant d’augmenter la taille de l’échange.
Si votre problème est que vous obtenez un démarrage en mode minimal au lieu du CV attendu, vous devez au moins probablement définir un paramètre de démarrage pour rechercher l'image du disque .
Trouvez votre partition d'échange:
grep swap /etc/fstab
pour moi cela retourne (sortie partielle)
# swap was on /dev/mmcblk0p3 during installation
où /dev/mmcblk0p3
est la partition à spécifier
Ajouter un paramètre de démarrage:
sudoedit /etc/default/grub
A la ligne commençant par GRUB_CMDLINE_LINUX_DEFAULT
, ajoutez resume=/dev/YourSwapPartition
à la section entre guillemets (remplacez-la par la partition que vous avez identifiée précédemment). En utilisant mon exemple:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3"
Chaque fois que vous modifiez ce fichier, vous devez exécuter Sudo update-grub
sinon les modifications n'auront aucun effet.
Maintenant, vous devez redémarrer. Ensuite, vous pouvez essayer de hiberner, en lançant la commande:
Sudo systemctl hibernate
Pour reprendre, appuyez sur le bouton d'alimentation et le système va démarrer.
Si vous avez toujours des problèmes, démarrez le débogage.
J'inclus mon cas ci-dessous à titre d'exemple, mais des informations détaillées sur le débogage des états S peuvent être trouvées dans ce blog et également celui-ci .
Définissez quelques paramètres de démarrage supplémentaires pour capturer plus d'informations. Supprimez quiet
et splash
et ajoutez initcall_debug
et no_console_suspend
, ce qui entraînera l’impression des appels système init sur la console afin que vous puissiez voir ce qui ne va pas. J'ai mis ceci:
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"
Ce qui m'a aidé à voir ce qui n'allait pas sur le résumé de l'hibernation.
Dans mon cas, après la reprise, j’ai perdu le WiFi, et le noyau était clairement bouleversé, car la plupart des commandes (par exemple, lire quelque chose sur /sys
, recharger des modules ou n’importe quelle commande systemctl
) ne fonctionneraient pas - le processus semblerait démarrer et s’arrêter reviendrait à la normale après le redémarrage bien sûr). En regardant le système s’arrêter très lentement et en lisant tous les messages de débogage, j’ai remarqué qu’il y avait beaucoup de problèmes avec "brcm", j’ai donc deviné que le module de pilote sans fil Broadcom était à blâmer. Bien sûr, j'ai ajusté ma procédure d'hibernation pour décharger le module en premier:
Sudo modprobe -r brcmfmac
Sudo systemctl hibernate
en reprise je réinsère le module
Sudo modprobe brcmfmac
Et tout a fonctionné parfaitement. Je dois également lister le module btsdio
qui semble être incompatible avec brcmfmac
Encore une fois, avec l'aide de la page Arch wiki et quelques modifications supplémentaires, j'ai réussi à faire passer l'hibernation en mode 17.04 avec un fichier d'échange. Cela nécessitait un paramètre de démarrage supplémentaire, resume_offset=n
, où n est le premier numéro sous physical_offset
dans la sortie de Sudo filefrag -v /swapfile
:
$ Sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
....
Par conséquent, le paramètre de démarrage supplémentaire dans mon cas est resume_offset=34816
. Vous devez toujours définir un paramètre de démarrage pour que la partition puisse reprendre. Ce sera la partition racine (ou la partition sur laquelle se trouve votre fichier d'échange) Mes paramètres sont maintenant:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"
Où /dev/mmcblk1p2
est ma partition racine (la vôtre sera probablement quelque chose comme /dev/sda2
).
Pendant la reprise, je voyais que l'image se chargeait correctement, mais dans mon cas (juste un exemple - YMMVAPD), quelques pilotes supplémentaires (i2c_designware
) ont généré des erreurs et j'ai bloqué la reprise du système. La veille prolongée fonctionne si je décharge ces modules en plus de brcmfmac
, mais le système devient rapidement inutilisable sans ces modules. J'ai donc fait une sorte de script pour décharger les modules buggy et les réinsérer immédiatement en CV:
# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac
Quand je veux hiberner, je lance Sudo bash script
. Cela fonctionne très bien.
Utilisez systemd, définissez un paramètre d’amorçage pour le reprendre à partir du swap, identifiez les pilotes défectueux et déchargez-les avant de lancer le mode hibernation. Si le système ne peut pas fonctionner longtemps sans ces modules ou si vous devez en décharger plusieurs, il peut être plus facile d'utiliser un simple script pour lancer le mode veille prolongée.
Je pense que la manière d'activer l'hibernation pour la réponse 16.04 est connue de tous, comme décrit dans le buntu Wiki (voir ci-dessous si vous avez besoin des étapes). Mais les choses à vérifier ne sont pas approfondies, je pense. Au moins, c'est ce que j'ai trouvé.
D'après mes propres tests, j'ai au moins trouvé une vérification supplémentaire à effectuer. Je n'ai trouvé à ce sujet nulle part sur Internet.
Voici quelques vérifications -
Vérifiez que vous n’utilisez aucune partition btrfs . Oui . D'après mon test, j'ai constaté que si vous avez des partitions btrfs , la veille prolongée ne fonctionnera pas. Supprimer ou changer le type de partition en ext4
ne m'a pas aidé. Je devais supprimer le package btrfs-tools
.
Sudo apt-get purge btrfs-tools
Vous voudrez peut-être vérifier d'autres nouveaux types de partition qui ne sont pas bien testés. Sans supprimer le package, la mise en liste noire du pilote pourrait également fonctionner, mais je ne l'ai pas testée.
Vous devez également vérifier que votre partition de swap est suffisamment grande pour contenir le contenu de la RAM. Si votre RAM est de 4 Go, le swap doit avoir une taille d'au moins 4 Go (vous devez allouer quelques Mo supplémentaires pour plus de sécurité).
Il implique ces étapes
Créez un fichier en tant que root dans /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
Sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
Mettez ce contenu dans ce fichier
[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
Enregistrez le fichier en appuyant sur Ctrl-O. Sortir avec Ctrl-X
Redémarrez le démon polkitd
Sudo systemctl restart polkitd.service
Il devrait permettre d'hiberner.
(J'ai posé un question similaire demandant de mettre l'accent sur les réponses basées sur systemd, partageant ma solution ici pour les personnes qui suivent cette question)
Cette solution provient de Fedora rubriques (ils sont passés à systemd il y a quelque temps, donc il y a plus de matériel là-bas).
Dans mon cas (nouvelle installation de la version 16.04.1 sur une machine qui prenait toujours en charge l'hibernation), l'appel du code obsolète Sudo pm-hibernate
ne semblait rien faire et l'approche actuelle de systemd, systemctl hibernate
, retournait:
Failed to hibernate system via logind: Sleep verb not supported
Il s’avère que c’est le coupable qui a été installé dans le démarrage sécurisé: lors de l’installation de 16.04, il vous est demandé ce que vous voulez en faire (ce qui est une nouveauté, si je me souviens bien) et je l’ai gardé activé sans trop y penser.
Sur mon ordinateur avec démarrage sécurisé activé, cat /sys/power/disk
a répondu:
[disabled]
Après le redémarrage et la désactivation du démarrage sécurisé dans les paramètres du BIOS (ceux-ci sont spécifiques à la machine, mais généralement assez simples), j'ai essayé un cat /sys/power/disk
et obtenu:
[platform] shutdown reboot suspend
qui a l'air mieux. Et en effet, l'appel de systemctl hibernate
aboutit à une séquence d'hibernation/décongélation réussie.
De plus, après cela, je pouvais voir que l'hibernation était disponible en option à divers endroits de l'interface graphique, sans qu'il soit nécessaire d'utiliser polkit
hack. Donc, il semble que systemd
était en train de deviner de /sys/power/disk
que le système n’était pas en mesure de mettre en veille prolongée.
Cette instruction a fonctionné pour mon installation Ubuntu 18.04.
Sudo apt install hibernate
Il installera hibernate et d’autres dépendances nécessaires pour hibernergrep swap /etc/fstab
(UUID du doigt)sudoedit /etc/default/grub
À la ligne GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash", ajoutez l'UUID du swap. La ligne ressemble à ceci: GRUB_CMDLINE_LINUX_DEFAULT = "Resume de démarrage silencieux = UUID de swap"Sudo update-grub
Sudo systemctl hibernate
. Si tout fonctionne bien, ajoutez une entrée de menu.Sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
maintenant coller ceci:[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
copié de https://askubuntu.com/a/819891/7122
Répondant à ma propre réponse à la réponse de kelvinelove, le fichier qu’il suggère de modifier n’existait pas sur mon système (nouvelle Ubuntu 16.04). Au lieu de cela, j'ai fait ceci:
Sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
Recherchez ces sections (elles sont juste l'une à côté de l'autre):
[Désactiver la veille prolongée par défaut dans upower] Identity = utilisateur_unix: * Action = org.freedesktop.upower.hibernate ResultActive = no
[Désactiver hibernate par défaut dans logind] Identity = utilisateur_unix: * Action = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no
Modifiez ResultActive = no en ResultActive = yes pour les deux.
EDIT: Gunnar a fait remarquer que ce fichier était écrasé si un certain paquet était mis à jour, donc, selon vos intentions, ce n'est probablement pas la meilleure solution.
Source: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/
Il existe de très bonnes ressources ici pour vous aider à résoudre certains des problèmes les plus courants en matière d'hibernation sous Ubuntu.
Dans mon cas, faire tourner Ubuntu 16.10 sur un Lenovo u300s, pour que l'hibernation fonctionne correctement, je devais faire ce qui suit:
Editez /etc/default/grub
pour inclure la ligne suivante:
GRUB_CMDLINE_LINUX_DEFAULT = "pci silencieux = nomsi RESUME = UUID = 92781adb-f2a6-4f15-88fc-e1ce801291dd"
RESUME fait référence à votre UUID de fichier d'échange spécifique. En particulier, sur ma machine, le paramètre pci=nomsi
était la clé.
Bonne chance!
Premièrement, je vous recommande de vérifier si votre ordinateur prend en charge le mode veille prolongée, car si le fonctionnement en veille prolongée est désactivé par défaut, c’est parce que les résultats sont parfois désagréables sur certains ordinateurs. Testez votre machine en ouvrant le terminal (Ctrl+Alt+T) puis en tapant Sudo pm-hibernate
Votre machine devrait hiberner. Réveillez votre machine après l'hibernation et observez si elle se comporte mal ou si elle agit normalement. Si vous rencontrez une anomalie après l'hibernation, je vous conseille donc de ne pas poursuivre la procédure suivante. Toutefois, si cela fonctionne correctement, continuez à activer le mode veille prolongée en procédant comme suit:
Sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Editez le fichier ouvert et ajoutez ces lignes:
[Re-enable hibernation]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
Après cela, redémarrez votre ordinateur et, après vous être connecté, une option de mise en veille prolongée a été ajoutée dans le menu d'alimentation, dans le coin supérieur droit des paramètres.
Pour moi, cela fonctionne pour installer le package hibernate
, redémarrer puis exécuter Sudo hibernate-disk
. Je suis sûr qu'il est possible de l'ajouter au menu, mais ça ne vaut pas la peine.
Vous devez l'activer manuellement avec un petit effort. Il a été désactivé par défaut.
http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/
Ensuite, si cela ne fonctionne pas, il peut s'agir d'un problème de noyau 4.4.0 et vous devrez peut-être mettre à niveau le noyau.