X

Cómo activar TRIM de forma correcta en Linux: fstrim, LVM y dm-crypt

En pasados artículos vimos la utilidad de TRIM en las unidades de almacenamiento SSD. A continuación veremos como podemos activar TRIM de forma correcta en cualquier sistema operativo GNU-Linux.

REQUISITOS PARA PODER ACTIVAR TRIM

Para activar TRIM deberemos cumplir con las siguientes condiciones:

  1. El sistema operativo tiene que soportar TRIM. Todas los sistemas operativos a partir de Windows 7 y las distros linux con un kernel igual o posterior al 2.6.28 soportan TRIM.
  2. Disponer de una unidad SSD con un firmware que soporte TRIM. La totalidad de unidades SSD actuales tienen pleno soporte.
  3. El sistema de archivos de vuestro equipo tiene que ser btrfs, ext3, ext4 gfs2m jfs, vfat, f2fs, ntfs, ocfs2 o xfs.

Hoy en día prácticamente todos los equipos y sistemas operativos son aptos para usar TRIM.

Nota: Puede usarse el comando lsblk –discard para comprobar si nuestra unidad ssd soporta TRIM.

¿CÓMO ACTIVAR TRIM DE FORMA CORRECTA EN LINUX?

Existen dos modos de activar TRIM. Los modos son los siguientes:

  1. TRIM Continuo: En modo continuo ejecutará TRIM cada vez que borremos un archivo de nuestra unidad de almacenamiento.
  2. TRIM periódico: Se aplicará TRIM de forma periódica y automática en la fecha y hora que especifiquemos. Normalmente es suficiente ejecutar TRIM una vez por semana.

¿Hay que usar TRIM en modo continuo o en modo periódico?

En mi caso recomiendo activar TRIM de forma periódica. Activar TRIM en modo continuo genera los siguientes inconvenientes:

  1. Reducción de la vida útil de la unidad de almacenamiento. TRIM en modo continuo implica lecturas y escrituras adicionales a nuestra unidad de almacenamiento.
  2. Rendimiento inferior al esperado. En determinados casos se pueden producir congelaciones y corrupción del sistema de archivos. Por ejemplo, en mi caso de forma aleatoria se me congela Chrome durante segundos.
  3. Imposibilidad de recuperar archivos borrados. Si borramos un fichero por equivocación nos será prácticamente imposible recuperarlo.

Por lo tanto, en este artículo aprenderemos a configurar y activar TRIM para que únicamente se ejecute de forma periódica.

Al usar TRIM en modo periódico únicamente recomiendo no andar justos de capacidad de almacenamiento en nuestro SSD.

Desactivar el TRIM continuo en el caso que esté habilitado

Grandes distribuciones como por ejemplo Ubuntu, Manjaro y Debian habilitan TRIM continuo por defecto. Para desactivar el TRIM continuo abran una terminal y ejecuten el siguiente comando:

sudo nano /etc/fstab

Cuando se abra el editor de textos comprueben si las entradas del fichero fstab contienen el término discard. En mi caso las entradas son las siguientes:

# <file system>                                                       <mount point> <type> <options>                     <dump> <pass>
UUID=d4fbbf2b-9fec-45f1-a91f-1eb0970558dd    /boot               ext4      defaults,noatime,discard  0            2
UUID=bb5e07f9-4b5c-4a18-ad20-0dd94fa5369f   /                      ext4      defaults,noatime,discard  0            1
UUID=864d1126-2867-4902-8f4d-5974a43e1279 /home             ext4      defaults,noatime,discard  0            2
UUID=82d8bd4f-4700-421d-a421-049b4664bf7a  swap              swap     defaults,noatime,discard  0            2
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
UUID=8626904F269041DB /media/DATOS ntfs-3g default_permissions,uid=1000 0 0

Tal y como pueden ver aparece el término discard. Por lo tanto tengo TRIM continuo habilitado. Para deshabilitarlo tan solo hay que borrar el término discard de cada una de las entradas. Por lo tanto las entradas de fstab tienen que ser las siguientes:

# <file system>                                                        <mount point> <type> <options>              <dump> <pass>
UUID=d4fbbf2b-9fec-45f1-a91f-1eb0970558dd     /boot                ext4      defaults,noatime    0            2
UUID=bb5e07f9-4b5c-4a18-ad20-0dd94fa5369f    /                       ext4      defaults,noatime    0            1
UUID=864d1126-2867-4902-8f4d-5974a43e1279  /home              ext4      defaults,noatime    0            2
UUID=82d8bd4f-4700-421d-a421-049b4664bf7a   swap               swap     defaults,noatime    0            2
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
UUID=8626904F269041DB /media/DATOS ntfs-3g default_permissions,uid=1000 0 0
Nota: Es importante que la opción noatime (no last access time) 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.

