Ubuntu 18.04 no puede reanudarse después de hibernar

17

Hibernate funcionó correctamente cuando había estado usando Ubuntu 17.04. Después de la actualización a 17.10 no pude reanudar debido a la pantalla en negro después de reanudar ( este error ).

Después de la actualización a 18.04, si intento iniciar mi computadora después de la hibernación, se inicia como si no se hubiera hecho la hibernación.

Kamil
fuente
Tengo el mismo problema con 18.04, creo que la solución debe estar en la especificación de la partición correcta para reanudar, pero aún así no pude encontrar la forma de hacerlo. Todo lo que encontré fue que Google no funcionó para mí.
usuario2819650
La partición está configurada correctamente en /etc/initramfs-tools/conf.d/resume to my swap. Sospecho que la hibernación no se realiza correctamente o la reanudación durante el arranque no funciona. Pero no sé cómo depurarlo más. Syslog y dmesg no dan pistas sobre cuál es el problema.
Kamil

Respuestas:

29

Se realizan cambios en la configuración predeterminada en comparación con LTS anterior (16.04). En mi caso, la hibernación no funcionó hasta que hice varios pasos, entre ellos, aumentar el tamaño del archivo de intercambio, encenderlo, asegurarme de que las políticas lo permitieran, etc.

Esta puede ser fácilmente mi respuesta más larga en StackExchange completo, así que intenté hacer que los encabezados sean descriptivos .

Botas ya que no hubo hibernación

Sería prudente echar un vistazo a sus registros ( dmesgpodría ayudar) y ver si hay algo allí. Hay razones por las cuales, a pesar de decirle al sistema que hiberne, en realidad no lo hará, o en su lugar se suspenderá a la RAM (suspensión).

Echar un vistazo kern.logy syslogbuscar cualquier mensaje relacionado con la hibernación no estaría tan mal. Las secciones que comienzan con "problema" pueden ayudarlo con problemas específicos.

Intercambio de archivo o partición de intercambio

Uno de los cambios cruciales es que ahora NO TIENE una partición de intercambio, pero tiene un ARCHIVO de intercambio.

Es posible que el archivo de intercambio no funcione para su combinación de hardware / controladores / sistema operativo e hibernación.

Hibernación apagada

Las políticas también pueden desactivar o no permitir la hibernación.

Jerga

Suspender a RAM: la RAM mantiene los datos, la computadora se duerme más rápido, usa más energía cuando se suspende, se despierta más rápido. Algunos lo llaman sueño.

Suspender al disco, también conocido como hibernación. La RAM se guarda para intercambiar (partición o archivo), la computadora se va a dormir más lentamente, usa menos energía mientras hiberna, se despierta más lentamente.

Suspender a RAM en Linux por Rafael J. Wysocki y A. Leonard Brown

Requisitos previos: ¿tiene suficiente espacio?

Para hibernar, debe (simplificar aquí) guardar toda la RAM en su disco duro. Por lo tanto, debe reservar suficiente espacio para hacerlo. Si no lo hace, esto fallará y no hibernará.

  1. free -m le dirá cuánta memoria tiene, usa y cuánta hay en su intercambio.
  2. df -h le dirá cuánto espacio en disco tiene en cada punto de montaje y cuánto se usa, libre, etc. Esto es importante ya que es posible que luego desee especificar dónde se ubicará su archivo de intercambio o qué partición "recortar" para tener suficiente espacio para su intercambio.
  3. cat fstabdebería proporcionarle información si tiene una partición o archivo de intercambio. De acuerdo con Ubuntu Hibernation, las preguntas frecuentes swapfilepueden no funcionar siempre con algunas combinaciones de hardware / controladores.

Si no tiene suficiente espacio, siga las preguntas frecuentes de intercambio de Ubuntu . Le indica cómo aumentar el archivo de intercambio, agregar otro, verificar si se usa, etc. Con comandos y explicaciones. Muy buen recurso.

¡No tengo suficiente espacio para mi RAM!

Los documentos del kernel dicen:

/ sys / power / image_size controla el tamaño de la imagen creada por el mecanismo de suspensión en disco. Se puede escribir una cadena que represente un número entero no negativo que se utilizará como límite superior del tamaño de la imagen, en bytes. El mecanismo de suspensión en disco hará todo lo posible para garantizar que el tamaño de la imagen no supere ese número. Sin embargo, si esto resulta imposible, intentará suspender de todos modos utilizando la imagen más pequeña posible. En particular, si se escribe "0" en este archivo, la imagen suspendida será lo más pequeña posible. La lectura de este archivo mostrará el límite de tamaño de imagen actual, que se establece en 2/5 de RAM disponible de forma predeterminada.

