jueves, 5 de septiembre de 2019

Configurar swap o espacio de intercambio en Ubuntu 18.04


Hola amigos del software libre.

En este nuevo artículo quería hablaros sobre el espacio de intercambio o "swap". De activarlo, desactivarlo, aumentar su capacidad, disminuirla, darle baja o alta prioridad.....

Pero antes, ¿Que es el espacio de intercambio o swap?

Swap, también conocido como archivo de paginación o Memoria Virtual, es un espacio en un dispositivo de almacenamiento (Disco Duro mecánico o SSD Dispositivo de Estado Solido), que se usa para guardar las imágenes de los procesos que no han de mantenerse necesariamente en la memoria física (RAM).

Cuando en un sistema GNU/Linux la cantidad de memoria RAM física se está llenando y llegando a un límite establecido, los procesos inactivos se mueven de la RAM al espacio de intercambio (swap) en el dispositivo de almacenamiento de la computadora.


El espacio de intercambio swap puede ser una partición o un archivo.

En algunos casos, cuando se ejecuta Ubuntu en una máquina virtual, no existe una partición de intercambio, por lo que la opción mas rápida para no tener que volver a particionar es crear un archivo de intercambio.

En una máquina real (en una computadora) cuando se instala Ubuntu 18.04 crea un archivo de intercambio en lugar de una partición.
Y afirmo, "SI" es necesario tenerla, sobretodo en los casos que la memoria RAM sea de poca capacidad. Independientemente que el dispositivo de almacenamiento sea un HDD o un SSD.

Los SSD (Solid-State Drive) dispositivos de almacenamiento de estado sólido, tienen un límite de escritura que se mide en TBW (Terabytes Written) e indica la cantidad de Terabytes de escritura que se pueden escribir antes de que sea probable que falle. En las unidades actuales, esta cifra puede variar entre los 100 TBW de algunas unidades TLC de 250 GB y los 2.400 TBW para las unidades de 2 TB. Cuando se acercan a esa cifra las células de almacenamiento se vuelven defectuosas.
Por tanto, si se crea un espacio de intercambio swap en dichos dispositivos debe de configurarse para que se use lo menos posible dentro de las necesidades del sistema, o de lo contrario estamos acortándoles su vida útil.
Aunque la advertencia parece alarmante podéis estar tranquilos que un SSD os durará tanto como un disco duro mecánico HDD, pero os tengo que advertir.

Por tanto en este artículo también os mostraré como configurar la memoria de intercambio swap para que se use de una forma moderada, para evitar escrituras de mas en los SSD y ralentizamientos del sistema.

Aún teniendo en cuenta todo lo anterior, la swap es necesaria tenerla si o si, aunque tengáis muchos GBytes de memoria RAM.

Cuando realizamos una instalación nueva de Ubuntu y le damos la opción al programa instalador a que realice él mismo el particionado, no crea una partición swap, sino un archivo swap de la mitad de capacidad de la memoria RAM. Si tenemos una memoria RAM de 4 GB de capacidad nos creará un archivo swap de 2 GB de capacidad por defecto. Dicha capacidad la podemos variar según nuestras necesidades. En computadoras de 4 GB de RAM para abajo, según el número de aplicaciones ejecutándose, a veces es mejor tener mas swap.

Ahora te mostraré una serie de pasos para agregar un archivo de intercambio en los sistemas Ubuntu 18.04. en caso de no tenerlo y modificar su tamaño.

Lo primero que debes hacer es verificar si tu instalación de Ubuntu ya tiene habilitada el área intercambio escribiendo en el terminal:

$ sudo swapon --show

Si la salida por pantalla no muestra ningún resultado, significa que tu sistema no tiene espacio de intercambio habilitado. Rara vez os encontraréis en esta situación, tal vez, en alguna máquina virtual.

De lo contrario, si obtienes algo como a continuación, ya tienes el espacio de intercambio habilitado en tu máquina.


En este caso, en la computadora que os estoy mostrando realicé yo mismo el particionado y creé el espacio de intercambio en una partición.

