El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

hibernar en archlinux

| Comments

Hablando de cosas olvidables. Siempre que instalo archlinux, se me olvida que hay que hacer una ceremonia para que la hibernación pinche.

De más está que te diga que necesitarás una particion swap, con al menos el mismo tamaño de la RAM que tienes. No pincha con swapfiles.

En mi caso, yo hice una swap del tamaño de la RAM, lo cual me jode a la hora de hibernar, ya que se demora mucho descartando los datos que hay en la swap (si hay) en el momento de hibernar.

Bueno entrando en materia:

En el GRUB, le daremos el parámetros resume y usaremos como argumento, el disco de donde se resume, o sea la swap. Veamos cual es el UUID de la swap:

fstab
1
2
cat /etc/fstab |grep swap
UUID=2b3ed70d-5746-4a94-bd07-77eacd99f03c  none swap defaults,discard=pages 0 0

Vamos al cargador de arranque (grub en mi caso) y le decimos cual es el disco de donde debe tomar la imagen y resumirla. Localiza el fichero /etc/default/grub y en una de las primeras lineas, modifica la cláusula GRUB_CMDLINE_LINUX_DEFAULT inclúyele resume=UUID=LaUUiDeTuDisCoSwap. A mi me quedó así:

“la parte de arriba de
1
2
3
4
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 resume=UUID=2b3ed70d-5746-4a94-bd07-77eacd99f03c"

Como ven, ahí declaramos (EL UUID DE LA SWAP) la partición donde se almacena la imagen que crea el proceso de hibernación.

Pero no todo está listo, aún initramfs no se ha dado por enterado que vamos a hibernar. Localiza el fichero /etc/mkinitcpio.conf y añadele el hook de resume, a mi me quedó así:

“fragmento de mkinitcpio.conf”
1
2
3
4
#
##   NOTE: If you have /usr on a separate partition, you MUST include the
#    usr, fsck and shutdown hooks.
HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck"

Generalmente debes ponerlo después de udev y antes de autodetect. No te olvides de regnerar el initramfs:

initramfs
1
mkinitcpio -p linux

Si te molesta que la swap haga su pincha de swap (como en mi caso) puede deshabilitar el swapiness. Crea un fichero /etc/sysctl.d/00-noswap.conf y ponle adentro el siguiete valor: vm.swappiness=0

Y hibernan como los osos :D

Seguro te preguntarás como hacer que se ejecute algo al hibernar o despertar. Pues puedes crear una unit llamadas root-resume y root-suspend.

Por ejemplo, a mi en lo personal, me interesa parar el puto networkmanager cuando hiberno, ya que es poco probable que cuando despierte, esté en otro lugar y probablemente sin red. En mi caso yo habilito el networkmanager solo cuando lo necesito. En este caso, asumiré que para al hibernar y enciende al despertar.

“/etc/systemd/system/root-suspend.service”
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Local system suspend actions
Before=sleep.target

[Service]
Type=simple
ExecStart=/usr/bin/systemctl stop NetworkManager

[Install]
WantedBy=sleep.target

Al despertar arranca:

“/etc/systemd/system/root-resume.service ”
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Local system suspend actions
Before=sleep.target

[Service]
Type=simple
ExecStart=/usr/bin/systemctl start NetworkManager

[Install]
WantedBy=sleep.target

Todo lo que necesitas está en el artículo de la wiki de archlinux: Power Management

Si este artículo te resultó interesante, considere donar 0.05 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

Comments