Configurando SSD + TRIM en Linux (vía fstab, Cron + fstrim y Systemd)

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

Actualización: Para mayor comodidad y que no se pierda en el tiempo, acabo de dejar el artículo en una página estática del blog. Pueden verlo también en Linux + SSD + TRIM

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-xxxxxxxxxxxx /media/datos ext4 defaults 0 0
UUID=xxxxxxxx-09f1-4c97-8aa7-xxxxxxxxxxxx / 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.

Anuncios

29 comentarios en “Configurando SSD + TRIM en Linux (vía fstab, Cron + fstrim y Systemd)

  1. Buenas 🙂
    Tengo una duda.
    Si usamos el metodo cron el disco ssd se “trimea” cada día, pero con el método fstab / systemd esto sucede cuando el sistema arranca. En este caso si no reiniciamos el equipo durante mucho tiempo a lo mejor no trimeamos los ssd en semanas o meses.

    Me gusta

    • Claro que sí compatriota, esperemos que sea pronto. Averiguando en la página de Kingston, podemos encontrar ssd en Hiraoka – Lima. Ya estoy juntando pa’ comprarme uno cuando viaje para allá.
      .Saludos. Gracias por la info Yoyo!
      Muy buena página, sobretodo porque son experiencias propias.

      Me gusta

    • Con el trim lo que logras es reducir el numero de escrituras, que es lo que acorta la vida útil del ssd, ademas de mantener la velocidad del ssd.

      Me gusta

  2. Mi experiencia. Monto todo como “noatime”, a las particiones del ssd les añado el “discard”, dejo /var junto con mis datos /media/datos en un disco mecánico, /home la monto en el ssd y luego (por comodidad) monto en forma “bind” los directorios de /media/datos en mi /home, tal que así:
    /media/datos/rove/proyectos/ /home/rove/proyectos/ none bind 0 0

    ¿Y por qué?, los datos de configuración del home de usuario es interesante cargarlos rápidos.

    El noatime evita que se guarde la fecha del último acceso, quizás en alguna ocasión sea necesario pero en un entorno escritorio aún no la he encontrado; creo recordar que mutt sí la usa.

    Probaré a “trimear” desde cron, a ver qué tal.

    Firma un recién descubridor de KaOS y del blog de yoyo 🙂

    Me gusta

  3. Saludos, Yoyo.

    Te he leído muchas veces e, incluso, he puesto en práctica algunos de tus consejos, pero nunca te había comentado, así que hoy me estreno por aquí.

    En realidad lo que aquí traigo es una consulta. Actualmente mi sistema principal es Ubuntu 12.04 junto a un Windows 7 del que no puedo desprenderme a causa de algún que otro juego (Steam mediante). Ambos sistemas están instalados en un SSD Samsung 840 PRO y van de lujo. En Ubuntu 12.04 estoy usando un CRON+fstrim que se ejecuta diariamente.

    Me estoy planteando actualizar a la 14.04 en breve y leo en tu artículo que, en teoría, Ubuntu 14.04 configura fstab, con lo cual deduzco que habilitaría la opción discard. Es correcto?

    Si esto es así, entiendo que en el caso de que mi intención fuese (y probablemente lo será) seguir usando CRON+fstrim como hasta ahora, antes debería eliminar la opción discard del fstab. Es correcto?

    Muchas gracias.

    Me gusta

    • @Sr. Paquito

      Ubuntu 14.04 configura automáticamente el fstab para habilitar TRIM en SSD pero solo en SSDs marcas Intel y Samsung, si no tienes de esas marcas no lo configura y tendrás que hacerlo a mano tal y como lo vienes haciendo. Si te va bien con CRON+fstrim pues sigue con ese método 😉

      En efecto, si usas CRON+fstrim debes dejar tu fstab normal y no activar discard desde ahí.

      Un saludo

      Me gusta

      • El disco es un Samsung 840 PRO, con lo cual entiendo que Ubuntu 14.04 lo configuraría por defecto con discard, como comentas.

        Siendo así, para hacer el CRON+fstrim tendré que elimar antes la opción “discard” del fstab. Eso, o dejarlo por defecto con discard y listo, que también podría ser.

        Saludos y gracias.

        Me gusta

      • @Sr. Paquito

        Si te parece bien, una vez que instales Ubuntu 14.04 en tu SSD Samsung, me gustaría que postearas por aquí como te deja el fstab, para así poder tomarlo de referencia y compararlo con el artículo.

        Me gusta

  4. Saludos de nuevo, Yoyo.

    Por supuesto, no hay problema en postear. Lo que no sé aún es cuando instalaré la nueva versión; cuando decía “en breve”, no quería decir que vaya a ser inmediato, más bien pensaba esperar hasta la primera actualización gorda, que siempre asienta la versión, pero ya te digo que aún no lo tengo claro. En cualquier caso, salvo olvido, por supuesto que os lo cuento, entre otras cosas, porque no he encontrado en internet referencias directas sobre una instalación en un SSD de los supuestamente soportados.

    Lo veremos, pues. Saludos.

    Me gusta

    • Saludos, Yoyo.

      El Señor Paquito al habla.

      Sé que tienes el blog cerrado por reformas, pero lo prometido es deuda, así que te cuento que ya estoy funcionando en mi máquina principal con Ubuntu 14.04. No pensaba cambiar tan pronto, pero me cargué algo en los drivers gráficos en mi 12.04 y no sabía como repararlo. Así que pensé que era un buen momento.

      Dicho lo cual, por lo que se ve, al menos con los Samsung, lo que hace Ubuntu 14.04 es un fstrim semanal. Además, encontré algo sobre el tema en Ask Ubuntu: http://askubuntu.com/questions/443761/how-is-trim-enabled

      Si lo lees, cuando reactives el blog, cosa que espero que hagas a no mucho tardar, puedes actualizarlo con esto.

      Salud.

      Me gusta

  5. ¡Muy buenas a tod@s! Aunque lector habitual no suelo escribir, pero en este caso es obligación agradecer tan detallada y excelsa explicación, genial Yoyo, muy útil para un SSD recién instalado en el portátil de un familiar con Debian Jessie 8.1 con Gnome… Aún siguiendo finalmente el paso 2º recomendado (activar TRIM vía CRON y FSTRIM), me queda la duda siendo Debian una distro systemd “ahora” si no habría sido mejor el paso 3º (activar TRIM vía SYSTEMD), ¿qué sería más adecuado entonces para Debian Jessie 8.1 Gnome?
    Saludos.

    Me gusta

    • @Sergio

      EN los tiempos de esta guía Debian aún no tenía systemd, eso ha cambiado ahora, han incluido systemd en la 8.1 Jessie, así que el método más recomendado sería el de activar TRIM vía SYSTEMD, pienso.

      Un saludo

      Me gusta

      • Entendido, ¡muchas gracias Yoyo! Anulado el paso 2º anterior entonces, aunque estoy un poco confundido a la hora de configurar el paso 3º que está resultando problemático pues hay tres particiones en el SSD (/boot, /, y /home) aunque no sea lo recomendado habitualmente, habiendo dejado para el HDD los archivos (/home/datos)… Si no es abusar de tu amabilidad, podrías aconsejarme cómo añadir esas tres particiones del SSD a la misma línea del archivo fstrim.service, ¿debería separarlas por comas así “/boot, /, /home” o debería usar líneas diferentes para cada una de ellas?
        Un saludo.

        Me gusta

      • Hola, pues ahí me pìllas ya que las distros que suelo instalar en mi SSD ya hacen lo de TRIM por su cuenta

        He estado mirando por google lo que preguntas y no sabría decirte con exactitud, casi todas mis búsquedas me han llevado a en Ubuntu, Debian y derivadas, activar mejor TRIM vía CRON Y FSTRIM (opción 2), así que para andar sobre seguro mejor te recomiendo esa opción, que igualmente puede usarse aunque la distro use systemd.

        Un saludo

        Me gusta

  6. Bien, creo que tienes razón y es mejor volver al paso 2º recomendado y conocido que funciona correctamente (activar TRIM vía CRON y FSTRIM), todo lo que encuentro en mis búsquedas sobre ello es antiguo y no responde a mis dudas acerca de tener varias particiones conjuntas en el SSD + systemd + trim, por eso te preguntaba. Lo dejaremos así, que ya sabemos por las pruebas realizadas que realiza su trabajo. ¡Muchas gracias por todo, Yoyo, cualquier cosa que consiga averiguar lo anotaré aquí para que sea de utilidad a otros!

    Un saludo.

    Me gusta

  7. soy lector frecuente de tu blog y es aqui donde descubri manjaro mi
    sistema operativo desde mucho tiempo.
    Hace algun tiempo tengo un ssd y active trim via systemd.despues de colocar
    “sudo fstrim -v / ” la terminal me dice ” /: 0 B (0 bytes) recortado”.
    Y no se si esto significa que trim esta funcionando.
    saludos

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s