Vieil article (déjà presque 10 ans !) qui récapitule les infos sur le TRIM (libération explicite de blocs d'espace de stockage, principalement pour les SSD).
J'ai testé sur une ancienne VM à moi, qui a subit plusieurs déménagements et upgrade (Debian Jessie à la base, Bullseye maintenant).
Pour avoir accès au TRIM à tous les niveaux, il faut bien l'activer dans crypttab (une VM Bullseye fraiche l'a de base). Il faut bien faire l'update-initramfs. Le reste ne semble pas nécessaire, mais peut tout de même être utile, comme par exemple pour libérer la place non-allouée d'un LVM (fstrim n'agit que sur des systèmes de fichiers montés).
Par exemple, pour purger l'espace non-alloué d'un LVM, j'ai utilisé la méthode bourrin d'ici : https://unix.stackexchange.com/questions/97143/utility-to-trim-unallocated-space-on-drive après bien sûr avoir activé l'option de discard automatique dans lvm (qui était désactivée, et l'est toujours dans un Debian Bullseye frais).
sudo lvcreate -l100%FREE -n blkdiscard VirtualPenguin
sudo lvremove VirtualPenguin/blkdiscard
27G -rw-r--r-- 1 john john 50G Feb 20 17:53 vm-111-disk-0.raw
15G -rw-r--r-- 1 john john 50G Feb 20 17:58 vm-111-disk-0.raw
=> je gagne bien une allocation de 12 Go, quand mon LVM a 12 Go non-alloués.
À noter qu'un Debian Bullseye a un timer systemd prédéfini pour lancer fstrim toutes les semaines. Ce timer est cependant désactivé quand on vient d'une upgrade (de Buster).
Pour voir où on peut fstrim (et donc voir à partir d'où ça coince dans l'empilement de couches logiques), lsblk -o NAME,DISC-MAX,FSTYPE est pratique (à peine modifié de l'article).
Attention à ne pas se laisser avoir par un dry-run (-n) de fstrim : il dira ne rien avoir TRIM, mais on pourrait supposer comme moi qu'il dirait ce qu'il aurait pu TRIM…
À mon sens, fstrim remplace donc avantageusement un zerofree + fallocate -d (pas d'écriture) mais ne travaille que sur des systèmes de fichiers montés, donc il faut penser au reste.