Tutorial / febrero 26, 2014

Recomendaciones para el uso de un SSD en GNU/Linux

Hace poco instalé Debian en mi SSD y he estado configurando para dejar el sistema lo más estable y configurado que pueda. Para así, poder hacer una copia de seguridad con Clonezilla.

Los discos de estado sólido son increíblemente rápidos y están carentes de cualquier pieza mecánica móvil, lo que los hace silenciosos, soportan mucho mejor las vibraciones y los golpes y no se ven afectados (o casi) por problemas tales como la fragmentación del sistema de ficheros. Aunque evidentemente, hay que tener en cuenta una serie de consideraciones para sacarles el máximo partido y prolongar su vida útil tanto como sea posible.

Tamaños de las particiones

Las particiones deben ser de tamaño múltiplos exactos de 512MB. Además es muy recomendable crear una partición en un disco duro de toda la vida para almacenar los datos del /home. Así pues tener dos particiones como minimo, donde en una guardaremos el boot y el resto será /.

Pondremos /home en un disco duro de toda la vida porque unos de los inconvenientes que traen los discos duros sólidos es que pierden velocidad de escritura según se va llenando el disco. Este problema va mejorando con la salida de nuevos controladores que gestionan mejor el vaciado de datos, pero de momento sigue estando ahí. Esto es lo recomendado, si lo que quieres realmente es acceder a tus datos rápidamente haz lo que tengas que hacer.

Formatos de las particiones

Los formatos más recomendables son los siguientes:

  • ext4 (recomendado)
  • btrfs
  • f2fs
  • xfs
  • jfs

Todos estos formatos soportan TRIM. ¿Qué significa que soporte TRIM? Pues que permite que el sistema operativo informe a una unidad SSD sobre qué bloques de datos no están en uso y pueden ser borrados. Esto tiene especial importancia en el caso de los discos de estado sólido, pues las memorias flash de tipo NAND que componen los SSD no pueden sobrescribir datos existentes. Antes de escribir nuevos datos sobre los existentes, es necesario borrarlos primero. A este problema se suma el hecho de que la unidad mínima de borrado es un bloque, mientras que la unidad de escritura mínima es una página (un bloque son 64 páginas).

DtC2sBhEsto significa que conforme pasa el tiempo, el disco SSD se irá, en cierto modo, fragmentando internamente (no de la misma manera que los discos duros tradicionales) quedando páginas con bloques vacíos, lo que hará que en algún momento que aún cuando haya espacio libre en el SSD, no quedarán páginas vacías en las que escribir. Esto hará que disminuya el rendimiento debido a que para escribir datos nuevos habrá que reagrupar los bloques que están dispersos, copiándolos a una memoria intermedia, borrándolos y reuniéndolos todos de nuevo en una misma página.

Cuando se borra un archivo, lo que hace el sistema operativo es marcarlo como borrado dentro del sistema de archivos, pero no se lo comunica al disco de estado sólido. Es por eso que TRIM, que como ya hemos dicho se encarga de informar al disco de estado sólido qué está borrado, nos ayuda a evitar los problemas antes mencionados.

Configuración de TRIM

Primero comprobaremos si nuestros SSD tiene soporte para TRIM con el siguiente comando:

# hdparm -I /dev/sdX | grep TRIM

Donde X es la letra de tu SSD. La respuesta del comando será clara, si te muestra algo parecido como la siguiente imagen tienes soporte para TRIM, si no aparece nada no lo tienes.

TRIM2

Se puede configurar TRIM de tres maneras: manualmente, configurando el fstab y programando la ejecución de fstrim por cron o systemd.

Manualmente

Instalaremos el paquete fstrim:

# aptitude install fstrim

Ejecutamos el siguiente comando para activar TRIM:

# fstrim -v [PuntoDeMontaje]

En el Punto de Montaje deberemos indicar donde está montado nuestro SSD. Lo normal es que sea en / (Raíz o root).

Configurando /etc/fstab

Con la opción discard en el fichero fstab podemos configurar nuestro SSD para que use TRIM. Basta con añadir la opción como se muestra en el ejemplo de abajo:

/dev/sda / ext4 discard,errors=remount-ro 0 1

Programando la ejecución de fstrim

El método más afectivo es la ejecución programada de fstrim que nos permite disfrutar de los beneficios de éste sin apenas efectos en lo que a rendimiento se refiere.

Mediante cron

¿Una tarea programada? Solo me viene a la cabeza una cosa: cron. Crearemos el siguiente fichero /etc/cron.daily/trim para que la ejecución de fstrim se realice diariamente y escribiremos en él:

#!/bin/sh
fstrim -v /

Damos permisos de ejecución:

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

Mediante systemd

Si tu GNU/Linux usa systemd quizás te interesará hacerlo de la siguiente manera. Primero creamos un archivo en /lib/systemd/fstrim.service cuyo contenido será el siguiente:

[Unit]
Description=Trim free cells on the SSD
After=local-fs.target
[Service]
ExecStart=/sbin/fstrim /
Type=oneshot
[Install]
WantedBy=multi-user.target

Nota: Donde / será el punto de montaje de la raíz.

Habilitamos el servicio con systemctl

# systemctl start fstrim

Montaje de particiones

