Se você tem uma versão recente de util-linux
, ela contém a ferramenta blkdiscard
, que é capaz de TRIM dispositivos inteiros ou intervalos dentro de um dispositivo usando as opções --offset
e --length
.
Por favor note: blkdiscard
é perigoso, se você deixar TRIM nas regiões erradas, seus dados sumiram!
Então você pode descobrir as regiões não particionadas (livres) da sua tabela de partições e depois TRIM elas usando esta ferramenta. Para msdos
e gpt
partitions, parted
fornece as regiões livres da seguinte forma:
# parted -m /dev/sda unit b print free | grep ':free;'
1:17408B:1048575B:1031168B:free;
1:64022904832B:64023240191B:335360B:free;
Adicione um loop a ele ...
while IFS=: read -ra FREE
do
echo blkdiscard --offset ${FREE[1]%%B} --length ${FREE[3]%%B} /dev/sda
done < <(parted -m /dev/sda unit b print free | grep ':free;')
que imprime
blkdiscard --offset 17408 --length 1031168 /dev/sda
blkdiscard --offset 64022904832 --length 335360 /dev/sda
Verifique se esta saída está correta para você, adicione opções adicionais se desejar (verbose?) e, finalmente, remova o echo
para que ele seja realmente executado e você deve estar definido.
O segundo comando desse exemplo realmente falha porque o comprimento é muito pequeno - pode valer a pena verificar dentro do loop, ignorar regiões menores que 1MB, pois é improvável que sejam aparadas com sucesso.
Se você estiver usando o LVM em vez de partições, você pode criar um LV para o espaço não ocupado e apará-lo:
lvcreate -l100%FREE -n blkdiscard SSD-VG
blkdiscard -v /dev/SSD-VG/blkdiscard
lvremove SSD-VG/blkdiscard
Se você definir issue_discards = 1
no seu lvm.conf
, poderá ignorar a chamada blkdiscard
, pois o LVM emitirá o TRIM em lvremove
por si mesmo.