¿Cómo puedo hibernar en Ubuntu 16.04?

86

¿Cómo debo hibernar con éxito Ubuntu 16.04?

He probado casi todas las soluciones en la web, pero ninguna de ellas fue realmente útil. Encontré mi problema casi completamente similar a este

Mahyar
fuente
2
Posible duplicado de ¿Cómo habilitar la hibernación?
DJCrashdummy
Funciona sudo pm-hibernate?
Pilot6
2
¿No ha cambiado la situación con systemd? ahora estamos destinados a usar, systemctl hibernateasí que quizás no sea un engañado ... o al menos una respuesta actualizada puede ser necesaria para que la antigua pregunta sea válida para engañar
Zanna
¿Qué versión de kernel estás ejecutando? Escribe uname -rel terminal (disculpas si ya lo sabías).
WinEunuuchs2Unix
Por favor, editar su pregunta y añadir la salida de free modo que podamos determinar si tiene la configuración de intercambio suficiente para hibernar éxito.
Élder Geek

Respuestas:

62

Hibernación usando systemctly haciendo que funcione en casos difíciles

Para mí, pm-hibernatesiempre falla. Después de algunos ajustes, pude hibernar usando la interfaz de systemd (sistema init en 16.04 y superior). También logré hacerlo funcionar en 17.04 con un archivo de intercambio. Este estudio de caso puede ser útil para otras personas con problemas.

Primer intento:

sudo systemctl hibernate

Si eso falla, comience la solución de problemas: en el estado de hibernación (HTD o ACPI S4), el estado de la máquina se escribe en el disco para que no se necesite energía para preservarlo. El estado se escribe en una partición de intercambio o en un archivo de intercambio. Nota: si usa BTRFS NO intente usar un archivo de intercambio ya que esto puede causar daños en el sistema de archivos

Es posible que su partición de intercambio o archivo de intercambio tenga que ser del mismo tamaño que la RAM para permitir la hibernación, pero existe una buena posibilidad de que pueda hibernar si es al menos 2/5 del tamaño de la RAM, según la página wiki de Arch , intente otros pasos primero antes de aumentar el tamaño de intercambio.

Si su problema es que obtiene un inicio limpio en lugar del currículum esperado, como mínimo probablemente necesite establecer un parámetro de inicio para encontrar la imagen del disco

Encuentra tu partición de intercambio:

grep swap /etc/fstab

para mí esto devuelve (salida parcial)

# swap was on /dev/mmcblk0p3 during installation

donde /dev/mmcblk0p3es la partición para especificar

Agregue un parámetro de arranque:

sudoedit /etc/default/grub

A la línea de inicio GRUB_CMDLINE_LINUX_DEFAULTagregue resume=/dev/YourSwapPartitiona la sección entre comillas (reemplace con la partición que identificó anteriormente). Usando mi ejemplo:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3" 

Cada vez que cambie este archivo, debe ejecutarlo sudo update-grubo los cambios no tendrán efecto.

Ahora necesitas reiniciar. Entonces puede intentar hibernar, emitiendo el comando:

sudo systemctl hibernate

Para reanudar, presione el botón de encendido y el sistema se iniciará.

Si aún tiene problemas, comience a depurar.

Incluyo mi caso a continuación como ejemplo, pero se puede encontrar información detallada sobre la depuración de los estados S en este blog y también en este .

Establezca algunos parámetros de arranque más para capturar más información. Retire quiety splashy añadir initcall_debugy no_console_suspendlo que hará que el sistema init llama a imprimir a la consola para que pueda ver lo que está mal. Establezco esto:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

Lo que me ayudó a ver qué iba mal en el currículum vitae de la hibernación.

En mi caso, después del currículum perdí WiFi, y el kernel claramente estaba molesto ya que la mayoría de los comandos (por ejemplo, leer cualquier cosa /sys, recargar módulos o cualquier systemctlcomando) no funcionarían; el proceso parece comenzar y simplemente colgarse (todo esto sería volvió a la normalidad después del reinicio, por supuesto). Al observar que el sistema se apagaba muy lentamente y leer todos los mensajes de depuración, noté que había muchos problemas con "brcm", así que supuse que mi culpa era del módulo de controlador inalámbrico Broadcom. Efectivamente, ajusté mi procedimiento de hibernación para descargar el módulo primero:

