miércoles, 18 de junio de 2014

TRIM en un SSD usando FSTRIM y CRON en Fedora 20 Heisenbug


Hola hombres y mujeres libres:
Después de intentar instalar Ubuntu 14.04 varias veces en mi “súper” ordenador (Atom D510 con 2GB de RAM, con NVIDIA Ion2 512MB y un SSD de 250GB SAMSUNG 840 EVO) y no poder llegar a buen término, me aventuré a conocer FEDORA 20 (Heisenbug) GNOME 3. Estoy encantado; es realmente alucinante: rápido, estable y bonito.
Como siempre me enzarzo con el SSD, ya que es sumamente importante que este dispositivo funcione a la perfección para que no nos depare sorpresas en el futuro. Les cuento mi experiencia, que tiene un gran porcentaje experimental, por lo que no dejo de advertirles que todo lo que hagan a cuenta de lo que yo pueda publicar en este blog es bajo su total responsabilidad. No asumo cualquier fiasco en el que ustedes se puedan meter, yo sólo les cuento mi propia experiencia con la intención de aportar luz en este complicado mundillo de Linux.
Dicho lo anterior, Fedora 20 no soporta automáticamente TRIM, es decir, el S.O. no comunica de forma automática a la controladora del SSD (Solid State Disk) qué bloques de datos realmente puede volver a usar después de borrarlos. Para ello, voy a crear un script para que TRIM se ejecute automáticamente cada día.
Antes de nada podemos verificar si nuestro SSD soporta TRIM. Para ello bajamos el programa HDPARM desde el terminal como root:
su
yum install hdparm
Luego de instalado lo ejecutamos así:
hdparm -I /dev/sda | grep -i trim
Si obtenemos algo como lo siguiente es que realmente lo soporta:

Fedora 20 Heisenbug, al instalarlo de forma automática, crea cuatro particiones:
/

/boot

/home

swap
Opté por usar el script para ejecutar TRIM periódicamente en las tres primeras particiones, y discard como parámetro en fstab para la partición de intercambio de memoria swap. Aquí tienen mi atrevimiento y la componente experimental. Voy a usar swap sin reparo, pero con las ventajas del SSD. Generalmente la gente anula swap, es decir, ajusta el S.O. para que no eche mano de la memoria de intercambio; bueno, pues yo he decido probar echando mano de la memoria de intercambio. En este momento el PC va de maravilla.
Antes de empezar, quisiera señalar que cuando hablo de CRON, hablo de un programa que permite a los usuarios de Unix/Linux ejecutar automáticamente comandos o scripts (lotes de comandos) a una hora o fecha concreta.
Una de las formas de usar CRON es situando los scripts en el directorio /etc, donde encontramos, por ejemplo, con el subdirectorio cron.daily (/etc/cron.daily/). Si colocamos en esta carpeta un script, éste se ejecutará cada día.
El script, de nombre “trim”, lo creamos en la carpeta cron.daily con gedit, por ejemplo:
su
gedit /etc/cron.daily/trim


 

El script ejecuta fstrim en cada una de las particiones, menos la swap, y genera un log que nos permite comprobar que realmente su ejecución se ha realizado correctamente, indicando el día y la hora.
Después de creado el script debemos de ir a la carpeta /etc/cron.daily, navegando con nautilus abierto como root, para darle permiso de ejecución ( como alternativa: chmod +x); para ello procedemos como sigue:
Abrimos el terminal y escribimos
su
luego
nautilus
y realizamos lo siguiente:
 
Navegamos entre la carpeta etc/cron.daily/ y buscamos el archivo creado anteriormente, “trim”, y en el menú contextual seleccionamos la pestaña “Permisos” y activamos “Permitir ejecutar el archivo como un programa”; cerramos.
Aunque desearía verificar antes de nada a qué hora realmente se ejecutaría el archivo cada día, y modificarla si fuera preciso, como era tarde, dejé para el día siguiente que el PC me sorprendiera creando en la carpeta /var/log/ el archivo trim.log, corroborando que realmente todo se ejecutara bien, y modificar luego fstab para concluir con la partición swap. Así fue, al día siguiente tenía creado en el directorio /var/log/ el siguiente log:
 
Se ejecuto el 16 de junio a las 4:20h de la tarde. Todo perfecto.
Ahora toca modificar fstab para que pueda el S.O. indicar qué bloques puede usar swap después de borrar contenido en esa partición. Usaremos el parámetro discard. Discard notificará el borrado de un archivo en el SSD para que se proceda luego al uso de los bloques que ocupaba.
Para editar fstab procedemos del siguiente modo:
su
gedit /etc/fstab
Añadimos discard a la línea donde está swap, y guardamos.
Reiniciamos el PC, et voilà !!!

En ocasiones es presico ponderar el valor de la demanda de memoria de intercambio en función del trabajo exigido a nuestro PC. Para conocer el valor actual sólo tenemos que teclear lo siguiente en el terminal:
cat /proc/sys/vm/swappiness

El valor que me remitía a mí era de 60.

Se puede cambiar este valor en tiempo real usando como root el siguiente comando:
su
sysctl vm.swappiness=20 (por ejemplo cambiar a 20)

Así podemos ir observando el comportamiento del sistema, y optimizar su rendimiento.

Si queremos fijar un valor concreto, en mi caso a 10, editamos el archivo sysctl.conf con gedit:
su
gedit /etc/sysctl.conf

Añadimos luego la siguiente línea:

vm.swappiness=10


Reiniciar luego el PC.

No hay comentarios:

Publicar un comentario en la entrada