Linux + SSD + EXT4 + TRIM

Como todos sabéis, he adquirido hace poco un disco duro sólido (SSD) para usarlo en Linux. Este formato de disco tiene muchas ventajas respecto a los tradicionales discos duros mecánicos, pero también tienen algunos inconvenientes, que con el tiempo y los nuevos SSDs van siendo menos.

SSD-300x228

Según pasa el tiempo, el uso de SSD se va normalizando en los equipos “preconfigurados” que se entregan tanto con Windows, Mac OS X, y Linux.

Como principales ventajas que se me ocurren en este momento caben mencionar: su alta velocidad lectura/escritura, comparados con los HD tradicionales es otro universo, su formato en memoria sólida flash, que hace que sean casi inmunes a golpes y vibraciones, y al mismo tiempo este compacto formato evita “los calentones” de los HD tradicionales. Es muy raro que un SSD se caliente, por lo que no necesita refrigeración exclusiva.

Un disco SSD se puede usar perfectamente en cualquiera de los 3 grandes Sistemas Operativos, en este caso solo vamos a ver como configurarlo en Linux, que es el sistema que nos preocupa a nosotros.

Aunque los primeros SSD requerían de más configuración para usarlos en nuestro sistema Linux la tecnología avanza sin prisa pero sin pausa, es por eso que llegará un momento en que todo esto no sea necesario pues tanto los nuevos sistemas de archivos y los últimos firmwares de las grandes marcas de SSD ya vienen preparados para este tipo de “trabajos”

Todo lo que contaré a continuación es el fruto de días y días de lectura por la red y pruebas tras la pantalla. Comenzamos!!!

14 - 1

Y bien, ya tengo un disco duro sólido, mi trabajo me ha costado, sangre sudor y lágrimas. Quiero pincharlo en mi equipo y he visto por la red algo de activarle el TRIM para alargar la vida del SSD y mantanerlo siempre rápido… pero.

¿Que es TRIM?

Dejemos que nuestra amiga Wikipedia nos explique como solo ella sabe. (unos extractos)

En informática, una orden TRIM permite a un sistema operativo comunicarle a una unidad de estado sólido (SSD) qué bloques de datos ya no están en uso, como los datos dejados al borrar ficheros. Una operación del SO como un borrado generalmente sólo marca los bloques implicados como no usados. TRIM permite que el SO pase esa información al controlador de la SSD, que de otra manera no sabría qué bloques puede eliminar.

El propósito de la instrucción es mantener la velocidad de la SSD durante toda su vida útil, evitando la ralentización que los primeros modelos sufrían al llegar a escribir en todas las celdas al menos una vez.

TRIM ha sido implementado en Linux 2.6.33.7 En FreeBSD, TRIM está disponible desde la versión 8.0.

Donde TRIM no está soportado automáticamente por el sistema operativo, hay utilidades que pueden mandar una orden TRIM manualmente. Usualmente listan todos los bloques libres especificados por el sistema operativo y le pasan esa lista a la unidad como una serie de órdenes TRIM. Estas utilidades están disponibles desde varios fabricantes (Intel,11 XtremeSystems) o como utilidades generales (hdparm v9.17 y posteriores).

Algunas distribuciones Linux, ya detectan los discos SSD durante la instalación y de manera automática configuran el archivo fstab para dar suporte a TRIM, como es el caso de Manjaro 0.8.9 y Ubuntu 14.04 LTS (este solo en SSDs Intel y Samsung)

Como nosotros somos unos manitas y curiosos vamos a ver como configurarlo manualmente, pues hay diversos métodos para activar TRIM en un SSD. Dependiendo de la distro y de nuestras propias pruebas, podremos decantarnos por uno u otro método.

En este caso voy a explicar los 3 métodos que he visto y probado. Via fstab, via cron y vía systemd.

Antes de seguir leyendo recomiendo encarecidamente darle al Play, los tuttos con buena música de fondo se asimilan mucho mejor😉

Antes de nada, debemos asegurarnos de que nuestro SSD soporta TRIM, normalmente viene en la etiqueta/info del producto, también podemos comprobarlo vía terminal. (cambiando sda por nuestro disco)