sudo modprobe -r brcmfmac
sudo systemctl hibernate

en el currículum reinserto el módulo

sudo modprobe brcmfmac

Y todo funcionó a la perfección. También tengo que poner en la lista negra el btsdiomódulo que parece ser incompatible conbrcmfmac


Actualización: Hibernación utilizando un archivo de intercambio en 17.04.

Una vez más, con la ayuda de la página wiki de Arch y algunos ajustes adicionales, logré que la hibernación funcione en 17.04 con un archivo de intercambio. Esto requería un parámetro de arranque adicional, resume_offset=ndonde n es el primer número bajo physical_offseten la salida 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:            
   .... 

Por lo tanto, el parámetro de arranque adicional en mi caso es resume_offset=34816. Aún necesita establecer un parámetro de arranque para que la partición se reanude. Esta será la partición raíz (o cualquier partición en la que se encuentre su archivo de intercambio) Mis parámetros son ahora:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

¿Dónde /dev/mmcblk1p2está mi partición raíz (es más probable que sea la suya /dev/sda2)?

Durante la reanudación, vi que la imagen se cargaba correctamente, pero en mi caso (solo un ejemplo: YMMVAPD), luego algunos controladores más ( i2c_designware) arrojaron algunos errores y obtuve un congelamiento completo del sistema en la reanudación. La hibernación también funciona si descargo esos módulos brcmfmac, pero el sistema se vuelve rápidamente inutilizable sin esos módulos. Por lo tanto, hice una especie de secuencia de comandos para descargar los módulos con errores e inmediatamente reinsertarlos en el currículum:

# 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

Cuando quiero hibernar, corro sudo bash script. Esto funciona muy bien.


TL; DR

Utilice systemd, establezca un parámetro de arranque para reanudar desde el intercambio, identifique los controladores con errores y descárguelos antes de iniciar la hibernación. Si el sistema no puede funcionar por mucho tiempo sin esos módulos o si necesita descargar varios, puede ser más fácil usar un script simple para iniciar la hibernación.

Zanna
fuente
¿De dónde proviene esa información, que 2/5 del tamaño de RAM podrían ser suficientes y bajo qué circunstancias? Tengo una opción de usuario en Gnome, "Hibernar" y parece que hiberna, pero al despertar, no funciona correctamente. Tengo una partición de intercambio de 8 GB y 32 GB de RAM. Eso no es 2/5, pero antes de crear un archivo de intercambio de 32 GB (o partición) sería bueno saberlo.
cslotty
@cslotty Recibí esa información del Arch wiki IIRC - avísame si lo logras, por favor
Zanna
Gracias, @Zanna. Descubrí que en realidad no es hibernar, lo que quiero, sino suspender (S3 / STR) - sry.
cslotty
@cslotty no te preocupes en absoluto. En ese caso, el intercambio no es su problema, ya que no está relacionado.
Zanna
1
Gracias, necesitaba una síntesis de esta respuesta, así como la sugerencia para deshabilitar SecureBoot para que funcione al final.
oligofren
62

Puedes usar

sudo pm-hibernate 

para verificar si la hibernación funciona en su sistema ( esto hibernará su computadora ).

Si no funciona, verifique si su tamaño de intercambio es al menos tan grande como su RAM.

Para agregar la opción al menú de configuración, puede crear un archivo de configuración. Abra una ventana de terminal y ejecute este comando:

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

Abre nano con un archivo vacío. Copie las líneas a continuación y péguelas en la ventana nano.