O en cambio, en este otro caso donde instalé Ubuntu 18.04 pero dejando el particionado al programa instalador, como muestro en este artículo, y donde el espacio de intercambio se creó en un archivo y no en una partición:



Como crear un archivo de intercambio en caso de que no tengamos creado:

El usuario con el que ha iniciado sesión debe tener privilegios de sudo para poder activar el intercambio.

En el caso que quisiera agregar 1GB de capacidad en el área de intercambio, comenzaría creando un archivo llamado "swapfile" con el comando "dd", escribiendo en el terminal:

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

Lo que hacemos con el comando anterior es escribir ceros en un archivo de salida llamado "swapfile", donde cada clúster o bloque de almacenamiento será de una capacidad de 1MB=1.000 KB, y cada bloque será copiado 1024 número de veces obteniendo los 1MB * 1.024 = 1.024 MiB = 1GiB (hay que tener clara la diferencia entre GiB (binario) y GB (decimal)).

En el caso de que necesitéis 2 GB de swap, tenéis dos opciones: cambiar el tamaño por bloque a 2MB y repetirlo 1024 veces. O la otra opción sería mantener el tamaño del bloque a 1M y aumentar el count=2048.
Las dos opciones son válidas, pero tienen sus pros y contras.
Solo dos apuntes a tener claros: si el tamaño de cada bloque o clúster es mas pequeño se pierde menos espacio de almacenamiento, pero perderéis velocidad de escritura. Si el tamaño de cada bloque es mas grande perderéis mas espacio de almacenamiento pero ganaréis velocidad de escritura.
Esto lo explicaré en otro artículo mas detalladamente.

En mi caso agregaré 2GB de capacidad en el área de intercambio.

Comenzaré creando un archivo llamado "swapfile" que se utilizará como área de intercambio con el comando "dd", escribiendo en el terminal:

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048





Una vez creado el archivo "swapfile" en mi caso de 2GB de capacidad debemos de blindarlo.

Por temas de seguridad solo el usuario root debería poder escribir y leer en el archivo de intercambio. Nadie mas.
Por tanto es muy importante establecer los permisos correctos escribiendo:

$ sudo chmod 600 /swapfile


Usaré la utilidad "mkswap" para configurar un área de intercambio de Linux en el archivo "swapfile" que hemos creado anteriormente:

$ sudo mkswap /swapfile


Activaremos el archivo de intercambio con el siguiente comando:

$ sudo swapon /swapfile


Muy bien ya hemos terminado. Pero para que el cambio sea permanente en cada inicio de la computadora, abrimos el archivo "/etc/fstab" con el editor "nano":

$ sudo nano /etc/fstab

y pegaremos la siguiente línea en el final del archivo:

/swapfile none swap defaults 0 0


Nota: Es posible que en algún archivo fstab en esta línea que define /swapfile, os encontréis en lugar de la opción "defaults", con la opción "sw". Esta opción indica que el archivo swap debe ser activado posteriormente con el comando y opción "swapon -a". Os aconsejo que utilicéis la opción "defaults" y evitaréis tener que usar explícitamente la sintaxis "swapon -a".

Guardamos los cambios y salimos del editor "nano":



Mediante el explorador de archivos podemos observar el archivo creado "swapfile" ubicado en el directorio raíz.



Verificamos que el intercambio esté activo utilizando el comando "swapon":

$ sudo swapon --show



Y con el comando "free" comprobamos el estado de la memoria RAM y el área swap:

$ sudo free -h



Ajuste del valor de intercambio:

Swappiness es una propiedad del kernel de Linux que define con qué frecuencia el sistema usará el espacio de intercambio. El intercambio puede tener un valor entre 0 y 100. Un valor bajo hará que el núcleo intente evitar el intercambio siempre que sea posible, mientras que un valor más alto hará que el núcleo use el espacio de intercambio de manera más agresiva.

El valor de intercambio predeterminado es 60. Podemos verificar el valor del área de intercambio actual escribiendo el siguiente comando:

$ cat /proc/sys/vm/swappiness


Si bien el valor de intercambio de 60 es correcto para la mayoría de los sistemas Linux, para los servidores de producción puede que necesite establecer un valor más bajo.