Una vez modificado el contenido del fichero fstab guardamos los cambios, cerramos el fichero y reiniciamos nuestro equipo. De este modo, TRIM ya no se aplicará de forma continua.

Activar TRIM periódico en Linux usando systemd

Para poder usar fstrim tenemos que asegurar que el paquete util-linux esté instalado. Para ello ejecutamos el siguiente comando en la terminal:

sudo apt install util-linux
Nota: En el caso que no usen el gestor de paquete apt deberán modificar el comando que acabamos de ejecutar.

En el caso que sean usuarios de Debian 8 y 9 ejecuten el siguiente comando para crear los servicios de Systemd:

sudo cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system

A continuación, todos los usuarios de cualquier distro deberán ejecutar el siguiente comando para habilitar TRIM:

sudo systemctl enable fstrim.timer

Acto seguido ejecutaremos el siguiente comando para iniciar el servicio:

sudo systemctl start fstrim.timer

En estos momento el soporte TRIM debería estar habilitado. Para comprobar que está habilitado tan solo tenemos que ejecutar el siguiente comando:

sudo systemctl status fstrim.timer

El resultado obtenido en mi caso es el siguiente:

● fstrim.timer - Discard unused blocks once a week
Loaded: loaded (/lib/systemd/system/fstrim.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2019-02-22 19:47:05 CET; 22min ago
Trigger: Mon 2019-02-25 00:00:00 CET; 2 days left
Docs: man:fstrim

Si analizamos la salida del comando vemos la palabras active y waiting. Por lo tanto TRIM está habilitado. Otra información que podremos encontrar es la siguiente:

  1. Se ejecutará TRIM una vez por semana en todas las particiones montadas de nuestra unidad de almacenamiento SSD.
  2. Se aplicará todos los Lunes a las 00:00 horas.
  3. La hora en que se ha levantado el servicio fstrim.
Nota: La gran mayoría de distribuciones Linux actuales utilizan systemd.
Nota: Si aplicamos TRIM de forma periódica es recomendable no andar justos de espacio de almacenamiento.

Forzar la ejecución de TRIM

Si durante 2 o 3 días se han escrito o borrado una gran cantidad de datos en el SSD puede ser conveniente forzar un TRIM antes de la fecha programada. Para ello tan solo tenemos que abrir una terminal y ejecutaremos el siguiente comando:

sudo systemctl enable fstrim.timer --now

Si lo prefieren también pueden ejecutar el siguiente comando:

sudo fstrim -v -a

El ejecutar estos comandos se aplicará TRIM a la totalidad de sistemas de ficheros que tengamos montados.

Sí únicamente queremos aplicar TRIM en una de las particiones que tengamos montadas podemos ejecutar un comando del siguiente tipo:

sudo fstrim -v partición_en_la_que_queremos_aplicar_trim

Por lo tanto en función de la partición que queramos aplicar TRIM ejecutaremos los siguientes comandos:

ParticiónComando
rootsudo fstrim -v /
homesudo fstrim -v /home
bootsudo fstrim -v /boot

De este modo se iniciará el proceso para que la controladora de nuestra unidad SSD conozca la totalidad de bloques de la unidad de almacenamiento que pueden ser borrados.

Nota: Forzar la ejecución de TRIM con la opción -v permite comprobar que no hayan errores durante el proceso.

Activar TRIM en volúmenes LVM

Para activar TRIM en volúmenes LVM deberemos ejecutar el siguiente comando en la terminal:

sudo nano /etc/lvm/lvm.conf

Cuando se abra el editor de textos cambiaremos el valor issue_discards de 0 a 1. De tal forma que quede del siguiente modo:

# [...]
devices {
   # [...]
   issue_discards = 1
   # [...]
}
# [...]

Una vez aplicados los cambios los guardamos y reiniciamos el ordenador.

Activar TRIM en particiones cifradas con dm-crypt

Para habilitar TRIM en particiones cifradas realizaremos lo siguiente. Abriremos una terminal y ejecutaremos el siguiente comando:

sudo nano /etc/crypttab

Cuando se abra el editor de textos añadiremos la opción discard en el apartado <options>.

<target name>   <source device> <key file>  <options>
sda3_crypt         /dev/sda3             none          luks,discard

Una vez realizadas las modificaciones guardamos los cambios y cerramos el fichero.

Finalmente actualizaremos la configuración de arranque del sistema ejecutando el siguiente comando en la terminal:

sudo update-initramfs -u -k all
Nota: Activar TRIM en particiones cifradas tiene implicaciones de seguridad.

Ver la periodicidad con que se ejecuta TRIM

Para ver la periodicidad con que se ejecutará TRIM tan solo tenemos que ejecutar el siguiente comando en la terminal:

cat /etc/systemd/system/timers.target.wants/fstrim.timer

En mi caso el resultado obtenido es el siguiente:

[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim

[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target

Analizando la salida del comando podemos observar lo siguiente:

  1. TRIM se ejecuta una vez a la semana. La frecuencia es más que correcta y no recomiendo que se modifique. Si quisierais cambiar la frecuencia tan solo tendríamos que reemplazar weekly por otro valor como por ejemplo Mon,Tue *-*-01..04 12:00:00. Está ejemplo ejecutaría TRIM los 4 primeros días del mes siempre y cuando sean Lunes o Martes a las 12 del mediodía.
  2. La precisión temporal con que se ejecutará la tarea TRIM será de ± 1 hora.
  3. El valor de persistencia está fijado en True. De este modo, aunque el ordenador no esté abierto a la hora que se tiene que ejecutar, TRIM se ejecutará al abrirlo.
Nota: Para ver la totalidad de valores que podemos introducir en el fichero de configuración podemos ejecutar el comando man systemd.timer.

Comprobar la última vez que se ejecuto TRIM

Para comprobar la última vez que se aplico TRIM ejecutamos el siguiente comando en la terminal:

systemctl list-timers fstrim.timer --all

El resultado obtenido en mi caso es el siguiente:

NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2019-02-18 00:00:00 CET 1 day 13h left Mon 2019-02-11 08:39:42 CET 5 days ago fstrim.timer fstrim.service

Si analizamos la salida del comando vemos lo siguiente:

  1. Trim se ejecutará el próximo Lunes a las 00:00 horas.
  2. Falta 1 día y 13 ahora para que se ejecute Trim.
  3. La última vez en que se ejecuto fue el pasado Lunes a la 08:39:42h. No se ejecuto a las 00:00 porque en este momento el ordenador estaba apagado. Por lo tanto cuando TRIM se ejecuto cuando abrí el ordenador

Consultar los logs de TRIM

Si queremos consultar los logs de TRIM podemos ejecutar el siguiente comando en la terminal:

sudo journalctl -u fstrim.timer

Cada vez que reiniciemos el ordenador o servidor se borrará el log de fstrim.timer. Si queréis que el log sea persistente tendréis que realizar lo siguiente.

Inicialmente crearemos la carpeta que almacenará los logs ejecutando el siguiente comando en la terminal:

sudo -p mkdir /var/log/journal

Acto seguido indicamos que los logs del espacio volátil /run/log/journal/ se almacenen en /var/log/journal ejecutando el siguiente comando:

sudo systemd-tmpfiles --create --prefix /var/log/journal

Finalmente reiniciamos el servicio systemd-journald ejecutando el siguiente comando:

sudo systemctl restart systemd-journald
Nota: Aplicando la persistencia de logs implicará que estaremos duplicando logs.
FUENTES

https://wiki.debian.org/SSDOptimization

https://wiki.archlinux.org/index.php/Solid_state_drive

Categorías: Linux
Etiquetas: Disco DuroTRIM

Ver los comentarios (21)

  • Uso Debian 9.8 y tengo instalado el paquete util-linux, pero ninguno de los comandos siguientes funciona (systemctl enable fstrim.timer, systemctl start fstrim.timer, systemctl status fstrim.timer). El resultado en los dos primeros es Failed to enable unit: File fstrim.timer: No such file or directory y en el tercero es Unit fstrim.timer could not be found. Por supuesto, los ejecuto como administrador.

    No se me ocurre cuál puede ser la causa.

    • ¿Estás seguro que tienes Debian 9? ¿Quizás tienes Debian 8? No obstante prueba ejecutando el siguiente comando:

      sudo cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system

      Acto seguido sigue las instrucciones del artículo. Ya me dirás si esto soluciona el problema. En Debian Testing no se necesario, y diria que en Debian 9.8 tampoco. Ya comentarás si el problema es este.

      Saludos

      • Correcto. Ahora sí :-)

        Lo único que no me aparece es la línea:

        "Trigger: Mon 2019-02-25 00:00:00 CET; 2 days left" en la salida de "systemctl status fstrim.timer" y no puedo saber qué día ni a qué hora se aplica TRIM; pero bueno, al menos ya funciona.

        Muchas gracias.

        • Si quieres saber la periodicidad la verás con los otros comandos que hay a lo largo del artículo. Además en este caso es posible que no te muestre el mensaje porque nunca se ha iniciado el servicio de Systemd para ejecutar fstrim.

          Saludos

  • genial...

    Yo lo voy a usar en deepin os. Supongo que debo hacer tal como lo indicas ya que es una distro basado en debian?

    Sldos

    • Hola

      Ni idea con Deepin. Yo uso Debian testing y no es necesario. Nunca he usado Deepin. Intenta ejecutar el comando específico de Debian y en el caso que no copie nada de una ubicación a otra entonces es que no es necesario.

      Por normal general en la mayoría de distros traen el servicio fstrimer en la ubicación que toca.

  • ¿Es posible el modo periódico sin SystemD? Estaba pensando en instalar MXLinux sin SystemD esta tarde..

    Gracias por tus artículos

    • Sí, es possible. Lo puedes hacer con Cron. Seria algo parecido a lo siguiente:

      sudo nano /etc/cron.weekly/trim

      Cuando se abra el editor de textos pegas lo siguiente:

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

      Finalmente das los permisos de ejecución con el siguiente comando:

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

  • Muchas gracias! Qué bien explicado.

    Al ver tu anuncio hace unos días sobre este tema me puse a activarlo por mi cuenta (en archlinux) y a documentarlo en un artículo para el blog... pero el tuyo es mucho más completo y mejor explicado. Gracias!

  • Estupendo tutorial Joan Carles y mi más sincero agradecimiento. Sólo quería hacerte una pregunta sobre una duda que tengo.

    Una vez activado el TRIM periódico ¿cómo sabe sobre que unidades debe aplicarlo? ya que yo tengo un SSD y un HDD en el mismo equipo y no he visto ninguna opción para definirlo. Gracias de nuevo.

    • Hola

      El servicio de Systemd que activas ejecuta el siguiente comando:

      /sbin/fstrim -Av

      Por lo tanto se ejecuta TRIM a todos los sistemas de archivos que se montan a través de fstab. En el caso que tengas un HDD no te preocupes porque fstrim nunca aplica TRIM a un HDD. Si quieres modificar el comportamiento modifica el contenido del archivo /usr/lib/systemd/system/fstrim.service. Todas las opciones disponibles están en la página man de fstrim.

      Saludos

  • Interesante y completo,gracias.

    Aún no uso un ssd pero pensaba que no había que hacerle retoques a trim a estas alturas.

    • Hola buenas

      Si quieres no hace falta hacer retoques, pero si lo crees oportuno puedes modificar la configuración estándar.

      La diferencia entre un HDD y un SSD es brutal. A la minima que puedas es bueno que hagas el cambio.

      Saludos

  • Hola, primero te felicito por el blog, das muy buenas explicaciones.

    En cuanto al tema, me queda una duda. Paso a comentarte que instale Arch en un SSD, hice dos particiones, una para boot y otra para root, a la root la encripte con luks2 pero sin LVM (ya que no pienso andar tocando las particiones mas adelante).

    Mi duda es si tengo que activar la opción discard en la cryptab para que el fstrim pueda ejecutarse periódicamente, ya que como leí tanto en la wiki de Arch como aquí en tu post, la opción discard activa el TRIM continuo (supongo que vale tanto para fstab como para cryptab) y no quiero eso.

    En definitiva... ¿Puede fstrim ejecutarse periódicamente en particiones encriptadas sin la opción discard activada en la cryptab? Imagino que si ya que una vez iniciado el sistema la partición root ya esta montada (lógicamente) y si fstrim actúa sobre las particiones montadas pues entonces actuara sobre root sea encriptada o no. Pero bueno, te pregunto de todas formas ya que no termino de entenderlo.

    • Hola Joaquin

      fstrim sin discard debería efectuar la operación. No obstante es fácil saberlo. Ejecuta fstrim con la opción verbose y verás si te defragmenta todas las particiones.

      Saludos

  • Hola Joan Carles.

    Como siempre un muy buen artículo.

    Como estamos hablando de optimizar y cuidar los SSD, nada mal vendría algún articulo sobre algo que he estado leyendo por la Web, acerca de evitar las escrituras en el SSD de /tmp y /var, muchos sugieren moverlo a otro disco si esta disponible y en el caso de /tmp a Ram si hay suficiente.

    Mucho he leído pero todavía tengo algunas dudas, hay opiniones encontradas.

    Gracias por tus artículos.

  • Hola que tal, al leer el articulo me intereso mucho activar la opción, lamentablemente me encontré con un error desde el primer paso, el cual es: Desactivar el Trim de forma continua.

    En el momento de escribir el comando "sudo nano /etc/fstab", me salta este error en la terminal:

    UUID=771d1e5f-1c93-44cb-a4b7-f3ae30308173 / ext4 errors=remount-ro 0 1.

    Lamentablemente soy nuevo en este Linux/ubuntu y desconozco si es un problema grave y/o como solucionar dicho error. De ante mano le agradezco si podría brindarme su ayuda.

    • Hola

      Lo que muestras no es un error. Lo que muestras es un punto de montaje y no veo nada anormal, así que no se como ayudarte.

      Saludos

  • Joan Carles, muchas gracias por el artículo, realmente claro,objetivo y principalmente útil..

Artículos Relacionados