Tutorial de Cómo hice funcionar "hibernar" en Linux (Ubuntu 14.04, Trusty Tahr)

Qué hace hibernar?

Hibernar toma todos los datos que se encuentran en tu RAM, y los guarda en tu disco duro y luego apaga tu computadora. La idea es que cuando prendés de nuevo tu máquina, tu sesión se restaura (se vuelven a abrir todos los programas que dejaste abierto antes de hiberna). En Linux, los datos de la RAM se guardan en una partición especial llamada swap (también podes tener un archivo swap).

Hibernar casi siempre tuvo problemas en Linux, yo perdí unas cuantas muchas horas investigando y tratando de hacer funcionar estas funciones que a mi parecer, son de EXTREMA UTILIDAD (probablemente porque en el muuuy fondo soy un haragán y no quiero abrir de nuevo todos los programas y siempre busco la forma de simplificarme la vida).

Primero, yo tengo un Ubuntu 14.04, con un Kernel 3.13.0-37-generic.

Si vos tenés algún sistema operativo diferente que el mío, no te preocupes, probablemente igual te va a funcionar.

Los síntomas que tuve fueron los siguientes:

Cuando le ponía a hibernar a mi máquina, parecía que se apagaba bien, incluso, volvía a arrancar luego de que la volviera a prender, pero ni el mouse ni el teclado funcionaban. Cuando logré solucionar dicho inconveniente, ya funcionaban el mouse y el teclado, pero la sesión no se restauraba.

A continuación voy a guiarte a través de un enfoque sistemátimatico, para poder diagnosticar el porqué la función de hibernar de tu Linux no está funcionando. Un breve vistazo:

1- No hay suficiente swap.
2- Tu computadora no está guardando tu sesión.
3- Tu computadora no está leyendo bien tu sesión guardada.
4- Tu computadora dice "Resumiendo de /dev/sdX" pero se cuelga.


1- No hay suficiente swap:

Deberías tener una memoria swap como mínimo del tamaño de tu RAM más un margen. Si vos tratás de hibernar y estás utilizando mayor cantidad de RAM de lo que tu swap puede guardar, el proceso falla y a veces se cuelga. A veces aparece luego un mensaje de error que dice "not enough swap" (no hay suficiente swap). En mi caso no aparecía ningún mensaje de error, pero se colgaba la máquina al prender de nuevo, luego de haber hibernado (mouse y teclado no respondían). Así que la solución a este problema es agrandar el tamaño de tu memoria swap. Esta solución es relativamente fácil.

El siguiente comando en rojo sirve para ver la cantidad de memoria RAM y swap.

marco@the-machine:~$   free -m


En mi caso, luego de haber agrandado la memoria, tiene un tamaño total de aproximadamente 13Gb. en vista de que tengo 12Gb de RAM. Antes de agrandar, tenía sólo 4Gb debido a que (en teoría) ese tamaño ya es suficiente. Pero debido a ese tamaño, la funcionalidad hibernar NO funciona.

Proceden a agrandar su memoria swap con gparted o crearla si no existe. (tener mucho cuidado al tocar las particiones ya que si hacen algo mal, puede fundir su sistema operativo).

Reparticionar para agregar más SWAP.

 (Acuérdense, tener mucho cuidado al tocar las particiones ya que si hacen algo mal, puede fundir su sistema operativo)

1- Bootear de algún linux live cd/USB ya que no se puede reparticionar si las particiones están montadas. (puede ser algún ubuntu, centos, o un gparted Live propiamente dicho, etc).
2- Abrir utilidad "gParted".
3- Si ya tenes swap, click derecho -> Borrar.
4- Hacer click derecho en tu partición Linux -> Redimensionar/Mover
5- Disminuir el tamaño de dicha partición en el tamaño que desea tener la nueva partición swap. (Ej: si tenías una partición 80gb para algún fin, disminuir a 71gb si se desea un swap de 9gb, que sería lo apropiado para una máquina con 8gb de RAM).
 6- Hacer click derecho en el espacio libre -> Nueva partición
7- Cambiar el File System Type a "linux-swap", click en OK.
8- Hacer click en el check (verde) de aplicar cambios en la parte de arriba del menú de gParted.
9- Hacer click derecho en la nueva partición swap -> Información
10- Copiar el valor de su UUID y /dev/sdXN para más tarde.

Luego de reparticionar necesitas hacer unos cambios en el archivo de discos de tu Linux. Para eso, abris una terminal y haces lo siguiente:

marco@the-machine:~$ sudo gedit /etc/fstab
o (sudo gedit /media/nombre_de_tu_máquina/etc/fstab)