Por lo tanto, intente ajustar el tamaño de su imagen. Cómo, haz otra pregunta por favor.

Prerrequisitos: ¿admite su núcleo la suspensión al disco?

Kernel admite todo lo que aparece en la lista /sys/power/state, así que:

cat /sys/power/state

Animales (que yo sepa) las categorías allí incluyen: mem, standby, freeze, disk. Explicación:

  • mem- tiene varios significados, cuál exactamente en su sistema lo encontrará cat /sys/power/mem_sleep. Yo tengo:s2idle [deep]
  • standby - Suspensión de encendido (si es compatible)
  • freeze - Suspender a inactivo (ITS)
  • disk- Suspender a disco (STD), hibernación . Esto, tú quieres.

Entonces tenemos que verificar cat /sys/power/disk. Si tiene allí disabled, sumérjase en su BIOS en busca de un arranque seguro; esa es la única idea que puedo ofrecer y lo único que sé puede interferir y apagar la hibernación. Si bien solo conozco SecureBoot, puede haber otras interferencias, por lo que echar un vistazo a su BIOS es una buena idea incluso si no tiene ningún "arranque seguro".

Leyendo aquí:

  1. Documentos del kernel
  2. Debian Wiki sobre hibernación

TBH, incluso si su núcleo NO es compatible con la hibernación, puede intentarlo de otra manera, desplácese hacia abajo hasta la secciónInterfaces .

Lea esto - advertencias y problemas - no BTRFS

En ningún orden particular:

  1. No todos los conjuntos de chips funcionarán (no tengo fuentes que pueda citar aquí, así que digamos que esto es un rumor)
  2. VAIO tiene problemas, supuestamente hay una bandera para contrarrestarlos
  3. SecureBoot a menudo se cita como interferencia o desactivación de la hibernación
  4. Wake-on-LAN consume energía incluso con hibernación
  5. El número de módulos (especialmente los gráficos) se puede inicializar ANTES de que su sistema se reanude correctamente desde la hibernación; esta suele ser la causa de la pantalla en negro cuando se reanuda . Mire ArchLinux Wiki para obtener consejos sobre cómo depurar problemas. También sugeriría las preguntas frecuentes de Ubuntu sobre problemas de hibernación. Navegar a través de errores de Launchpad también puede producir resultados. IIRC, hay un parámetro del kernel que especifica en segundos un retraso antes de reanudar.
  6. Permitir el procedimiento de hibernación difiere para diferentes versiones de Polkit

No use BTRFS ni hiberne: el resultado será datos corruptos.

Quiero hibernar - intercambiar partición

Hay casos en que las personas renuncian al archivo de intercambio y vuelven a la partición de intercambio. Después de todo, funcionó en LTS anteriores. No lo intenté, así que no ofreceré punteros.

Quiero hibernar - con archivo de intercambio

  1. Asegúrate de tener suficiente espacio allí. Las preguntas frecuentes de intercambio de Ubuntu le indican cuánto necesita, los comandos de arriba también lo hacen. Si necesita más información aquí, haga otra pregunta por favor, ya que este es un tema largo.
  2. Aumente el archivo de intercambio o cree uno nuevo con un tamaño suficientemente bueno (de preferencia, estoy de acuerdo con @muru ) y cambie /etc/fstaba uno nuevo. Reinicie para ver que el cambio se ha llevado bien (guarde una copia de seguridad fstabpara que pueda revertirlo fácilmente por si acaso).
  3. Apunte su núcleo hacia esto con los parámetros apropiados, para que sepa de dónde reanudar.
  4. Actualice / reconfigure su gestor de arranque y reinicie.

Parámetros del kernel? ¡De miedo!

Lea atentamente y decida si desea hacerlo, pero es solo una forma de configurar su núcleo. Puede ser más fácil hibernar a través de systemdy uswsusp(ver Interfaces , más abajo). Puede ser que usted, como yo, finalmente decida que suspender a RAM es suficiente y que no desea tener 32 GB en un archivo de intercambio (por ejemplo, no tan bueno para las personas con un SSD en sus computadoras portátiles). ¡Pero!

  1. hibernar para intercambiar archivos requiere resume=saber en qué partición está su archivo de intercambio y resume_offset=saber desde dónde comenzar a reanudar el archivo de intercambio.
  2. hibernar a la partición requiere resume=apuntar a la partición de intercambio.
  3. la resolución de problemas de pantalla en negro puede requerir resumedelay=.

Documentos del kernel sobre retrasar la reanudación de la hibernación:

resumedelay = [HIBERNATION] Retraso (en segundos) para pausar antes de intentar leer los archivos de currículum

Parámetros necesarios para el archivo de intercambio y la hibernación :

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

Para resume=elegir el mismo estilo que roottiene el elemento fstab. Entonces, o /dev/sdaXo UUIDo LVM. Para hibernar a un archivo: proporcione una partición donde pueda encontrar su archivo.

Leyendo:

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

Problema: no se encontró el encabezado de intercambio

El archivo de intercambio debe formatearse correctamente. Si sus registros le dicen esto, está intentando hibernar a un archivo o su parámetro de reanudar no es correcto.

Cambie a la partición o arregle el archivo o cambie la interfaz utilizada para la hibernación.

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

mkswapse usa para formatear archivos, lea más sobre esto aquí

¡Problema! ¡Hibernación no permitida!

Prueba: pm-hibernate(si el paquete pm-utils está instalado) o systemctl hibernatedecirle que no está permitido. Configuración predeterminada en Ubuntu desde IIRC 12.04.

Solución (es): depende de su versión de Polkit, su versión de Ubuntu y su sabor ... Vea esta pregunta . Además, ArchWiki en Polkit puede ayudar.

Para Mint, consulte: https://forums.linuxmint.com/viewtopic.php?t=259912

¡Problema! ¡Hibernación deshabilitada por algo en BIOS!

Prueba: cat /sys/power/disktiene disabled. Los registros muestran "Error al hibernar el sistema a través de logind: el verbo de suspensión no es compatible".

Solución: busque en su BIOS y encuentre la cosa problemática. Apágalo.

Solución 2: intente con otra interfaz de hibernación.

Ver: ¿Cómo activar la hibernación en 16.04.1? (systemd) .

Interfaces

  1. swsusp: interfaz de kernel de bajo nivel. Consulte Requisitos previos: kernel para los archivos. Escribir en archivos directamente puede provocar la suspensión (en RAM, en disco e híbrido). Según SwapFAQ problemático con la hibernación al archivo.
  2. uswsusp - ArchWiki y Debian Wiki y una buena pregunta de AskUbuntu con un artículo sobre cómo usarlo .
  3. systemd - ArchWiki en él
  4. pm-utils - AFAIK que es una colección de scripts originalmente de Debian - Estaré encantado de recibir más información.

Palabras de clausura

Para mí fue una cuestión de casi dos días de trabajo compilar eso. Esperemos que esto te ayude (y a otros) a resolver tu problema más rápido. Todavía faltan puntos, pero son las 2 AM y no tengo ganas de escribir más ahora. Por supuesto, estoy abierto a los consejos de cualquiera para mejorar esto, así que comenta. Contestaré una vez que duerma, trabajo, etc. :-)

No estoy seguro de que hibernar en el disco sea tan genial. Fui con dormir al final. Pero para mí el problema era tener un archivo de 32 GB solo para poder hibernar, ya que generalmente evito el intercambio. Mi archivo de intercambio inicial era de 2GB y estaba casi vacío. YMMV. Sin embargo, ¡buena suerte! ¡Y comience con los registros!

LAFK dice reinstalar a Mónica
fuente
¡Gran respuesta! Pero lo que finalmente resolvió mi caso fueron las Preguntas frecuentes de Swap vinculadas y me decía que agregara "resume = UUID" a una variable en mi archivo de configuración de grub y / o algo similar con initramfs-tools. Por alguna razón, tuve un UUID incorrecto, lo que probablemente fue el problema. Por lo tanto, le sugiero a alguien con un problema similar que primero consulte lo que está escrito en las Preguntas frecuentes de intercambio en "¿Cómo agrego o modifico una partición de intercambio?", Y el tercer punto sobre la hibernación allí.
RimaNari
1
"disco - Suspender a disco (STD), hibernación. Esto - usted quiere". ¿Soy el único al que le gustó esto? Muchas gracias.
spakmad
¡gran respuesta! Una pequeña observación: en una de mis máquinas se reanuda después de que hibernar funcionó después de un segundo intento de arranque solamente (no se mostró nada en el monitor en el primer intento). Podría arreglar eso instalando una pila HWE: $ sudo apt install linux-generic-hwe-18.04(para algunos hardware, incluso linux-generic-hwe-18.04-edgepodría valer la pena intentarlo).
Hiro protagonista
1
Ah ¡No voy a hibernar! Tengo 512 Gb de RAM. Oh, bueno ... (¡Tengo suficiente espacio en mi HDD de 10Tb, pero tomaría horas reiniciar!)
Alexis Wilke
9