[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

Luego guarde los cambios y cierre nano y reinicie el sistema para que Hibernate esté disponible en "Opciones de energía".

Referencia: ¿Cómo hibernar mi computadora? en la documentación oficial de Ubuntu 16.04.

Espero que funcione. Esto funcionó para mí después de probar todas las demás opciones.

NirajW
fuente
Necesitamos reiniciar después de editar el archivo para que Hibernate esté disponible en "Opciones de energía".
Jus12
21
'sudo pm-hibernate' mató mi sistema inmediatamente sin previo aviso. Deberías decirle a la gente que eso es lo que va a pasar.
Yair Daon
la mejor respuesta . Esto también funciona en 17.4 y 17.10 también.
Saurabh Bhandari
1
Esta respuesta combinada con la que dice agregar "resume =" al GRUB_CMDLINE_LINUX_DEFAULT lo resolvió por mí, ¡gracias!
Christoph el
Tengo 17 GB en mi partición de intercambio y 16 GB de RAM, ¿por qué no funciona? Parece estar en hibernación porque se tarda una eternidad en apagar la computadora, mientras que si "apago" se apaga casi de inmediato. Pero cuando vuelvo a encender mi computadora, todo está cerrado y tengo que comenzar de nuevo. Eso no está hibernando en absoluto. ¿Por qué no puede ser tan simple como en Windows? Me gustaría recibir ayuda si alguien tiene ideas sobre cómo puedo hacer que hiberne correctamente.
user1271772
20

Creo que todos saben cómo habilitar la hibernación para la respuesta 16.04, tal como se describe en Ubuntu Wiki (consulte a continuación si necesita los pasos). Pero las cosas que necesitan verificación no son exhaustivas, creo. Al menos, eso es lo que encontré.

Cosas para verificar

De mis propias pruebas, al menos he encontrado un control adicional que debes realizar. No lo he encontrado en ninguna parte de Internet.

Aquí hay algunas comprobaciones:

  1. Compruebe que no está utilizando ninguna partición btrfs . . En mi prueba, descubrí que si tienes particiones btrfs , hibernar no funcionará. Eliminar o cambiar el tipo de partición a ext4no me ayudó. Necesitaba eliminar el btrfs-toolspaquete.

    sudo apt-get purge btrfs-tools
    

    Es posible que desee comprobar otros tipos nuevos de partición que no están bien probados. Sin eliminar el paquete, poner en la lista negra el controlador también podría funcionar, pero no lo he probado.

  2. También debe verificar que tiene una partición de intercambio lo suficientemente grande como para contener el contenido de RAM. Si su RAM es de 4 GB, el intercambio debe ser de al menos 4 GB (debe asignar unos pocos MB más para estar seguro).

Pasos para habilitar la hibernación

Implica estos pasos

  1. Crear un archivo como root en /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla

    sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. Ponga este contenido en ese archivo

    [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
    
  3. Guarde el archivo presionando Ctrl- O. Salir con Ctrl-X

  4. Reinicia el polkitddemonio

    sudo systemctl restart polkitd.service
    

Debería habilitar la hibernación.

Anwar
fuente
2
Gracias Anwar. Archivé el error # 1619846 y le remití su respuesta arriba. ¿Hay alguna posibilidad de que pueda proponer cambios / adiciones más exactos a esa página en la documentación oficial?
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Propondría esta advertencia. Pero, necesitaré más probadores que verifiquen esto. Te lo haré saber después
Anwar
Ok, hablemos más entonces.
Gunnar Hjalmarsson
Lo instalé en una partición btrfs y lo purgué de btrfs-toolsacuerdo con sus instrucciones. Todavía no puede hibernar.
Oxwivi
1
En el disco solo hay vfatpara UEFI, y btrfsy swap. De hecho, sospecho que se debe al hardware (computadora portátil AMD). Voy a probar esto en otro sistema con btrfs y te responderé.
Oxwivi
7

Arranque seguro

(Hice una pregunta similar pidiendo un enfoque en las respuestas basadas en systemd, compartiendo mi solución aquí para las personas que siguen esta pregunta)

Esta solución proviene de temas de Fedora (hicieron el cambio a systemd hace un tiempo, así que hay más material allí).

En mi caso (instalación reciente de 16.04.1 en una máquina que siempre admitía la hibernación), llamar a los obsoletos sudo pm-hibernateno parecía hacer nada, y el enfoque systemd actualizado systemctl hibernatedevolvería:

Failed to hibernate system via logind: Sleep verb not supported

Resulta que el arranque seguro fue el culpable: instalando 16.04 se le pregunta qué quiere hacer con él (que es algo nuevo hasta donde puedo recordar) y lo mantuve encendido sin pensarlo mucho.

En mi máquina con arranque seguro activado, cat /sys/power/diskrespondió:

 [disabled]

Después de reiniciar y deshabilitar el inicio seguro en la configuración del BIOS (estos son específicos de la máquina, pero generalmente bastante sencillos) probé cat /sys/power/disky obtuve:

 [platform] shutdown reboot suspend 

que se ve mejor Y, de hecho, llamar a systemctl hibernateresultados en una secuencia de hibernación / descongelación exitosa.

Además, después de eso pude ver la hibernación disponible como una opción en varios lugares de la interfaz gráfica, sin la necesidad de ningún polkithack. Parece que en systemdrealidad estaba deduciendo /sys/power/diskque el sistema no podía hibernar.

Bagazo
fuente
Hice exactamente lo que has explicado aquí. Pero después de ejecutar el comando "systemctl hibernate", la pantalla se oscureció durante 3 segundos y luego el escritorio volvió con todos mis programas abiertos al igual que antes de ejecutar el comando. Cuando ejecuté el comando "cat / sys / power / disk" ... me mostró este texto: "[plataforma] apagado reiniciar suspender test_resume", que es similar al resultado cuando ejecutó lo mismo desde su lado pero el último texto : "prueba_resume". ¿Tienes idea de lo que podría tratar de resolver mi problema?
foxhard
No estoy muy seguro, parece que la hibernación no funciona de fábrica en su hardware, por lo que está deshabilitada de forma predeterminada como otros señalaron. Es posible que desee comenzar una pregunta por separado sobre su problema específico.
Marc
Solo trabajando a medias para mí. Hiberna, pero en lugar de despertarse de la hibernación, pasa al arranque normal, luego se queda atascado para siempre hasta un apagado físico duro.
mate
6

Esta instrucción funcionó para mi instalación de Ubuntu 18.04.

  1. sudo apt install hibernate Instalará hibernate y otras dependencias necesarias para hibernar
  2. grep swap /etc/fstab (UUID fing)
  3. sudoedit /etc/default/grub En la línea GRUB_CMDLINE_LINUX_DEFAULT = "splash silencioso" agregue UUID de intercambio. La línea se ve así GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash resume = UUID of swap"
  4. sudo update-grub
  5. Reiniciar, y después de reiniciar sudo systemctl hibernate. Si todo funciona bien, agregue entradas de menú.
  6. sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla ahora pegue esto:
[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

copiado de https://askubuntu.com/a/819891/712203

  1. Reinicia la computadora
  2. Instale https://extensions.gnome.org/extension/755/hibernate-status-button/
Krzysztof Swiatly
fuente
1
en lugar de agregar un valor fijo para /etc/default/grubconsiderar actualizar el initramfs usando update-initramfs -u -k ally buscar un mensaje como The initramfs will attempt to resume from /dev/dm-0. Esto configurará automáticamente el dispositivo de reanudación.
ukos
¡Gracias, funciona perfectamente en Ubuntu 18.04! Tenga en cuenta que si es la primera vez que utiliza una extensión gnome, deberá instalar una extensión de navegador y un conector. Esto se explica en el enlace de extensión en la parte superior.
Karim Sonbol
4

Ampliando mi propio comentario a la respuesta de Kelvinelove, el archivo que sugiere editar no existía en mi sistema (Ubuntu 16.04 nuevo). En cambio, hice esto:

  1. sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. Busque estas secciones (están una al lado de la otra):

    [Desactivar hibernación por defecto en upower] Identidad = usuario-unix: * Acción = org.freedesktop.upower.hibernate ResultActive = no

    [Desactivar hibernación por defecto en logind] Identity = usuario-unix: * Acción = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no

  3. Cambie ResultActive = no a ResultActive = yes para ambos.

  4. Presione Ctrl + O para guardar el archivo.
  5. Reinicie su computadora
  6. La opción Hibernar ahora está disponible en sus menús de energía.

EDITAR: Gunnar señaló que este archivo se sobrescribe si se actualiza un determinado paquete, por lo que, dependiendo de sus intenciones, lo más probable es que no sea la mejor solución.

Fuente: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/

fgblomqvist
fuente
Se /etcsupone que el archivo no existe de forma predeterminada. Es un archivo de configuración que creas. Editar un archivo propiedad de un paquete, como sugiere anteriormente, es un mal consejo, ya que se sobrescribirá en la próxima actualización del paquete.
Gunnar Hjalmarsson
@GunnarHjalmarsson Si ese fuera el caso, argumentaría que debería decirse que podría no existir. Espero más de una respuesta Ask Ubuntu mejor calificada que una respuesta de "copiar / pegar este comando" -> "escribir esto" que no tiene ningún tipo de verificación de si está haciendo lo correcto (aparte de verificar si funcionó) . ¿Qué sucede si alguien encuentra esa respuesta en un par de años, pero tiene miedo de intentarlo ya que el archivo está vacío y las instrucciones indican claramente que se debe agregar al archivo, lo que implica que existe? No obstante, agradezco la información, la agregaré a la respuesta para completarla.
fgblomqvist
1
Punto justo; Edité la respuesta de NirajW con esa aclaración. Cabe señalar que la fuente original de información en esta página habla sobre la creación .
Gunnar Hjalmarsson
Esto es perfecto, me salvaste hermano :)
Azam Alvi
4

Para mí, funciona para instalar el hibernatepaquete, reiniciar y luego ejecutar sudo hibernate-disk. Estoy seguro de que es posible agregarlo al menú, pero no vale la pena.

Aiphee
fuente
3

Primero, le recomiendo que pruebe si su máquina admite hibernación, porque la razón por la cual la hibernación está deshabilitada de manera predeterminada es porque a veces tiene resultados desagradables en algunas máquinas. Pruebe su máquina abriendo el terminal ( Ctrl+ Alt+ T) y luego escribiendosudo pm-hibernate

Su máquina debería hibernar. Despierte su máquina después de la hibernación y observe si se comporta mal o si actúa normalmente. Si experimenta alguna anormalidad después de la hibernación, le aconsejo que no continúe con el siguiente procedimiento. Sin embargo, si funciona bien, continúe activando la hibernación haciendo esto:

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

Edite el archivo abierto y agregue estas líneas:

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

Después de esto, reinicie su máquina, y después de iniciar sesión, debería ver una opción de hibernación agregada en el menú de encendido, en la esquina superior derecha de la configuración.

kelvinelove
fuente
Tengo thinkpad -E550 y no tiene ningún problema con la hibernación cuando mi sistema operativo es ubuntu 15.1 o windows8.1. pero usando ubuntu 16.04, cuando uso el comando "sudo pm-hibernate", no hiberna completamente y solo la pantalla se pone negra y la máquina aún está encendida.
Mahyar
En mi caso, el comando no hace nada en absoluto. El terminal va a la nueva línea y espera el siguiente comando, es decir, se ha ejecutado el comando anterior. Pero no hace nadaat all
Aalok
Esto no funciona para mi. Ubuntu 16.04. La opción Hibernar no aparece y permanece deshabilitada en Configuración -> Energía, ¿algo más?
Daniele Segato
Es mejor editar la política ya existente: zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04
fgblomqvist
Contenido incompleto en com.ubuntu.enable-hibernate.pkla. Ver respuesta publicada por NirajW.
Gunnar Hjalmarsson
3

Aquí hay algunos recursos muy buenos para ayudarlo a resolver algunos de los problemas de hibernación más comunes en Ubuntu.

En mi caso, ejecutando Ubuntu 16.10 en un Lenovo u300s, para que la hibernación funcione correctamente, tuve que hacer lo siguiente:

  • Cree un archivo de intercambio de tamaño apropiado (normalmente configuro para ~ 1x en tamaño, pero he escuchado hasta 1.6x y 2x)
  • Editar /etc/default/grubpara incluir la siguiente línea:

    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"
    

El RESUME se refiere a su UUID de archivo de intercambio específico. En particular, en la configuración de mi máquina pci=nomsiestaba la clave.

¡La mejor de las suertes!

richbl
fuente
¿Es insensible a las mayúsculas? ¿Por qué usar RESUME?
NelsonGon