Eu vejo que esta é uma questão antiga ... mas surge cedo nas pesquisas sobre o tópico, então parecia valer a pena dar uma resposta das fontes do kernel.
Existem duas maneiras diferentes pelas quais uma implementação do sistema de arquivos Linux pode "suportar" o TRIM:
-
Ele pode suportar o
-o discard
mount option , então os blocos que ficam livres são cortados imediatamente -
Ele pode suportar o
FITRIM
ioctl , que é o que o comando userlandfstrim
usa para aparar todos os blocos atualmente livres em massa quando solicitado
Uma implementação do sistema de arquivos pode suportar um ou outro, ou ambos (ou nenhum).
Como se vê, a implementação do FAT foi capaz de fazer discard
desde o kernel 2.6.28 . Isso antecede a opção de montagem, que não aparece até 2.6.33. Do 2.6.28 ao 2.6.32, o FAT acabou de ser gravado em discard
incondicionalmente. Desde 2.6.33, você pode controlar se isso acontece ou não.
Quanto ao FITRIM
ioctl, bem, isso se tornou uma coisa em 2.6.37 , mas eu não vejo nenhum sinal de que o código do sistema de arquivos FAT suporta, mesmo no mais recente, maior (a partir de hoje) 4.13rc5 . Vários outros sistemas de arquivos o implementaram, mas ninguém parece ter se incomodado com o FAT.
Isso é muito ruim, porque há pelo menos um cenário perfeitamente comum em que você gostaria de uma maneira de TRIMar todos os blocos livres existentes de uma só vez: você deu uma ótima atualização para o antigo Banana 6000 por dd
-ing a imagem de disco completa da unidade giratória antiga para um novo SSD brilhante, agora, no que se refere ao SSD, todos esses blocos foram gravados, sejam eles importantes para o sistema de arquivos ou não. Então, é claro, você gostaria que os considerados livres pelo sistema de arquivos fossem aparados.
Mas pode haver esperança. Embora ainda não tenha tido a chance de experimentar, acho que isso pode funcionar:
- Monte o sistema de arquivos (não se esqueça de usar
-o discard
). - Crie alguns arquivos vazios.
- Exploda-os até o tamanho máximo possível usando
fallocate -n
(que aloca os blocos sem escrever nada para eles, por isso não colocará muito desgaste extra no SSD). ParaFAT32
, um arquivo é limitado a pouco menos de 4 GiB, e é por isso que você pode precisar de vários arquivos temporários para usar todo o espaço livre. (Para este passo funcionar, você precisa do kernel 4.5 ou posterior, onde O FAT temfallocate
support .) - Depois de preencher todo o espaço livre, livre-se dos arquivos temporários, permitindo que todos os blocos liberados sejam
discard
ed.
Isso, é claro, deve funcionar como uma alternativa de força bruta fstrim
para qualquer implementação de sistema de arquivos que seja capaz de fazer discard
mas não FITRIM
.
p.s. Eu gosto dos links alternativos oferecidos abaixo no comentário de Tom Yan. Eu estava trabalhando no git repo oficial mais ou menos, mas o que eu gosto no serviço ao qual o Tom está vinculado é que você pode alternar mais facilmente entre diferentes versões de um arquivo para comparar.