Optimizando el Sistema Linux – TMPFS

By | 0 Comments

  Otra de las cosas que suelo hacer en mi sistema (Debian Jessie) esta relacionada con los archivos temporales. Cada vez que se crea un archivo temporal, por parte de las aplicaciones que instalamos, o las que creamos nosotros mismos, utilizamos el directorio /tmp. Este directorio esta básicamente para meter este tipo de archivos, no es obligatorio pero digamos que es la manera correcta de hacer las cosas.

  Si leéis los otros post que he puesto, os daréis cuenta lo poco que me gusta hacer trabajar al disco duro (I/O), casi rozando la locura. Entonces por qué permitir que archivos temporales, sin ninguna importancia, ocupen la I/O del disco. Pues en los sistemas linux tenemos un tipo de sistema de ficheros que usa la memoria virtual en vez del almacenamiento físico, llamado tmpfs. Vamos a ver rápidamente donde se esta usando, ejecutamos:

$ df -ht tmpfs

1

  En una instalación limpia veremos algo como eso, una serie de directorios que usan tmpfs, con tamaños variables. Vamos a ver como están montados.

$ mount -t tmpfs

2

  Y aquí ya vamos teniendo una idea más cercana, por ejemplo vemos que esos tamaños variables, los podemos definir nosotros. Además vemos que si no definimos el tamaño nos pone por defecto un tamaño igual al 50% de la ram (mi ram es de 8 gigas), y bueno las demás opciones son las típicas de cualquier punto de montaje.

  Entonces si defino el directorio /tmp con un sistema de ficheros que usa la memoria del equipo, no solo elimino la carga en disco, si no que acelero la respuesta de las aplicaciones que guarden archivos temporales, al ser el acceso a estos, miles de veces más rápido, no pinta mal.

  Vamos a ello, como va a ser un punto de montaje lo meteremos al /etc/fstab. Las opciones de montaje las podemos medio copiar de los otros puntos de montaje que vimos antes, pero hay que saber que hace cada una. Vamos a ver el manual de mount “man mount”, donde tenemos unos apartados llamados FILESYSTEM-INDEPENDENT MOUNT OPTIONS y más específico Mount options for tmpfs.

  Vamos a ver que opciones nos pueden valer revisando el manual:

rw Permitirá la lectura y escritura, la otra opción sería ro (read only).
nosuid No permitir archivos con el bit de SUID, que recuerdo haber hecho un post hace ya tiempo explicándolo.
nodev No interpretar dispositivos especiales (carácter o bloque).
noexec No permitir la ejecución de binarios.
noatime En los otros tienen “relatime”, se refiere a la actualización del stat del fichero, ya lo veremos en otro post.
auto Para que la monte automáticamente al iniciar el sistema.
sync Podemos usar la sincronía de datos al no ser un dispositivo físico, de esto ya hable en los anteriores posts.
size=2G Importante, el tamaño máximo que puede tener, yo empece en 3G y como no usaba tanto bajé a 2G, incluso quizás baje algo más.
mode=1777 Aquí especificamos los permisos que tendrá, si echáis un vistazo /tmp tiene drwxrwxrwt, la “t” es el STICKY BIT (los archivos son accesibles a todos, pero solo el dueño lo puede editar o eliminar), y se representa con el 1 detrás.

  Quedaría tal que así, ejecutaremos el comando antes de hacerlo permanente.

# mount -t tmpfs -o rw,nosuid,nodev,noexec,noatime,auto,sync,size=2G,mode=1777 tmpfs /tmp

  Ahora si vemos los puntos de montaje, tendremos una línea nueva.

3

  Algunas opciones que pusimos no salen ahí, pero bueno será que no le apetece mostrarlas. En el /etc/fstab agregamos la entrada para que sea permanente.

tmpfs      /tmp     tmpfs     rw,noexec,nodev,nosuid,auto,nouser,sync,noatime,size=2G,mode=1777     0  0

  Y ya lo tendríamos listo. Pero también podemos hacerlo a través de “systemd” que ha entrado en Jessie. No voy a entrar en que me parece systemd, por que básicamente nunca lo he usado, hasta esta versión de Debian que me lo han metido con calzador. He leído mucho (y mal) acerca de ello, por parte de las personas que aprecio, pero voy a tenerlo un tiempo a ver.

  El caso es que hay una unidad especifica que podemos activar para que nos monte el directorio temporal como tmpfs. De hecho por lo que he visto esto estaba activado por defecto hace tiempo, en las distros que lo tenían, claro. Para eso, tengo una replica de mi sistema en una máquina virtual sin nada configurado, así que vamos a ver que pasa si lo activamos.

# systemctl list-unit-files --type=mount

4

  Vemos las unidades referentes al montaje, y al final tenemos tmp.mount que esta deshabilitado. Vamos a ver el estado con mas detalle.

# systemctl status tmp.mount

5

  Bueno, pues vamos a habilitarlo.

# systemctl enable tmp.mount

6

  Con esto lo habilitamos para que se monte al arrancar el sistema. No va a aparecer nada nuevo en el /etc/fstab, pero bueno ya veis en el comando mount la cantidad de puntos de montaje que hay, que tampoco están escritos en ese fichero. Vamos a revisar que esté montado.

# mount | grep /tmp

7

  Digamos que no tiene muchas opciones de montaje. Si nos fijamos en la salida del comando al habilitarlo, ha creado un enlace simbólico a un fichero, que me da a mi que va a ser donde están las configuraciones.

8
9

  Si lo queréis hacer de esta forma, ya sabéis donde hay que configurarlo. Para quitarlo le metéis un “disable” y listo, que básicamente borra el enlace simbólico.

  Y por último hablar de unas cuantas cositas, existe otro directorio con propósito temporal en /var/tmp, que podéis usar en un momento dado para no perder los datos al reiniciar. O todo lo contrario, podéis ponerlo como un enlace simbólico a /tmp para que también se almacene en memoria lo que vaya ahí.

  Si recordáis el otro post donde hablaba de vaciar la memoria, también se aplica para este caso. Y como siempre ya sabéis los peligros de usar la memoria, que nos quedemos sin espacio, por eso recomiendo ir viendo cuanto espacio ocupamos, en las opciones de montaje puedes ir cambiando el tamaño. Por cierto!, hay otro tipo de sistema de ficheros ramfs, que si no recuerdo mal podía ir incrementando el tamaño. También se monta en memoria pero no usa la swap, cosa que si hace tmpfs, de hecho para eso se creo tmpfs para poder usar la swap y poder poner un límite.

  Otra cosa que podéis hacer en el navegador, es ponerle que use como cache el directorio /tmp, podéis ver en firefox/iceweasel la ruta actual con about:cache. La mejora en la navegación va a ser bastante notable, y la carga que le quitamos al pobre disco duro… sin palabras. Lo único que si descargas ficheros muy grandes habría que ver si se guardan en la cache antes de pasar a disco, pero seguro que se puede configurar todo eso. Os dejo que investiguéis como hacerlo.

  Saludos.