TRIM sur Debian Jessie avec LVM sur dm-crypt/LUKS

Le mois dernier, j'ai installé Debian Jessie sur mon Thinkpad T410 nouvellement équipé d'un SSD. Pour qu'il n'y aie pas de dégradation de performance, il faut activer la fonctionnalité TRIM. Celle-ci averti le SSD qu'il peut libérer les blocs non-alloués par le système de fichier.

Lorsqu'on utilise un seul système de fichier directement sur le disque, c'est très facile d'utiliser TRIM. On peut faire TRIM manuellement en exécutant fstrim sur la partition voulue. On peut aussi inscrire dans /etc/fstab l'option discard pour le faire automatiquement, pourvue que le système de fichier supporte l'option. La plupart des systèmes de fichiers modernes comme ext4, btrfs et xfs supportent cette option.

Mon arrangement est toutefois un peu plus complexe. J'utilise dm-crypt/LUKS pour chiffrer les partitions sur mon SSD. Ensuite, j'utilise LVM sur la partition dm-crypt pour monter les systèmes de fichiers utilisés par le système d'exploitation (/, /home et swap). Un tel arrangement permet de déverrouiller toutes les partitions d'un coup avec un seul mot de passe au démarrage. L’inconvénient, c'est que la commande fstrim ne se rend pas jusqu'au disque dur, elle est bloquée par LVM et par dm-crypt. Toutefois, c'est facile à ajuster.

Premièrement, il faut configurer dm-crypt en modifiant /etc/crypttab :

sda5_crypt /dev/sda5 none luks,discard

Ensuite, pour LVM, il faut modifier la section devices du fichier /etc/lvm/lvm.conf :

devices {
    [...]
    issue_discards = 1
}

Pour les partitions /, /home et swap, il faut modifier /etc/fstab :

# <file system> <mount point>   <type>  <options>   <dump> <pass>
/dev/mapper/ssd-root    /       ext4    relatime,errors=remount-ro,discard  0 1
/dev/mapper/ssd-home    /home   ext4    relatime,discard                    0 2
/dev/mapper/ssd-swap    none    swap    sw,discard                          0 0

Après avoir fait ces modifications, il faut régénérer l'initramfs pour prendre en compte les nouvelles options pour le volume chiffré.

Update-initramfs -u -k $(uname -r)

Après un redémarrage, pour vérifier si tout fonctionne correctement vous devriez pouvoir lancer manuellement la commande TRIM (fstrim) sur une de vos partitions.

Références :