A veces tenemos un buen equipo con un procesador eficiente y suficiente memoria RAM (8 Gb o más) y al instalar nuestra distribución GNU/Linux preferida no consideramos la idea de crear un archivo de memoria de intercambio o SWAP para cuando nos quedemos cortos de memoria física entonces, nuestro equipo echa mano de esa parte del disco duro que dejamos dedicada para tal fin y no colgar los procesos que tengamos abiertos.
Pero como no la creamos en la instalación y vemos que nos hace falta porque tenemos poca memoria física (RAM) hay dos formas de hacerlo. Una es con la herramienta de GParted desde un Live USB y otra desde la misma terminal de nuestra distribución como lo detallo a continuación.
Es importante mencionar que no puede usar un archivo de intercambio con un sistema de archivos BTRFS
Además, la hibernación (en disco) ya no funcionará de forma inmediata cuando se utilice un archivo de intercambio. La mayoría de las distribuciones de Linux usan suspender (a RAM) en lugar de hibernar (a disco) de forma predeterminada. Si necesita habilitar la hibernación con un archivo de intercambio, al final encontrará información. Suspender (a ram) no se ve afectado por esto.
Todo se hace como root, para eso en la terminal se coloca:
$ su -
Lo primero que haremos es ver cuánto espacio tenemos disponible en nuestro disco, lo miramos… por ejemplo con el comando:
# df
Desde la consola o terminal (en el ejemplo creamos una swap de 4GB)
# fallocate -l 4G /swapfile
Así hemos creado un archivo de 4 gigas en la partición /root llamado swapfile, ¿hasta ahí sencillo no? Ahora si quieres ver las características del archivo, ejecuta:
# ls -lh /swapfile
Ejemplo de salida: -rw------- 1 root root 4,0G sep 18 13:33 /swapfile
Una vez que tenemos el archivo creado procedemos a activarlo. Primero le concedemos permisos. Use esto para que otros usuarios no puedan leer su archivo de intercambio, que puede contener información confidencial.
# chmod 600 /swapfile
Verificamos con:
# ls -lh /swapfile
Ejemplo de salida: -rw------- 1 root root 4,0G sep 18 13:34 /swapfile
Formatee el archivo recién creado como intercambio. Indicamos al sistema que configure el nuevo archivo swap:
# mkswap /swapfile
Habilite el archivo de intercambio recién creado. Activamos con:
# swapon /swapfile
Si la terminal le devuelve lo siguiente:
# swapon: /swapfile: swapon failed: Invalid argument
entonces utilizar el siguiente comando:
# dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
Luego:
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
Ejecutamos nano:
# nano /etc/fstab
Y al final adicionamos esta línea:
/swapfile swap swap sw 0 0
Verificamos que la swap ya está activa:
# swapon -s
Ejemplo de salida:
Bien, en estos momentos nuestra swap está funcionando correctamente, pero… en modo temporal, por tanto en el momento que reiniciemos el sistema, desaparecerá nuestra swap.
Para crear una swap de manera permanente editamos el archivo /etc/fstab como expliqué arriba:
# nano /etc/fstab
Y en archivo que se abre, al final del archivo agregar la siguiente linea:
/swapfile none swap sw 0 0
Guarda (Ctrl + O) luego Enter y cierra el editor (Ctrl + X) luego Enter, ahora cuando se reinicie el sistema el archivo swapfile estará montado y activo como si fuera una swap. Nuevamente, recuerde no modificar nada más en el archivo /etc/fstab. ¡Cambiar cualquier otra cosa en este archivo puede evitar que su sistema se inicie!
Si está usando systemd este paso es necesario para las distribuciones de GNU/Linux basadas en Ubuntu y Debian (no estoy seguro de que otros también lo necesiten).
Necesita editar el archivo /etc/initramfs-tools/conf.d/resume y comentar (agregue un # al principio de la línea) la línea RESUME = UUID = .... En la prueba que se hizo, no hacer esto resultó en unos 15-20 segundos de tiempo de arranque adicional. El comando systemd-analyse blame no dio ninguna información sobre por qué está sucediendo, así que tuve que investigar un poco para descubrir que esto es lo que está causando el retraso en el arranque.
Para nuestra fortuna, mostró un mensaje: "Gave up waiting for suspend/resume device" (Renuncié a la espera de suspender/reanudar el dispositivo) durante un breve momento durante el arranque, lo que puede deberse a no tener el UUID de intercambio correcto en /etc/initramfs-tools/conf.d/resume
Este archivo se usa cuando se reanuda desde la hibernación y causó retrasos en el arranque porque ya no tenemos una partición de intercambio. Para comentar esta línea en /etc/initramfs-tools/conf.d/resume, todo lo que tiene que hacer es ejecutar el siguiente comando:
$ sudo sed -i 's/^RESUME=UUID/#RESUME=UUID/g' /etc/initramfs-tools/conf.d/resume
También necesitará actualizar initramfs y después de eso habrá terminado:
$ sudo update-initramfs -u
Espero les sea de utilidad y dejen sus comentarios.