Não pode haver um software genérico como o software de desfragmentação para discos rígidos não SSD.
O motivo é que, em um disco rígido não SSD, os dados são armazenados fisicamente em um local conhecido. Conhecendo o LBA endereço de dados, uma ferramenta de desfragmentação agora onde um dado está fisicamente no disco rígido e pode movê-lo para onde quer. (isso é quase verdade, mas não em todos os casos)
Em um SSD, os dados também são armazenados em um endereço LBA (como o ATA / SATA funciona). Mas, enquanto um disco rígido tradicional (na maioria dos casos) armazena o endereço LBA 1 no início do disco, seguido pelo endereço 2, 3, 4, ..., N; Um SSD não armazena endereço linearmente porque armazenar linearmente seria muito lento se você escrevesse no endereço 1 e depois, no endereço 2, porque o SSD teria que reescrever os dados armazenados no endereço 1 (isso significa ler, armazenar em cache , apague o endereço 1 para N (um ssd precisa escrever um bloco inteiro de endereço N a cada vez que você escreve dados)), escreva o endereço 1 & 2. É lento). É por isso que o SSD armazenará o endereço 2 'longe' (no espaço de memória) do endereço 1. Isso torna a gravação mais rápida, mas tornará o disco mais lento quando todos os blocos tiverem sido usados.
Assim, uma ferramenta não pode saber como os dados são armazenados no SSD e não pode decidir como fazer algo como uma 'desfragmentação'. A única maneira de fazer isso é executar um programa dentro dos controladores de disco rígido, usar uma ferramenta que pode solicitar ao SSD que informe como os dados são armazenados e dizer a ele como mover (usando endereço de memória interna e não endereço LBA) não há um comando ATA padrão para fazer isso, isso significaria uma ferramenta por fornecedores SSD.Eu ainda não sei se poderia ser possível usar um comando proprietário sobre o protocolo ATA (WIPER pode ser uma ferramenta desse tipo). )) ou use o famoso comando TRIM.
Depois de um tempo, você pega todo o endereço do bloco N com apenas poucos endereços usados (porque você deletou coisas, etc.) e começa a ficar lento porque cada vez que você escreve dados, um bloco tem que ser lido, apagado , escrever. É por isso que você precisa do TRIM para obter a maioria dos blocos cheios de dados e novos blocos vazios.
PS: Só para ficar claro, esta é uma explicação muito simplificada. Além disso, na maioria dos casos, você não apenas escreverá 1 endereço de dados LBA, mas muitos (porque os arquivos são grandes), de modo que você escreverá X blocos de endereço N, mas obterá os Xth blocos não preenchidos.