martes, 4 de febrero de 2020

Optimizando el SSD con TRIM

No suelo ser muy partidario de aplicar ‘recomendaciones adicionales de optimización’ porque no dejo de pensar en que, si una acción es buena, lo lógico es que los propios creadores de la distro, o del programa, la tendrían que incorporar ‘por defecto’ (o recomendarla). Y que, por tanto, si no lo hacen es porque puede haber algún problema, o algún ‘daño colateral’, que no se atreven a 'endosar' al usuario 'normalito'.

Pero leyendo, respecto a mi nuevo juguete, el disco (duro) en estado sólido, SSD, que suelen tener bastante menos vida útil que los discos mecánicos tradicionales, porque soportan un menor número de actos de lectura/escritura, leo también que existe una funcionalidad que se llama TRIM, y que se recomienda activar… y voy a ver si me entero un poco de qué va esto. Mi fuente, como siempre, Google, en general y, en este caso, básicamente este interesante blog, que suelo visitar.
Así que... Let's go
Bien, pues como concepto previo, y dicho de forma simple, parece ser que los SSD estructuran la información almacenándola en ‘bloques’ (digitales), que se subdividen en ‘paginas’. Y que, si bien la ‘página’ es la unidad mínima de escritura, la unidad mínima de borrado es ‘el bloque’. Y entonces sucede que cuando se modifica (o se borra) un archivo, si en el ‘bloque’ que lo contiene hay páginas de otros archivos, no se puede borrar, quedan ‘como páginas muertas’ y las modificaciones tienen que ‘re-escribirse’ encontrando hueco en otro bloque. Además ocupando, ficticiamente, más espacio.
Y por esta tontería, por la que el SSD puede trabajar más de la cuenta buscando huecos, aparece la utilidad TRIM (por cierto, parece ser que ‘trim’, en inglés, es ‘podar’).
 
Porque lo que hace TRIM es (más o menos) informar a la controladora del SSD de las páginas con datos almacenados que se pueden reposicionar para poder borrar todo el bloque (y dejarlo totalmente disponible para ser reocupado). 
O sea, para hacer (si no lo he entendido mal) una especie de ‘desfragmentación’.
De esta forma (dicen los defensores de TRIM) los bloques se desocupan y pueden ser borrados en cuanto tengan páginas ‘muertas’ y así, al parecer, se evitan lecturas excesivas para saber si un bloque semiocupado tiene páginas disponibles para un nuevo archivo- Lecturas que, con el paso del tiempo, producen pérdida de rendimiento.

Vista esta introducción, lo siguiente que hay que decir que, de usar TRIM, puede ser activado para ejecutarse...
a) en continuo
b) cada cierto tiempo.
Pues bien, parece ser que todo el mundo desaconseja (por excesivo) que TRIM actué en modo continuo.

Prosigo: dando por sentado que Linux soporta TRIM (lo hace desde el kernel 2.6.28), así como el sistema de archivos (lo soportan ext3, ext4, también NTFS y vfat, y btrfs, etc),  
a) Sabremos que nuestro disco SSD también lo soporta si la orden por consola 
lsblk --discard
nos da alguna información. Y...
b) Sabremos si tenemos activado TRIM en modo continuo (al, parecer, algunas distros así lo tienen) si, editando el fstab, por ejemplo con 
sudo nano/etc/fstab 
aparece, en las líneas que definen las particiones montadas, la palabra ‘discard’. Algo así...
UUID=XXXXXX / ext4 errors=remount-ro,discard   0   1 
UUID=XXXXXXXXX /home ext4 defaults,noatime,discard   0   2 
(Por cierto: leo en la indicada fuente que «es importante que la opción 'noatime' este presente en las entradas de fstab. De este modo debería mejorar el rendimiento de nuestro SSD. Con la opción noatime no se realizará ninguna escritura a la unidad SSD para registrar la fecha de último acceso a un fichero» 
Bien, pues he leido algo sobre ello (en esta otra fuente), y me he animado a probarlo… pero un desastre, se me organizó un gran ‘quilombo’, no me cargaba Debian y, lo que es peor, entrando en modo recuperación (‘recovery’) no lograba modificar el /etc/fstab por más que lo hacía como root… y la única solución fue entrar con LinuxMint y, ahí, editar y corregir ese archivo fstab de Debian, eliminando el ‘noatime’… con lo que ya pude arrancar perfectamente. 
Quizás (es una especulación mía) la causa fue que la partición root (/), en mi fstab, tiene la opción ‘errors=remount-ro’ (que debe ser como se crea ‘por defecto’ y que significa que en caso de error de montaje la partición "/" se volverá a montar pero como sólo lectura). 
Así que lo mejor es no meterse en líos, por lo dicho al principio: ojo con enredar modificando opciones que, por defecto, trae la distro: puede que estos ‘inventos’ para optimizar no se incluyan ‘por algo’)

Pero volvamos a TRIM. Decíamos que conviene deshabilitar (por excesiva) su ejecución en continuo. Sería suficiente que se activase, por ejemplo, una vez a la semana.
Pues bien, para ello tenemos que hacer estos pasos (que empiezan por comprobar que tenemos instalada la utilidad ‘util-linux’)… 
sudo apt install util-linux 
y ahora...
sudo cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system 
(que lo que hace es crear, en systemd, los servicios y timer de fstrim puestos, como ejemplo, al instalar la utilidad ‘util-linux’, moviéndolos a etc/systemd/system) 
Y luego, simplemente… 
habilitamos TRIM con: 
sudo systemctl enable fstrim.timer 
iniciamos el servicio con: 
sudo systemctl start fstrim.timer 
y comprobamos que está habilitado con 
sudo systemctl status fstrim.timer 
con lo cual ya tendremos TRIM preparado para ejecutarse cada semana

Termino con algunas operaciones adicionales de las que habla también mi fuente principal. Por ejemplo...
Forzar la ejecución ‘a demanda’ de un TRIM
sudo systemctl enable fstrim.timer --now

(puede ser interesante forzar un TRIM cuando acabas de hacer un gran movimiento de archivos)
Comprobar la última vez que se ejecutó TRIM…
systemctl list-timers fstrim.timer --all 

(esto es interesante para 'controlar' que está funcionando. Te informa de cuándo se ejecutará el siguiente (next) TRIM, cuantos días faltan para ello, y cuando ha sido el último (last), y cuantos días han pasado desde entonces)
Consultar el último log de TRIM
sudo journalctl -u fstrim.timer

etc.

(Con estas ideas, yo ya he montado mi TRIM, se ejecuta todos los lunes, a las 00:00 horas (si está apagado el PC, se ejecutará en el siguiente arranque) así que, de momento..., esto es to..., esto es to… esto es toodo, amigos...)

No hay comentarios:

Publicar un comentario