SSD en Linux: 10+ Tips & Tweaks


Recientemente armé una nueva PC para trabajar (misma que corre Fedora Linux en sus entrañas) y dentro de mi selección de Hardware añadí un disco de estado sólido y/o SSD. Los SSD son solo eso, unidades de almacenamiento que manejan todo en estado sólido, sin partes mecánicas (imagínense algo así como una especie de USB interna) y pues son muy pero muy rápidos, resistentes a golpes/caídas y no tienden a calentarse.

Sin embargo, los SSD dentro de su propio mérito son dispositivos que necesitan una serie de tweaks para alcanzar su máximo potencial y tiempo de vida, no importando si estás en Windows, OS X y/o GNU/Linux. En este tutorial nos centraremos en cómo optimizar un SSD bajo sistemas Linux.

Lo básico

Lo primero que tienes que tener en cuenta es que los SSD (como cualquier medio de almacenamiento basado en memoria flash) al ser súper resistentes y duraderos tienen su "parte comercial" en el hecho de que tienen un límite de ciclos de escritura "hard-coded". Esto quiere decir que mientras MENOS datos escribas en tu SSD (o con menos frecuencia) más te va a durar. Obviamente es altamente improbable que un usuario básico vaya a alcanzar el límite de vida de un SSD en un tiempo corto, pero (si como yo) usas cuestiones como bases de datos, miles de lineas de logging, virtualización, swapping y otros factores similares, querrás pensártelo 2 veces antes de pasar toda tu información/setup a almacenamiento puramente basado en SSD's.

Seguro te estarás preguntando: ¿Qué pasa cuando se acaba la memoria flash de un SSD? Bien, pues lo que pasará es que este SSD ya no aceptará cambios en la data que contenga, esto quiere decir que no podrás guardar más data ni formatearlo exitosamente una vez te hayas acabado los ciclos de escritura propios del mismo.

Tips y Trucos

1) Actualizar BIOS

Busca en Google una actualización de tu BIOS, generalmente esta se aplica por medio de algo similar a un "LiveUSB" especial para dicho procedimiento, grabas una imagen en una USB, booteas el equipo desde dicho medio y "flasheas" la nueva versión en tu BIOS.

2) Actualizar Firmware SSD

Similar al proceso detallado para tu BIOS, pero esta vez específico al modelo de tu SSD. Cabe destacar que independientemente de que alguno de los 2 haya venido con algún tipo de medio físico con software compatible para Linux es mejor buscar las versiones más recientes de firmware en los sitios oficiales de los fabricantes y crear tus propios medios para flasheo a partir de éstas.

3) Activar modo AHCI en tu BIOS


Algunas motherboards traen por defecto habilitado el API IDE para trabajar con sus dispositivos de alamacenamiento (sobretodo aquellas que tienen este tipo de entrada/puerto para los discos duros IDE), pero recientemente la gran mayoría ha cambiado ya al API AHCI por defecto. Revisa desde un primer momento que en la BIOS de tu motherboard esta segunda opción sea la predeterminada para trabajar con el almacenamiento de tu equipo, esto te asegurará un margen de rendimiento bastante grande al momento de usar un SSD en cualquier S.O. vs la interfaz IDE.

3.1) Puerto SATA III y/o PCI-E


Asegúrate de conectar tu SSD vía alguno de éstos 2 para una mayor velocidad. La mayoría de motherboards actuales ya traen puertos SATA III por defecto para conectar su almacenamiento pero las que no, sin lugar a dudas traerán 1 o 2 puertos de expansión PCI-Express que puedes ocupar para conectar tu SSD mediante un adaptador especial. Cabe destacar que los puertos SATA III no son capaces de sacarle "todo el jugo" a los SSD por defecto en cuanto a velocidad se refiere, por lo que si de verdad necesitas el tope de velocidad, te vendría bien invertir en el adaptador PCI-E antes mencionado.

3.2) Alineación de particiones

Si tu SSD es nuevo, una excelente idea antes de instalarle algo es aplicarle alineación de particiones, algo que a la larga aumentará su tiempo de vida. Para hacer esto, basta con basar tu particionado en MiB/GiB al momento de instalar tu nueva distribución linux en el SSD vacío (Por ejemplo, si quieres "1GB" para "/boot" usarías 1024 MiB al definirla).

4) Ext4

Si vas a usar un SSD en algún sistema Linux, asegúrate de que la partición y/o particiones que vayas a escribir en éste tengan como sistema de archivos a Ext4 ya que este asegura mayor rendimiento y durabilidad a la larga aún en comparación con otras opciones como BTRFS y/o XFS.

4.1) ¡No defragmentes!

Los SSD como sistema de almacenamiento sufren poca o nula fragmentación sin importar el sistema de archivos bajo el que se encuentren operando y hacer defragmentación del mismo bajo cualquier caso tiene poco o nulo impacto positivo en el rendimiento del sistema, mientras que sí tiene un alto impacto negativo en el tiempo de vida de nuestro SSD, acortándolo gravemente. Evita todo aquello que tenga que ver con defragmentación al pasar de HDD a SSD tu sistema operativo.

5) Combo para directorios de alta escritura

Si hay algo que lastima la durabilidad de un SSD son los directorios de alta escritura, como varios de aquellos almacenados dentro de /var, /tmp y /home en los sistemas GNU/Linux. Si al momento de realizar tu instalación puedes mover específicamente estos 3 mountpoints junto con cualquier otro que vayas a ocupar para escribir muchos datos o pocos pero de manera constante como por ejemplo algún directorio para base de datos o archivos estáticos a un disco duro mecánico (HDD) entonces estarías aumentando la vida de tu SSD de manera considerable.

