O fstrim apara mais da metade do tamanho da partição, mesmo que a partição seja montada com descarte

8

Quando instalei meu SSD, apenas montei com ele discarde não o suei. No entanto, hoje eu estava lendo sobre os prós e contras do uso fstrime decidi executar o programa para ter uma idéia de quanto tempo realmente levaria (ainda com minhas partições montadas discard). O comando levou vários minutos nas partições raiz e inicial. Para minha partição inicial, usei -ve obtive o seguinte:

$ sudo fstrim -v /home
/home: 137494052864 bytes were trimmed

Isso é mais do que a quantidade de espaço livre na partição!

$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       206G   78G  118G  40% /home

As execuções subsequentes terminam em menos de um segundo, por exemplo:

$ sudo fstrim -v /home
/home: 0 bytes were trimmed

Certamente, se eu sempre tive a partição montada discard, fstrimnão devo aparar uma grande quantidade de dados assim? A discardopção está definitivamente ativada, aqui estão as fstablinhas relevantes :

UUID=xxxxxxxx...    /          ext4   noatime,discard,errors=remount-ro  0      1
UUID=xxxxxxxx...    /home      ext4   noatime,discard,errors=remount-ro  0      2

E mountlinhas de saída:

/dev/disk/by-uuid/xxxxxxxx... on / type ext4 (rw,noatime,discard,errors=remount-ro,stripe=128,data=ordered)
/dev/sda2 on /home type ext4 (rw,noatime,discard,errors=remount-ro,stripe=128,data=ordered)

O SSD é um TOSHIBA THNSNS256GMCP. Por que isso acontece?

Graeme
fonte

Respostas:

12

Duas coisas aqui:

  1. fstrimapara todos os dados não alocados no sistema de arquivos (bem, não todos, na verdade, todos os dados, apenas os blocos de dados que não estão alocados, não acho que as partes não utilizadas da tabela de inodes ou as partes de blocos não completamente usados ​​sejam aparado), independentemente de estar discardsendo usado ou não. fstrimNão é possível saber quais desses blocos não alocados foram "cortados" ou ainda não no passado, mas ele (na verdade, o kernel, todo o fstrimtrabalho é feito no FITRIM ioctl) mantém um registro de qual grupo de blocos foram cortados e não serão cortados novamente se não houver nenhuma alocação nesse grupo de blocos desde então, a menos que você esteja solicitando um FITRIM com um comprimento de extensão mínimo menor (da verificação do código ext4, pode ser diferente para outros sistemas de arquivos), o que explica por que você recebe 0 na próxima execução.

    Observe que não faz mal aparar um bloco que já foi aparado. Isso é apenas dizer ao SSD novamente que ele pode fazer o que quiser com ele (como apagá-lo para que possa estar pronto para usar novamente para outra coisa).

  2. Na dfsaída, o valor "disponível" não leva em consideração o espaço "reservado" root, você notará que 206 - 76 é 130G, não 118G. 12G (cerca de 5%) são reservados. Veja tunefs -mpara alterar quanto está reservado.
Stéphane Chazelas
fonte
1
Portanto, se fstrimainda não sabe o que foi aparado, por que ele relata 0 bytes pela segunda vez? Certamente isso deve vir do disco, mas então por que ele reportaria um corte tão grande na primeira vez? Certamente o disco seria independente do fato de ter discardou trimnão sido usado.
Graeme
1
@ Graeme, argh, bom ponto. O fstrim, usa o FITRIM ioctl, e é o kernel fazendo todo o trabalho e relatando o resultado ao fstrim. Suponho que o kernel controla o que já foi cortado, mas só pode fazer isso desde que foi inicializado. Irá investigar e atualizar a resposta.
Stéphane Chazelas
1
Ok, sim, o kernel deve rastrear o que foi aparado desde a inicialização. Se eu reiniciar e fstrimexecutar outro , obterá aproximadamente a mesma saída.
Graeme
@ Graeme, veja minha edição.
Stéphane Chazelas
1
fstrimapenas emite o apropriado ioctl, tudo o resto é uma decisão do sistema de arquivos e os sistemas de arquivos se comportam de maneira muito diferente. ext4tenta evitar aparar as mesmas coisas repetidamente, xfsnão se importa e apara tudo o que é gratuito, outras pessoas podem fazer outras coisas - se é que o suportam ... se for imprevisível, reclame com o sistema de arquivos.
Frostschutz