Por ejemplo, para establecer el valor de intercambio en 10 y bajar el uso del área memoria swap, escribimos en el terminal:

$ sudo sysctl vm.swappiness=10


Para que este parámetro sea persistente en todos los reinicios de la computadora, agregaremos la siguiente línea al archivo "/etc/sysctl.conf", mediante el editor de textos "nano":

vm.swappiness=10



Guardamos los cambios y salimos del editor.


El valor óptimo de intercambio depende de la carga de trabajo de tu sistema y de cómo se usa la memoria. Debes ajustar este parámetro en pequeños incrementos para encontrar un valor óptimo.

Os recalco que cuanto menor sea el valor introducido en el swappiness menor será el intento por parte del kernel de trasladar procesos al área de intercambio.
Y al revés, cuanto mayor sea este valor mayor será el intento de trasladar procesos de la memoria RAM al área de intercambio swap.


Eliminar un archivo de intercambio:

Para desactivar y eliminar el archivo de intercambio, por el motivo que sea, por ejemplo la necesidad de crear otro con mayor capacidad, seguiremos estos pasos:

Comenzamos desactivando el espacio de intercambio escribiendo en el terminal de comandos:

$ sudo swapoff -v /swapfile


A continuación, editaremos el archivo "/etc/fstab". Yo utilizaré el editor de textos "nano":

$ sudo nano /etc/fstab


Ahora tenemos dos opciones: podemos eliminar la siguiente entrada:

/swapfile none swap defaults 0 0


o comentarla escribiendo en el principio de la linea una almohadilla "#". Yo la comentaré.


Nota: Es posible que en algún archivo fstab en esta línea que define /swapfile, os encontréis en lugar de la opción "defaults", con la opción "sw". Esta opción indica que el archivo swap debe ser activado posteriormente con el comando y opción "swapon -a". Os aconsejo que utilicéis la opción "defaults" y evitaréis tener que usar explícitamente la sintaxis "swapon -a".

Guardamos los cambios realizados y salimos del editor de textos "nano":


Finalmente, eliminaremos el archivo de intercambio usando el comando rm:

$ sudo rm /swapfile


Con el explorador de archivos podemos ver que en el directorio raíz ya no existe el archivo "swapfile".


Y aquí termina este artículo donde habéis aprendido a crear un archivo de intercambio, activarlo y configurarlo en un sistema Ubuntu 18.04.

Espero os sirva de ayuda. Si tenéis alguna duda dejad un comentario en este artículo e intentaré ayudaros.
Saludos y hasta el próximo artículo.

12 comentarios:

  1. Muchas gracias Belinux, excelente artículo!!

    ResponderEliminar
  2. Muchas gracias por el artículo.
    Una consulta: Qué pasa cuando el espacio de intercambio es una partición y queremos redimensionarla?

    ResponderEliminar
    Respuestas
    1. Hola, respondiendo a tu pregunta, no hay ningún problema. Redimensiónala como harías con cualquier partición. Eso si, arrancando la distribución mediante un LiveUSB o LiveCD y que contenga la aplicación GUI gparted. Como sabes, no puedes estar modificando el tamaño de una partición mientras estás trabajando en ella. Debes estar en otra, de ahí arrancar con un lápiz y trabajar desde la partición del lápiz USB. Saludos.

      Eliminar
  3. Muchas gracias, me ha sido de gran ayuda.

    ResponderEliminar
  4. Muy bueno el articulo ,bien explicado ,muchas gracias.

    ResponderEliminar
  5. Exelente aporte, muchas gracias.

    ResponderEliminar
  6. Hola! Gracias por tu post.
    EN mi caso, tengo una partición SWAP creada, pero el instalador no la configuró. Como configuro una particion swap en un sistema ya andando?

    ResponderEliminar
    Respuestas
    1. Estás seguro que no está usándose la memoria swap?, compruébalo con el comando "top", o el comando "htop": https://www.sololinux.es/comprobar-el-uso-de-la-memoria-swap/

      Eliminar
  7. puueedo poonneerr ccooooommoo swap uunnaa usb yy nno uuunnaa paarrrticciioon

    '????




    ResponderEliminar

Gracias por participar en este blog.