fstrim ou discard no SSD?

Este post é apenas um pequeno update para a instalação de dispositivos SSD no GNU/Linux. Com o passar dos anos tive a oportunidade de evoluir mais minha compreensão destes dispositivos SSD no GNU/Linux, no entanto, uma vez instalado o sistema fica uma certa inércia para se questionar e mesmo se propor a fazer mudanças no que está funcionando. Como tenho mexido pouco no sistema nos últimos anos, algumas escolhas tomadas em meus textos tem se tornado obsoletas e necessitam de alguma atualização. A parte boa é que as alterações propostas aqui não fazem grandes mudanças no sistema, podendo serem realizadas sem traumas.

Recentemente instalei uma máquina com SSD + HD para um amigo e aproveitei para fazer uma pesquisa na rede para atualizar meus conceitos sobre estes dispositivos, e saber o que se tem feito com respeito a instalação destes no sistema.

A maioria das escolha apresentadas nos textos (inclusive nos meus Linux no Avell B155MAX e Inspiron com SSD e boot efi) não mudaram muito, mas pude olhar com mais atenção a alguns detalhes que não me ative a princípio.

Para otimizar a performance do SSD, sempre utilizei o “discard” no /etc/fstab. Primeiro por ser uma solução simples e segundo por acreditar que o kernel pudesse fazer este trabalho muito bem. Não duvido que o kernel Linux tenha evoluído o suficiente para isto e que em breve esta solução venha a ser a recomendada. No entanto, este procedimento faz com que o sistema envie uma operação do TRIM em real-time, ou seja, sempre que um arquivo é apagado/movido no SSD, gerando uma quantidade excessiva de trabalho para o dispositivo, tornando o acesso ao SSD mais lento.

Trocando em miúdos, diferentemente dos HDs, onde as trilhas podem ser sobrescritas a todo momento, nos SSDs os blocos de memória devem ser apagados antes de serem liberados para regravação. Quando se usa o “discard” no /etc/fstab, este processo é realizado a cada bloco liberado, gerando sobrecarga desnecessária ao SSD e consumindo sua performance. Já ao utilizar o comando fstrim semanalmente (ou diariamente) este processo será realizado em background, apenas uma vez, seja na semana ou no dia, e não a cada acesso de reescrita no SSD. Obviamente o período para a execução do fstrim depende muito do seu uso do SSD, mas na maioria dos casos a execução semanalmente parece ser suficiente.

Uma boa discussão sobre isto pode ser encontrada no artigo How to properly activate TRIM for your SSD on Linux: fstrim, lvm and dm-crypt. Embora o artigo seja de 2013, ainda está atual suas argumentações.

Botando a Mão na Massa

Para executar esta tarefa considere criar um script do_fstrim como o código abaixo:

#!/bin/bash

LOGFILE=/var/log/ssd_trim.log
SSD_MOUNT='/ /home'

[ ! -e $LOGFILE ] && touch $LOGFILE

# -----------   Start script --------------|
echo "*** $(date -R) ***" | tee -a $LOGFILE
for MNT in $SSD_MOUNT; do
    fstrim -v $MNT | tee -a $LOGFILE
done
echo "    -------------------------------" | tee -a $LOGFILE

Este script foi escrito sobre a proposta do LQSlack. Altere o valor da variável SSD_MOUNT, na linha 4, para a lista de partições do SSD montadas em seu sistema, apenas separadas por um espaço.

Para terminar copie o script acima para o diretório /etc/cron.weekly/ ou /etc/cron.daily/, para executar o comando fstrim diariamente ou semanalmente, respectivamente. Eu o uso semanalmente.

chmod +x do_fstrim
[prompt]cp do_fstrim /etc/cron.weekly/

Para testar apenas execute o do_fstrim

/etc/cron.weekly/do_fstrim
*** Fri, 17 Mar 2017 18:37:09 -0300 ***
/: 13.1 GiB (14066356224 bytes) trimmed
/home: 84.5 GiB (90675343360 bytes) trimmed
    -------------------------------

O comando pode demorar um pouco, dependendo do uso do SSD, tenha paciência.

Para terminar, remova o “discard” das linhas de montagem das partições no /etc/fstab e as alterações estão prontas. Como disse, nada traumático.

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.