5.1) ¿Ramdisks? NO.

Cabe destacar que algunas personas allá afuera recomiendan (en caso de sólo contar con un SSD para tu almacenamiento sin un disco duro mecánico para hacer combo) mover todo o parte de los directorios anteriormente mencionados a la RAM en forma de un RAMDisk con la ayuda de tmpfs y/o ramfs... La realidad es que esto es inútil a menos que tengas muchísima RAM e incluso entonces es inútil puesto que vamos... Quien tiene 64GB de RAM (por sólo citar un ejemplo) es porque los necesita libres para lo que la RAM se ocupa, no para almacenar cosas. Un buen ejemplo sería tratar de meter en un ramdisk una imagen ISO de disco para grabar generada con, digamos K3B/Brasero y/o Xfburn: Si estoy generando un ISO de Windows 7 (por ejemplo), este ISO pesaría 4.7 GB aprox; El salvar el 10% de ésto a la RAM no va a hacer la diferencia al momento de querer ampliar la vida de tu SSD y de salvar TODO en dicho RamDisk, tendrías que contemplar que el total de RAM que te estarías gastando en datos almacenados serían esos 4.7GB más todo lo que se genere en archivos temporales de tu sesión, un total en MB/GB que se va a estar ocupando de preciosa memoria RAM misma que podrías utilizar mejor para tus máquinas virtuales, pestañas de chrome, renders de kdenlive o qué se yo... Es por esto que hacer/implementar ramdisks con tempfs y/o ramfs se me hace algo inútil y no lo cubriré aquí (además de que, al ser un medio de almacenamiento volátil, TODA La información guardada en un RAMDisk desaparecerá al reiniciar la PC); Esto no es un comportamiento particularmente práctico si planeas mover carpetas como /var/log por ejemplo.

Sin embargo, para los que sólo tienen almacenamiento SSD, existe una solución para reducir escrituras delegando carpetas a otro tipo de almacenamiento: La cosa es que en ese caso te sale mil veces mejor usar una memoria SD de 16-GB/64GB para mover únicamente /tmp y vaciarla únicamente de manera automática cada vez que se llene (alargando también su tiempo de vida), eso te aseguraría mantener la vida de tu SSD por un tiempo más prolongado a una fracción del costo (en dinero y recursos) que la implementación de un RAMDisk.

NOTA: Cabe destacar que Fedora desde su versión 18 mantiene /tmp en un RAMDisk de tmpfs por órdenes de lennart poettering, creador de systemd, pero este es un cambio reversible.

6) Habilitar TRIM

TRIM es un proceso mediante el cual el sistema operativo le "avisa" al controlador del SSD qué bloques de datos en el disco ya no están en uso, limpiándolos efectivamente. Este proceso lo que hace es permitir que nuestro SSD se mantenga rápido con el paso de los años y también nos da un tanto más de durabilidad. Para habilitar TRIM, lo primero que debes de saber es si tu SSD tiene esta capacidad. En cualquier distro Linux esto se logra con el comando:

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

Lo que nos deberá devolver algo similar a lo siguiente:

Data Set Management TRIM supported (limit 1 block)

Si este es tu caso, entonces podemos proseguir habilitando TRIM. Si te encuentras en En Fedora 21 o superior la manera más fácil de hacerlo es mediante Systemd con el comando:

sudo systemctl enable fstrim.service

Y si estás en otra distro, puedes añadir a tu rc.local la siguiente secuencia de comandos:

#Run "fstrim" at boot
LOG=/var/log/trim.log
fstrim -v / >>$LOG
echo "Time: $(date)" >>$LOG

Obviamente cualquiera de las dos opciones hará tu arranque un poco más lento, pero valdrá la pena por el bienestar de tu SSD. Otras opciones como habilitar TRIM vía fstab con la mountflag discard no se recomiendan porque bajarán el rendimiento de tu SSD en el trabajo diario.

7) noatime, nodiratime

Cuando estás trabajando con un SSD, el montar tus particiones con estas 2 mountflags puede hacer las cosas mucho más rápidas reduciendo al mismo tiempo escrituras, en resumen, así es como recomendamos establecer una partición Ext4 sobre de un SSD en /etc/fstab:



8) Preload

Si tienes más de 4GB de RAM, el instalar el paquete preload hará que tu sistema arranque sus aplicaciones todavía más rápido haciendo de tu setup SSD algo aún más sorprendente. Para instalar este paquete en Fedora por ejemplo haríamos en consola:

sudo dnf -y install preload

9) ¿Swap?

La swap es algo que hace alta escritura a tu sistema de almacenamiento. Por lo mismo, es otra partición que debe moverse a un disco duro mecánico (en caso de contar con un combo SSD + HDD en tu setup) o bien, reducir su uso si sólo se tiene un SSD. Esto se logra añadiendo las siguientes líneas a tu /etc/sysctl.conf:


10) Elevator Noop

Los sistemas linux por default no escriben la data "al momento" sino que la dejan "en cola" un momento para permitir un pequeño retraso que existe con los discos duros mecánicos reordenando las I/O requests por prioridad en lo que los cabezales se acomodan. Si tienes un SSD esto no tiene utilidad alguna y de desactivarlo (para tener I/O FIFO) tendrás mejor lectura/escritura pues se trata de una unidad de estado sólido sin partes móviles. Esto se habilita según el nombre de tu dispositivo (sdX) en tu rc.local:



Extra: Blocksize

Se recomienda usar un blocksize más alto de lo normal en un SSD para mayor durabilidad y confiabilidad... Este tweak de igual manera se habilita en tu rc.local según el mountpoint de tu dispositivo como notarás a coninuación: