Estudiando para mi certificación LPIC me tocó darle un repaso a todo el tema de la SWAP en linux y me decidí a hacer un pequeño post dedicado a una curiosidad que me pareció interesante: la posibilidad de crear un fichero SWAP en el caso de que nuestro disco se quede corto por alguna circunstancia. De paso, repasamos los ficheros / comandos relacionados con este tipo de memoria. Empezaremos por el principio…
¿Qué es la SWAP?
Imagino que todos sabremos esto, pero por si acaso, la memoria SWAP viene a ser un tipo de formato de almacenamiento destinado a ser usado como memoria cuando el sistema se queda sin recursos disponibles. Si nuestra RAM, por lo que fuese, es insuficiente, comenzaremos a usar el disco como memoria RAM, lo cual es mucho más lento.
La memoria SWAP sigue siendo lenta, pero al ser una estructura optimizada para esta funcionalidad, no lo es tanto como podría ser un espacio en disco sin este tipo de formato.
¿Es necesaria la SWAP?, ¿cuanta es necesaria?
La respuesta a las dos es: depende. Depende de tu sistema y del uso que le des. En un sistema de escritorio puede que sea prescindible si tienes mucha RAM y no sueles tenerla por encima del 50-60%, en un servidor, yo me dejo llevar por los señores de RedHat, que saben un poco de eso, con su tabla de tamaños:
¿Como se cuanta SWAP tengo y cuanta está usándose?
Esto es una pregunta rápida. Hay dos opciones que vienen a ser lo mismo, consultar el fichero /proc/swaps o utilizar el comando swapon -s; ambas devuelven el mismo output y nos dirán cuanta tenemos, donde está localizada, el tipo (partición o fichero) y la prioridad. La prioridad viene a determinar cual tiene preferencia en el caso de tener más de una. La prioridad más alta se usará antes. Evidentemente, el medio más rápido debería tener la mayor prioridad.
¿Como creo un fichero SWAP?
Si en alguna emergencia estáis a puntos de quedaros sin SWAP en un servidor en producción o cualquier cosa por el estilo, podéis hacer un apaño temporal para salir al paso y luego arreglar el problema. Para ello bastará con crear un fichero que el servidor podrá usar como ayuda en ese momento. Para ello, debemos hacer los siguientes pasos:
- Crear un fichero del tamaño deseado.
- Convertir el fichero en un fichero válido SWAP.
- Añadirlo a la tabla del sistema.
Empezamos por lo primero y más fácil. ¿Como creamos un fichero de un tamaño determinado? con el comando dd y usando /dev/zero. Fijáos en la sintaxis:
dd if=/dev/zero of=nombre-fichero bs=1M count=tamaño_megabytes
El parámetro nombre-fichero es la localización en disco de nuestra nueva swap y el valor tamaño_megabytes creo que es autoexplicativo. El fichero swap debería tener un valor de permisos de 600 por motivos de seguridad.
Veamos el comando en acción para crear un fichero de 1GB para ser usado como SWAP. Lo creo en /tmp ya que no quiero olvidarme de él.
El segundo paso es convertir el fichero en un formato de fichero válido. Para eso usaremos el comando mkswap.
Ya solo nos queda decirle al sistema que puede usar ese fichero como fichero SWAP. Para ello usaremos el comando swapon, esta vez sin parámetros. Después de esto, solo nos quedará comprobar que se está usando el fichero SWAP, como os he enseñado antes.
¡Y ya está!. En el momento que queráis libraros de ese apaño temporal, tendréis que usar el comando swapoff y posteriormente borrar el fichero.
Si queréis que el cambio sea permanente, tendréis que actualizar el fichero /etc/fstab añadiendo la información del fichero, tal que así:
/ruta-del-fichero none swap defaults 0 0
Consideraciones finales
Este post no cubre ni la décima parte de lo que hay que saber del tema, pero es una buena forma de empezar a saber como funcionan las cosas por dentro y añadir un fichero SWAP es una de esas curiosidades que puede ser necesaria en algún momento.
Os recomiendo leer más sobre el tema en los siguientes enlaces. También estaría bien que investigaseis un poco sobre el swapiness.
- SWAP en archilinux [EN]
- SWAP en debian [EN]