Si ya tenías una partición swap, buscá la linea que tiene la palabra "swap" y cambiar el /dev/sdXN que ya tiene por el valor que copiaste hace rato de tu nueva partición. También podés utilizar el UUID en lugar del /dev/sdXN. Es mejor el UUID ya que el /dev/sdXN puede cambiar de acuerdo a como el sistema operativo monte, en cambio el UUID es único para cada partición y no varía, incluso si pones tu disco en otra computadora.
Si no tenías swap, agregar una línea como la de la imágen:
UUID=8070e7f1-2e30-41be-924a-af9b6fb0a462 none            swap    sw              0       0
PONIENDO EL UUID de tu nueva partición swap que copiaste hace rato.

Guardar los cambios realizados. Reiniciar tu computadora normalmente. Al listar tus particiones deberías ver tu nueva partición swap.


marco@the-machine:~$ cat /proc/swaps    

Si te aparece algo así, creaste/expandiste exitosamente tu swap para que se pueda hibernar.

2- Tu computadora no está guardando bien tu sesión:

Si intentaste hibernar y NO funcionó, siempre es útil mirar el log de hibernar.
marco@the-machine:~$ tail /var/log/pm-suspend.log


Si ves una fecha con la palabra Finished significa que se gurdó con éxito tu sesión. Si aparecen un conjunto de errores, remangate nomas ya las mangas. Desafortunadamente este es el error más difícil de solucionar. Hay muchas razones por las que esto podría suceder, en algunos casos tiene que ver con los dispositivos periféricos. En el siguiente artículo se explica la solución a este problema:
http://chriseiffel.com/everything-linux/how-i-got-suspend-and-hibernate-working-in-linux-ubuntu-11-04-mint-11/

Otra solución que anduvo para algunas personas está aquí: http://www.ubuntugeek.com/fix-for-suspend-and-hibernation-problem-for-laptops.html/comment-page-2#comment-53547

Si te trancas en este paso, no pierdas la esperanza, seguí Googleando los errores que te van apareciendo, muuy probablemente alguien ya tuvo el mismo problema y la solución está en alguna parte de Internet.

3- Tu computadora no está leyendo tu sesión guardada:

Así que tu computadora guarda bien tu sesión, pero no la restaura cuando la volvés a prender. Este fue el último problema que tuve, por suerte, también es uno de los fáciles de solucionar. Lo más probable es que tu GRUB (boot loader) no sabe donde está tu swap que tiene la sesión guardada.
Para solucionar, abrir el archivo de configuración del GRUB.

marco@the-machine:~$ sudo gedit /etc/default/grub

Buscá la línea que empieza con GRUB_CMDLINE_LINUX y agregá una línea como la siguiente pero con el UUID de tu nueva partición swap que hace raaato creaste. (o /dev/sdXN)

GRUB_CMDLINE_LINUX="resume=UUID=8070e7f1-2e30-41be-924a-af9b6fb0a462 other-option=value”
ó
GRUB_CMDLINE_LINUX="resume=/dev/sdXN other-option=value”

Hay que tener mucho cuidado con lo que escribís en dicho path o UUID de tu disco acá. Si no tenés cuidado puede que no bootee tu máquina y tengas que iniciar en modo seguro para arreglar el path o UUID y correr de nuevo el script update-grub. Luego de realizar las modificaciones en el archivo del grub, guardarlas y correr el comando 

marco@the-machine:~$ sudo update-grub

Además del grupo necesitamos crear/actualizar un archivo adicional, con el siguiente comando:

marco@the-machine:~$ sudo gedit /etc/initramfs-tools/conf.d/resume 

y agregar ésta línea al archivo (o modificarla con tu nuevo UUID de la partición swap):

resume=UUID=8070e7f1-2e30-41be-924a-af9b6fb0a462

Luego, correr este comando:

marco@the-machine:~$ sudo update-initramfs -u

Ahora hiberná, y cruza los dedos viejo...  A lo mejor ya te funciona (a mí me funcionó)!!!

4- Tu computadora dice "Resumiendo de /dev/sdX" pero se cuelga:

Tu computadora está muy cerca de hibernar y resumir exitosamente. Y éste problema es otro de esos de fácil arreglo para alegría tuya. El problema proviene de dos programas que son redundantes. Al removerlos, se soluciona:

marco@the-machine:~$ sudo apt-get remove hibernate uswsusp

Sé que parece contraintuitivo, pero le funcionó a mucha gente, espero que funcione para vos también.

TERMINADO. FINITO. OPA. HECHO.


este fue el artículo que me guió para solucionar este inconveniente, me tomó horas, días, encontrarlo y de la alegría de que funcionó redacté esta solución para hispanoparlantes.
http://chriseiffel.com/everything-linux/how-i-got-suspend-and-hibernate-working-in-linux-ubuntu-11-04-mint-11/

Saludos, y sigan siendo felices con Linux a pesar de las batallas!