Otra cosa que tendremos en cuenta es el montaje de las particiones donde guardamos el sistema y el arranque. En el fichero de configuración /etc/fstab añadiremosla opción noatime para mejorar las prestaciones del disco.

# Partición con punto de montaje /
/dev/sda2 / ext4 noatime,discard,errors=remount-ro 0 1
# Partición con punto de montaje /boot
/dev/sda1 /boot ext4 noatime,discard,errors=remount-ro 0 2

El uso de las opciones noatime, nodiratime o relatime pueden mejorar las prestaciones del disco. De forma predeterminada, GNU/Linux mantiene un registro (lo escribe en el disco) de cada lectura efectuada atime. Esto es útil cuando se usa GNU/Linux para servidores, pero no tiene mucho valor cuando se usa para escritorio. El inconveniente de la opción predefinida atime es que incluso la lectura de un archivo desde la memoria caché (lectura desde la memoria, en lugar desde el disco directamente), aún en este caso, ¡resultará registrado! Usando la opción noatime deshabilita completamente la actualización del tiempo de acceso a los archivos cada vez que se lee un archivo. No añadiremos las dos opciones noatime y nodiratime, ya que noatime ya incluye nodiratime.

Directorios temporales

También montaremos los directorios temporales (/tmp, /var/run, /var/lock y /var/log) en la RAM para evitar escrituras en disco. Si tienes poca RAM, hasta es mejor tener una particion en un disco duro de toda la vida. Las montaremos con las opciones noatime,nodiratime,nodev y nosuid.

tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0
tmpfs /var/tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0

Configurar GRUB: Planificador de entrada/salida

En general, la gran mayoria de GNU/Linux usan CFQ para planificar la entrada/salida de los dispositivos. Sin embargo, para discos SSD existen otras opciones que resultan ventajosas:

  • noop (recomendado)
  • deadline

Si el SSD será el único medio de almacenamiento del equipo, configuraremos el GRUB para lo ajuste mediante la opción elevator que añadiremos en el fichero /etc/default/grub.

Buscaremos en el fichero algo como “GRUB_CMDLINE_LINUX=”” y lo dejaremos así:

GRUB_CMDLINE_LINUX="elevator=noop"

Guardamos los cambios y actualizamos el grub con este comando:

# update-grub

¿SWAP o no SWAP?

He leído en muchos artículos que el uso de la SWAP no se tiene que hacer en un disco duro por el tema de que estaríamos reduciendo su vida útil, aún así podemos configurar una SWAP (en el caso de que tengamos muy poca RAM) pero con unos matices:

  • Reducir el porcentaje de uso SWAP/RAMM al 1%
  • Disminuir valor de cache de bloques de datos de 100 a 50
  • Modificar la frecuencia de acceso al disco de 500 a 1500

Para ello modificaremos el siguiente fichero /etc/sysctl.conf y modificaremos o añadiremos estos valores:

vm.swappiness=1
vm.vfs_cache_pressure=50
vm.dirty_writeback_centisecs=1500

Reducir el número de chequeos en los sistemas de ficheros

Como sabemos, cada cierto número de veces que iniciamos el sistema se realiza de forma automática un chequeo de los sistemas de ficheros para asegurar que todo sigue como es debido.

Como lo que buscamos es limitar el uso del disco SSD, sería una buena idea hacer que estos chequeos ocurran menos a menudo modificando el intervalo de tiempo o el número de reinicios que transcurren entre uno y otro.

Mediante tune2fs podemos modificar este valor y también hacer otras muchas cosas, apuntando siempre a la partición sobre la que queremos actuar:

# tune2fs -c 80 /dev/sda1 (cada 80 reinicios)
# tune2fs -i 2m /dev/sda1 (cada 2 meses)
# tune2fs -i 2w /dev/sda3 (cada 2 semanas)
# tune2fs -i 2d /dev/sda1 (cada 2 dias)
# tune2fs -l /dev/sdb1 (ver registro completo de la partición)
# tune2fs -l /dev/sda3 | grep ‘Last checked’ (ver fecha del último escaneo)
# tune2fs -l /dev/sda3 | grep -i check (veces que se fuerza el chequeo)
# tune2fs -i 0 /dev/sda3 (desactivar chequeo)

Test de velocidad

Como curiosidad, con el comando hdparm -Tt /dev/sdX podemos hacer un test de velocidad de escritura, para que veáis una diferencia he realizado dos tests; uno en un SSD y otro en un disco duro de toda la vida. Este es el resultado:

/dev/sdb:
 Timing cached reads:   2070 MB in  2.00 seconds = 1034.96 MB/sec
 Timing buffered disk reads: 646 MB in  3.00 seconds = 215.11 MB/sec

/dev/sda:
Timing cached reads:   28842 MB in  2.00 seconds = 14435.64 MB/sec
Timing buffered disk reads: 1232 MB in  3.01 seconds = 409.76 MB/sec

Fuentes: Ubuntu-es, NoRender, WikiArchLinux, WikiDebian.


20 comentarios “Recomendaciones para el uso de un SSD en GNU/Linux”

20
Leave a Reply

avatar
500
0 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Recent comment authors
  Suscribirte  
más nuevos más viejos más votados
Notificarme

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.