sudo hdparm -I /dev/sda | grep "TRIM supported"

La respuesta será clara, en mi caso está soportado, como se puede apreciar.

Data Set Management TRIM supported (limit 1 block)

Además hay que tener en cuenta estar en el Kernel 2.6.33 o posterior y tener nuestra partición/es en EXT4 o BTRFS*

*Dado que aún apenas se usa el sistema de archivos BTRFS este tutto se centrará en EXT4.

También es altamente recomendable si se hace partición /home aparte ubicarla fuera del SSD, puede montarse en un segundo disco duro mecánico, por ejemplo. Lo mismo debemos tener en cuenta para la partición de intercambio Swap. A los SSD lo que menos les gusta es la constante y machacante escritura en ellos.

En mi caso, no hago partición /home aparte, suelo dejarla integrada en la raíz. Tampoco he hecho partición de intercambio Swap en esta última instalación, con 8 GB de RAM puedo prescindir de ella dado que tampoco uso opciones como la hibernación o suspensión.

1.- ACTIVAR TRIM VIA FSTAB

Este es el método más usado aunque según he leído durante estos días es el menos recomendado pues a la larga el SSD puede volverse lento, aunque no se que tan larga sea esa estimación de tiempo. Para mí que el equipo se estropea antes por la obsolescencia programada que el SSD. También, supongo, variará según la marca y antiguedad del SSD, a más moderno mejor preparado.

Aquí solo tendremos que añadir la opción discard, y noatime recomendable si no lo tenemos, en la línea del fstab donde esté la partición de nuestro SSD.

Ejemplo de como me ha dejado el fstab el propio instalador de Manjaro 0.8.9.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
#
UUID=xxxxxxxx-da7d-46bf-95ae-xxxxxxxxxx /media/datos ext4 defaults 0 0
UUID=xxxxxxxx-09f1-4c97-8aa7-xxxxxxxxxx / ext4 defaults,noatime,discard 0 1
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0

En donde la línea del segundo UUID corresponde a sda1 que es donde tengo la primera partición del SSD y está Manjaro instalada en /.

También es conveniente que los temporales no escriban constantemente en el disco duro SSD, así que se crea un tmpfs para que se escriban directamente en la RAM. Esto se añadirá también al archivo /etc/fstab. Podéis verlo en la última línea la que empieza por tmpfs.

2.- ACTIVAR TRIM VIA CRON Y FSTRIM (Recomendada)

Más efectivo que el método anterior, la ejecución programada de fstrim nos permite disfrutar de los beneficios de éste, sin apenas efectos en lo que a rendimiento se refiere.

Esta es la opción que he usado en Ubuntu 14.04, y parece la más indicada para Debian, Ubuntu y derivadas.

Utilizando esta opción (tarea programada) podemos hacer que TRIM (fstrim) se ejecute a diario.

Abrimos /etc/cron.daily/trim (si no existe el archivo trim lo estaremos creando)

sudo nano /etc/cron.daily/trim

(He usado nano, usen su editor favorito)

Pegamos el siguiente contenido y guardamos cambios.

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG

Las dos últimas líneas indican donde se va a ejecutar TRIM. Aquí debemos añadir las particiones donde queremos que se ejecute TRIM. Por lo general debemos agregar / si la partición raíz se encuentra en el SSD y /home en caso de que también hayamos creado en el SSD una partición separada de /home. Si no la han creado omitan esa línea.

Ahora podemos comprobar si nos funciona el comando fstrim.

sudo fstrim -v /

Si todo está ok deberá mostrarnos una salida similar a esta.

yoyo@lenovo:~$ sudo fstrim -v /
[sudo] password for yoyo: 
/: 24719323136 bytes were trimmed

Lo siguiente es hacer ejecutable el archivo con el siguiente comando.

sudo chmod +x /etc/cron.daily/trim

3.- ACTIVAR TRIM VIA SYSTEMD (Recomendada para distros que usen systemd, Arch y derivadas, KaOS etc…)

Esta es la opción preferida para las distros con Systemd. Hacer que se ejecute TRIM al inicio hará que tarde un poquito más en arrancar pero sabremos que cada vez que iniciamos el ordenador lo tenemos “trimeado” a la perfección. De esta manera tendremos siempre “trimeado” el SSD y no tenemos que forzarlo a que lo haga cada vez que cambie algo en el SSD, que es lo que hace la opción discard en el fstab.

Con nuestro editor favorito crearemos el archivo fstrim.service.

sudo nano /usr/lib/systemd/system/fstrim.service

Pegamos lo siguiente y guardamos cambios.

[Unit]
Description=Trim free cells on the SSD
After=local-fs.target

[Service]
ExecStart=/sbin/fstrim /
Type=oneshot

[Install]
WantedBy=multi-user.target

Nota: La linea “ExecStart=/sbin/fstrim /” es la linea que debemos modificar si queremos que “trimee” más particiones. Si solo queremos activar TRIM en toda la particion /root (/raíz) lo dejamos como está. Si tenemos el /home separado en el SSD (no recomendable) habría que añadir /home a esa línea.

Ejemplo:

[Unit]
Description=Trim free cells on the SSD
After=local-fs.target

[Service]
ExecStart=/sbin/fstrim /home/yoyo
Type=oneshot

[Install]
WantedBy=multi-user.target

Lo siguiente es habilitar el servicio creado. Como root o con sudo.

sudo systemctl enable fstrim.service

Lo cual me arroja:

ln -s '/usr/lib/systemd/system/fstrim.service' '/etc/systemd/system/multi-user.target.wants/fstrim.service'

Reiniciamos el sistema y como root o con sudo comprobamos:

sudo systemctl status fstrim

En mi caso en KaOS (si les devuelve algo parecido está todo ok)

[yoyo@kaos ~]$ sudo systemctl status fstrim
Contraseña: 
 fstrim.service - Trim free cells on the SSD
   Loaded: loaded (/usr/lib/systemd/system/fstrim.service; enabled)
   Active: inactive (dead) since lun 2014-04-14 18:02:57 CEST; 1min 20s ago
  Process: 242 ExecStart=/sbin/fstrim / (code=exited, status=0/SUCCESS)
 Main PID: 242 (code=exited, status=0/SUCCESS)

abr 14 18:02:04 kaos systemd[1]: Starting Trim free cells on the SSD...
abr 14 18:02:57 kaos systemd[1]: Started Trim free cells on the SSD.

Igualmente nos daremos cuenta que cuando tenemos el sistema cargado la lucecita del disco duro permanece un poco más de tiempo encendida. Eso es que el SSD está “trimeado”

También, si colocamos lo siguiente en la terminal.

sudo fstrim -v /

Nos saldrá o bien “0” trimmed o los megas que tengamos “trimeados”.

[yoyo@kaos ~]$ sudo fstrim -v /
Contraseña: 
/: 347,5 MiB (804007936 bytes) trimmed

NOTA: Si usamos la opción de CRON o SYSTEMD por supuesto no debemos agregar discard en el fstab, aunque si podemos agregar noatime.

¿Conclusión?

Aquí ya entrarían los gustos de cada uno según nos hayamos informado o según preferencias y pruebas realizadas. Por supuesto, yo he explicado estas 3 opciones de forma básica como también un particionado básico, suficiente para un uso doméstico del PC con SSD.

Hay muchas más opciones, y más complejas, que se pueden encontrar en la red, como por ejemplo el activar TRIM en particiones encriptadas y LVM. Según mis experiencias con esto es suficiente para un usuario normal.

Mucha más información os dejo, y recomiendo que leáis, sobre este tema en los siguientes enlaces:

Mis opciones escogidas han sido: En KaOS y Manjaro estoy usando el método del Systemd, en Ubuntu 14.04 el método Cron + fstrim

Un último consejo, si pueden, háganse con un SSD. Como he dicho en otra ocasión, esto es otro mundo😛

Que la fuerza os acompañe😉

Mi agradecimiento especial para el amigo karlinux free por toda su información y consejos en este tema.

Un comentario en “Linux + SSD + EXT4 + TRIM

Los comentarios están cerrados.