Icono de unidad de almacenamiento SSD

Optimizar unidad SSD en Linux Debian

publicado en: Hardware, Linux, Sist. Operativos, SSD | 0
 
 

Índice General

  1. Introducción
  2. Conceptos básicos sobre las unidades SSD
  3. Pasos a seguir para la optimización
  4. Reiniciar el sistema

Enlaces externos
 

  1. Introducción (Volver al índice General)
    Con este artículo optimizaremos el uso de nuestra unidad SSD con la intención de sacarle mayor partido, lograr que vaya mas rápido (tiempos de arranque, transferencia de datos, escritura y lectura de datos) y prolongar la vida de nuestro SSD.

    En realidad lo que haremos será optimizar el sistema de ficheros y la gestión de los mismos.
    Los consejos que daremos en este artículo serán para unidades SSD que no están acelerados con un sistema Intel Optane.

    NOTA: Los sistemas Intel Optane consisten en una memoria intermedia que se instala en el equipo entre el SSD o HDD principal y la memoria principal. Esto permite cargar, en esta memoria intermedia, los datos necesarios accediéndose a ellos de una forma mucho más rápida.

  2. NOTA: Antes que nada, es aconsejable hacer una copia de seguridad del archivo /etc/fstab. Para hacerlo podemos utilizar el siguiente comando:

    $ sudo cp /etc/fstab /etc/fstab.bak

    Si algo va mal, tan solo tendremos que borrar el archivo /etc/fstab modificado con el siguiente comando:

    $ sudo rm /etc/fstab

    y renombrar /etc/fstab.bak con el siguiente comando:

    $ sudo mv /etc/fstab.bak /etc/fstab

     

  3. Conceptos básicos sobre las unidades SSD (Volver al índice General)
    SSD es la nueva generación de unidades de almacenamiento para ordenadores. Es el acrónimo del ingles Solid State Drive equivalente en español a Unidad de estado solido.

    Las principales ventajas de una Unidad de estado solido con respecto a las de un disco duro convencional, son básicamente en que su funcionamiento no se basa en el uso de elementos mecánicos en constante movimiento. Esto se traduce en una alta velocidad de lectura y mayor resistencia a golpes o vibraciones. Esta diferencia se aprecia notablemente en el inicio del sistema y en la ejecución de programas que requieren gran capacidad de procesamiento.

  4.  

  5. Pasos a seguir para la optimización (Volver al índice General)
    En nuestro ejemplo, trabajaremos sobre una unidad SSD (/etc/dev/sda) montada en un sistema con Debian 9 Stretch y el archivo /etc/fstab. Antes de los cambios que vamos a realizar, nuestro archivo /etc/fstab.bak estaba configurado de la siguiente forma:

    # /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>  <type>  <options>		<dump	<pass>
    # swap was on /dev/sda1 during installation
    UUID=2ea555d4-2408-4dcc-abfb-3502f4555f6d none    swap    sw			0	0
    #
    # / was on /dev/sda2 during installation
    UUID=cf12cac1-b86f-4de6-b9b6-83e99428568c /       ext4    errors=remount-ro	0       1
    #
    # /var was on /dev/sda3 during installation
    UUID=a32dfad9-6a08-4484-85e7-8013d7298399 /var    ext4    defaults		0       2
    #
    # CD/DVD
    /dev/sr0			/media/cdrom0   udf,iso9660 user,noauto		0       0</dump></options></type></mount></file>

    • Optimizar la lectura y escritura de datos (Volver al índice General)
      En este paso, tendremos que editar el archivo /etc/fstab (no olvidar hacer copia de seguridad). Para hacerlo, podemos utilizar el siguiente comando:

      $ sudo nano /etc/fstab

      NOTA: Si nuestro sistema operativo no admite alguno de los parámetros, puede provocar que nuestro sistema no arranque. Por lo tanto, si realizas las siguientes modificaciones, hazlas solo si sabes recuperar una partición desde un Live USB o Live CD y restaurar archivos de backup.

      Los parámetros que utilizaremos son los siguientes:

      • noatime: Deshabilita por completo el registro de tiempo de acceso para cualquier archivo. Implica la aplicación de nodiratime. Teniendo en cuanta que además se anota el acceso a los ficheros cacheados y el acceso constante a todos los ficheros de procesos del sistema, es un número muy importante de escrituras de fechas de acceso. Al reducir la cantidad de escrituras que el sistema operativo realiza sobre el disco, incrementamos la vida de la unidad SSD.
      • nodiratime: Deshabilita el registro de tiempos de acceso para los directorios, pero mantiene activo el registro para los archivos.
      • relatime: Limita el registro de timestamps únicamente a aquellos casos en que el archivo se modifica.
      • De las tres opciones anteriores, la opción menos invasiva es claramente relatime, que ya de por sí ofrecerá alguna ganancia en el rendimiento de nuestros discos duros, sobre todo mecánicos. La opción que más rendimiento ofrece es noatime.

      • defaults: Asigna las opciones de montaje predeterminadas que serán utilizadas para el sistema de archivos. Las opciones predeterminadas para ext4 son: rw, suid, dev, exec, auto, nouser, async.
      • discard: Recomendado para sistemas de ficheros ubicados en unidades SSD. (ver siguiente punto)
      • nodelalloc: Desactiva la función de ext4 de delayed allocation, que reserva el espacio pero no lo escribe. Aplaza la escritura de bloques hasta que se esté en el tiempo de escritura. Es más que nada por seguridad.
      • barrier=0: Desactiva las barreras automáticamente. Se refiere a los límites de escritura. Si es igual a cero los elimina, si es igual a 1, los activa. Podemos prescindir de estas barreras si los discos están protegidos contra cortes de corriente. Sólo en este caso, incluimos la opción barrier=0
      • i_version: Habilita el uso de la versión extendida de 64 bits en sistemas de ficheros ext4.
      • commit=30: Retrasa la escritura de los metadatos de ficheros, con lo que se reduce mucho el uso de disco. No recomendable si estuviésemos en un ordenador con batería.
      • inode_readahead_blks=64: Aumenta de 32 a 64 el tamaño de los bloques de lectura.
      • data=writeback: Evita que los metadatos de los archivos sean escritos de forma lenta tras escribir los archivos. Esta opción no provoca corrupción en el sistema de archivos, pero puede provocar que los cambios mas recientes se pierdan si cae el sistema. No lo incluiremos en nuestros ejemplos ya que no funciona en algunos sistemas.

      NOTA: Las opciones deberán añadirse separadas por comas (,) y no por espacios.

      A continuación mostramos como quedaría nuestro archivo de ejemplo /etc/fstab tras aplicar algunos los cambios anteriores:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      # /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>  <type>  <options>		<dump	<pass>
      # swap was on /dev/sda1 during installation
      UUID=2ea555d4-2408-4dcc-abfb-3502f4555f6d none    swap    sw			0	0
      #
      # / was on /dev/sda2 during installation
      UUID=cf12cac1-b86f-4de6-b9b6-83e99428568c /       ext4    noatime,discard,nodelalloc,barrier=0,i_version,commit=30,inode_readahead_blks=64,errors=remount-ro	0       1#
      # /var was on /dev/sda3 during installation
      UUID=a32dfad9-6a08-4484-85e7-8013d7298399 /var    ext4    defaults,noatime,discard,nodelalloc,barrier=0,i_version,commit=30,inode_readahead_blks=64		0       2#
      # CD/DVD
      /dev/sr0			/media/cdrom0   udf,iso9660 user,noauto		0       0</dump></options></type></mount></file>
    •  

       
       

    • Activar TRIM (Volver al índice General)
      Cuando borramos un fichero, el sistema operativo lo marca como espacio utilizable. El comando fstrim puede solicitar a la controladora que analice el disco encargándose de controlar dichos bloques de espacio utilizable y reagruparlos, consiguiendo así que la gestión del espacio sea más rápida.
      Con la activación de TRIM se consigue ayudar a la gestión del rendimiento del disco a largo plazo. No es una mejora de rendimiento que se note al instante de la modificación, pero a largo plazo logra que el sistema funcione mucho mejor.

      Existen dos métodos para activar TRIM.

      • TRIM programado: Se ejecutará TRIM de forma periódica y automática en la fecha y hora que especifiquemos. Normalmente una vez por semana es suficiente.
      • TRIM Continuo: Se ejecutará TRIM cada vez que borremos un archivo de nuestra unidad de almacenamiento.

       
      Nosotros recomendamos activar TRIM de forma periódica. Activar TRIM en modo continuo genera los siguientes inconvenientes:

      • Reduce la vida útil de la unidad de almacenamiento: TRIM en modo continuo implica lecturas y escrituras adicionales a nuestra unidad de almacenamiento.
      • Reduce el rendimiento esperado: En determinados casos se pueden producir congelaciones y corrupción del sistema de archivos.
      • Imposibilita la recuperación de archivos borrados: Si borramos un archivo por equivocación será prácticamente imposible recuperarlo.
         

      • TRIM programado (Volver al índice General)
        En primer lugar, para poder utilizar el comando fstrim, tendremos que tener instalado el paquete util-linux. Para ello, ejecutaremos el siguiente comando:

        $ sudo apt-get install util-linux

        Si nuestra distribución Debian es la 8 o la 9, ejecutaremos el siguiente comando para crear los servicios de systemd:

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

        El paso siguiente será habilitar TRIM:

        $ sudo systemctl enable fstrim.timer
        Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer → /etc/systemd/system/fstrim.timer.

        A continuación iniciaremos el servicio:

        $ sudo systemctl start fstrim.timer

        Para asegurarnos que TRIM está habilitado, ejecutaremos el siguiente comando:

        $ sudo systemctl status fstrim.timer
        ● fstrim.timer - Discard unused blocks once a week
           Loaded: loaded (/etc/systemd/system/fstrim.timer; enabled; vendor preset: enabled)
           Active: active (waiting) since Tue 2019-09-17 20:36:20 CEST; 7s ago
             Docs: man:fstrim
         
        sep 17 20:36:20 zion systemd[1]: Started Discard unused blocks once a week.

        En la salida de este último comando, se pueden observar que TRIM está habilitado y esperando. Además, también nos indica que se ejecutará una vez por semana.

      •  

      • Activar TRIM modificando el archivo fstab (Volver al índice General)
        Consiste en añadir la opción discard en el archivo /etc/fstab (no olvidar hacer copia de seguridad), pero con este cambio, cada vez que el sistema borre un archivo, reubicará el espacio vacío afectando al rendimiento habitual, no como con el método anterior que realizaría la reubicación semanalmente.

        Si tomamos como ejemplo una de las líneas de nuestro archivo /etc/fstab de ejemplo, y activamos TRIM, añadiendo la opción discard, quedaría de la siguiente forma:

        1
        2
        
        # / was on /dev/sda2 during installation
        UUID=cf12cac1-b86f-4de6-b9b6-83e99428568c /       ext4    discard,errors=remount-ro	0       1
    •  

    • Montar las carpetas temporales en RAM (Volver al índice General)
      Por medio del archivo /etc/fstab podemos configurar que la caché sea montada en la RAM como un archivo temporal del sistema. De este modo, el sistema realizará menos escrituras en la unidad SSD, siempre y cuando los directorios temporales estén montados en la unidad SSD y además las escrituras y lecturas en dichas carpetas serán mucho más rápidas.
      Por defecto, el sistema operativo cuenta con las carpetas temporales /tmp y /var/tmp.
      Si contamos con 8GB o 16GB de RAM podremos configurar nuestro sistema operativo para que no use los discos duros.

      Para configurar el montaje de las carpetas temporales en RAM, pinchar aquí para acceder al artículo, publicado con anterioridad en </ZeppelinuX>, llamado Montar carpetas /tmp y /var/tmp en RAM. En este artículo se explica con detalle como montar dichas carpetas.

    •  

    • Minimizar el uso de la partición SWAP (Volver al índice General)
      Simplificando un poco, o más bien bastante, la partición SWAP se usa cuando la RAM está llena. La SWAP, aunque la RAM esté a la mitad, no está vacía, por lo que se recomienda indicar al sistema que la use solo si es estrictamente necesario.

      Para conseguir esto, editaremos el archivo /etc/sysctl.conf y realizaremos los siguientes cambios. No olvidar hacer copia de seguridad del archvo antes de editarlo:

      En primer lugar editamos el archivo /etc/sysctl.conf con el siguiente comando:

      $ sudo nano /etc/sysctl.conf

      Una vez abierto, añadiremos al final del archivo las siguientes líneas:

      vm.swappiness=1
      vm.vfs_cache_pressure=50
      vm.dirty_writeback_centisecs=1500
    • Una vez añadidas las líneas anteriores, guardamos los cambios y cerramos el archivo.
       

    • Cambiando los IO Schedulers (Volver al índice General)
      La Planificación de Entrada/Salida (Input/Output Scheduling o I/O scheduling) consiste en el método mediante el cual los sistemas operativos deciden el orden en que se procesan las peticiones de lectura/escritura en el disco duro o unidad de almacenamiento.

      El sistema operativo no escribe los cambios directamente en el disco duro, sino que encola las diferentes peticiones. Es el Planificación de Entrada/Salida (Input/Output Scheduling o I/O scheduling) quien maneja esto adecuadamente.

      CFQ, acrónimo de Completely Fair Queuing o encolado de procesamiento completamente justo, suele ser el planificador por defecto. Es el planificador de Entrada/Salida predeterminado de Debian, CentOS y Red Hat Enterprise Linux, y ofrece un rendimiento superior para la mayoría de los usos que se le pueda dar al sistema operativo.

      Podemos verificar que CFQ es el planificador de Entrada/Salida de nuestro sistema ejecutando el siguiente comando:

      $ cat /sys/block/sdX/queue/scheduler
      noop deadline [cfq]

      NOTA: La X se corresponde con la letra de la unidad SSD de nuestro sistema.

      Sin embargo, podemos cambiar CFQ por un IO Scheduler que se adapte mejor a nuestro nuevo hardware.

      Para conseguirlo, podemos optar por realizar los siguientes pasos:

      1. Listamos las opciones disponibles para escoger planificador con el anterior comando:
        $ cat /sys/block/sdX/queue/scheduler

        NOTA: La X se corresponde con la letra de la unidad SSD de nuestro sistema.

      2. Una vez listadas las opciones disponibles, la opción deadline es la que deberíamos usar, ya que permite otros ajustes extra. Si no, otra opción podría ser noop.
      3. Ahora debemos especificarle al sistema operativo que utilice estas opciones por defecto en cada arranque, para ello editamos el archivo /etc/rc.local. Pero aquí, si estamos utilizando la distribución Debian 9 Stretch, hemos topado con un problema, Debian ya no utiliza dicho archivo, ha quedado en desuso.
         
        Para aprender a habilitar el archivo /etc/rc.local pincha aquí para acceder al artículo Cómo habilitar rc.local en Debian 9 Stretch, publicado con anterioridad en </ZeppelinuX>.

        NOTA: Una vez habilitado el archivo /etc/rc.local, «no olvidéis hacer copia de seguridad del archvo antes de editarlo».

        Si hemos seguido los pasos indicados en el artículo Cómo habilitar rc.local en Debian 9 Stretch, y tenemos nuestro archivo /etc/rc.local, podemos proceder a editarlo con el siguiente comando:

        $ sudo nano /etc/rc.local

        Antes de la línea “exit 0”, añadimos estas dos líneas (si estás usando deadline):

        echo deadline > /sys/block/sdX/queue/scheduler
        echo 1 > /sys/block/sdX/queue/iosched/fifo_batch

        Y si estamos usando noop, añadimos esta línea:

        echo noop > /sys/block/sdX/queue/scheduler

        NOTA: En ambos casos, la X se corresponde con la letra de la unidad SSD de nuestro sistema.

        Una vez realizadas las modificaciones, el contenido de nuestro archivo /etc/rc.local debería ser similar a este:

        #!/bin/sh -e
        #
        # rc.local
        #
        # This script is executed at the end of each multiuser runlevel.
        # Make sure that the script will "exit 0" on success or any other
        # value on error.
        #
        # In order to enable or disable this script just change the execution
        # bits.
        #
        # By default this script does nothing.
         
        # Configuración para deadline
        echo deadline > /sys/block/sda/queue/scheduler
        echo 1 > /sys/block/sda/queue/iosched/fifo_batch
         
        # Configuración para noop
        echo noop > /sys/block/sda/queue/scheduler
         
        exit 0
  6.  

  7. Reiniciar el sistema (Volver al índice General)
    Para que surtan efecto los cambios, tendremos que reiniciar el sistema. Hay que tener en cuenta dos cosas. La primera es que los cambios realizados en el archivo /etc/fstab se mantendrán incluso tras las actualizaciones de versión del sistema operativo, pero por el contrario, el archivo /etc/rc.local habrá que volver a modificarlo tras cada actualización de versión del sistema operativo.

 
Enlaces externos (Volver al índice General)

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.