Use el UUID de la partición de intercambio en lugar de su punto de montaje en el parámetro RESUME resume=UUID=<#>en ambos /etc/default/gruby/etc/initramfs-tools/conf.d/resume

Cree una entrada para la partición de intercambio /etc/fstab sin un punto de montaje similar a este

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

En /etc/default/grubHe usado una entrada separada para reanudar la hibernación

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

Crear un kit de políticas en la autoridad local (pkla)

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

E inserte allí

[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

Después de esa actualización initramfs y GRUB

sudo update-initramfs -u -k all
sudo update-grub

Reinicie, abra algunas aplicaciones y use systemctl hibernate(sin sudo) para ver si funciona

Roey
fuente
¡funciona bien! muchas gracias.
Yossarian42
gracias hombre, me salvaste!
Vahe Shadunts
1

Para mí, siempre funcionó hasta 18.04 y después de 18.04 lo habilité como está en muchos artículos, pero de repente dejó de funcionar ayer (funciona bien durante 4-5 meses),

y aquí está el ... UNA COSA que lo hizo funcionar de nuevo ...

Dile a grub2 dónde está la partición de intercambio:

Primero descubra en qué partición está usando el siguiente comando:

cat /etc/fstab

El mío está en sda7 como es el siguiente resultado:

el intercambio estaba en / dev / sda7 durante la instalación

Luego, agregue en Grub2 la siguiente adición a la siguiente línea, utilizando el siguiente comando:

sudo gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = deshabilitar resume = / dev / sda7"

La parte importante es resume=/dev/sda7

/ dev / sda7 en mi caso

Luego actualice Grub con el siguiente comando, y después de esto, comenzó a funcionar perfectamente nuevamente:

sudo update-grub

Después de muchos intentos, esto fue lo único que funcionó, tal vez fue solo debido a una actualización del núcleo que lo arruinó, sin embargo, esto funcionó.

markackerman8-gmail.com
fuente
0

Espero que esto ayude a alguien, pero estoy ejecutando popos / ubuntu 19.04. En mi configuración pude hibernar usando s2disk o pm-hibernate, pero la reanudación estaba fallando. Para solucionar esto, mi sistema se inicia usando UEFI en lugar de grub. Solo tuve que reinstalar el gestor de arranque. Para verificar si está ejecutando UEFI use lo siguiente:

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

si está en modo UEFI, seguí esta guía para reinstalar el gestor de arranque, varía si está utilizando un disco nvme o un disco sata: https://support.system76.com/articles/bootloader/

asegúrese de que en sus opciones de inicio de kernel especifique la partición o UUID de dónde reanudar, por ejemplo, algo como esto:

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

Puede agregar esto: 1) sudo kernel-stub -a "resume = UUID = ..." 2) edite el archivo /etc/initramfs-tools/conf.d/resume y agregue: resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

compruebe su archivo / var / log / syslog para ver algo como esto: 4 de agosto 22:26:42 pop-os / usr / bin / kernelstub [19639]: kernelstub: DEBUG kopts: root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro quiet loglevel = 0 systemd .show_status = false resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Si falta el currículum o está mal, necesitará actualizar su kernel de arranque nuevamente.

Lingster
fuente
0

Además de configurar el punto de reanudación de intercambio en grub mencionado en la respuesta de Sam73 , descubrí que mi Ubuntu 18.04 también necesita instalarse laptop-mode-tools:

$sudo apt install laptop-mode-tools

luego cambie ENABLE_LAPTOP_MODE_ON_AC=1en el archivo de configuración:

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

iniciar el modo portátil con:

$sudo laptop_mode start

PD: puede verificar si la computadora portátil se inicia o no con

$cat /proc/sys/vm/laptop_mode

Si se imprime 0, laptop_modeno funciona, de lo contrario, indica que funciona bien.

Yossarian42
fuente