Du TRIM sur les disques durs avec macOS

En faisant mes recherches sur le TRIM et macOS en USB, je suis tombé sur un truc un peu bizarre : des disques durs compatibles avec le TRIM. Quoi ? Des disques durs ? Oui. Et c’est une bonne nouvelle.

Le TRIM et macOS Monterey, j’en ai parlé récemment dans un sujet, car le dernier OS d’Apple supporte la commande en USB. mais je vais réexpliquer les bases, parce qu’il faut comprendre deux technologies pour voir l’intérêt du TRIM sur un disque dur.

Sur la capture, on voit la présence du TRIM

C’est quoi le TRIM ?

Il faut schématiser plusieurs choses. Premièrement, le système de fichiers : il s’agit de la façon dont les données sont stockées sur un périphérique, du point de vue du système d’exploitation. De façon très schématique, le disque est divisé en cases, et le système de fichiers va lier les cases. Un fichier peut donc utiliser les cases 5, 6, 7 et 8, par exemple. Si vous supprimez le fichier, les données ne vont pas être réécrites (ça a peu d’intérêt) : on va simplement indiquer que la case 5 est vide et supprimer le lien avec les autres. Du point de vue de l’OS, tout est vide.

Maintenant, prenons un SSD. Il contient de la mémoire flash, divisée en cases. Quand le SSD écrit un fichier, il va mettre les données dans une case, et la suite… dans une autre case. Comment la case en question est-celle choisie ? Ça va un peu dépendre du contrôleur, mais la case (cellule) choisie va être la moins usée. Pourquoi ? Parce que les cellules ont une durée de vie limitée, et le but du contrôleur est d’unifier l’usure. Sans gestion de l’usure, si vous écrivez régulièrement un fichier (le même), il va être écrit sur la même cellule, ce qui va l’user et la rendre inutilisable après un certain nombre d’écritures (qui dépend du type de mémoire flash). La gestion de l’usure la plus basique consiste donc à simplement changer de cellule, et de prendre la moins usée. Si elle est utilisée (si elle contient des données), les données seront déplacées.

Si vous avez compris ce que j’essaye d’expliquer, vous voyez probablement le problème : les cases du système de fichiers ne sont pas les mêmes que celles du SSD. Et si vous supprimez un fichier, le SSD ne peut pas le savoir. Pour lui, dans l’exemple du début, les cellules qui contiennent les cases 6, 7 et 8 ne sont pas vides. C’est là qu’intervient le TRIM. La commande est envoyée lors de la suppression d’un fichier (c’est un rien plus compliqué, mais j’essaye de simplifier) pour indiquer au SSD que les données sont supprimées. Il n’y a pas de réécriture des données, mais simplement un flag (un identifiant) qui indique « la case est vide » (ou « les données dessus sont effaçables sans préavis »). L’intérêt pour le contrôleur du SSD est évident : il va chercher la cellule libre la moins usée sans rien déplacer.

En clair, le TRIM aide le SSD à mieux gérer son usure et améliore (un peu) les performances en évitant de déplacer des données sans raisons.

Les disques durs SMR

Maintenant, parlons disques durs. Pendant des années, les disques durs stockaient les données dans des pistes bien séparées, mais depuis cinq ou six ans, ce n’est plus nécessairement le cas. Les constructeurs utilisent en effet des disques durs SMR (Shingled Magnetic Recording) avec des pistes qui se chevauchent. Il faut voir une piste comme une route (par exemple) : pour la lecture, il suffit de passer la tête dans la voie centrale pour obtenir les données. Pour l’écriture, par contre, il faut utiliser toute la largeur de la piste. Le SMR utilise ce point en superposant en partie les pistes. Cette solution a deux avantages : elle n’influence pas les performances en lecture, qui nécessitent une tête plus fine, et elle augmente la densité. Pour être plus clair, vous placez plus de pistes sur la même surface, pour obtenir une capacité plus élevée à technologie identique. Mais pour écrire une piste, il faut donc effacer la piste à écrire (logique) mais aussi la piste superposée. Et si elle contient des données, il faut déplacer les données en question. J’ai essayé de simplifier, mais l’article de l’époque sur hardware.fr explique bien le problème.

Le modèle du haut, 7 mm, est en SMR (bon, celui du bas, de 3 To et 15 mm… l’est aussi)

Si vous avez suivi, vous venez de comprendre l’intérêt du TRIM sur un disque dur. Parce que comme avec un SSD, le HDD n’a aucune idée du contenu des pistes, donc sauf si le disque dur est neuf, il va déplacer les données des pistes superposées (et donc écrire plus que prévu ou – de façon plus pratique – écrire moins vite). Mais il existe une commande qui permet d’indiquer au disque dur qu’une piste est vide : le TRIM.

Quelques disques chez WD

Dans la pratique, j’ai testé avec quelques disques durs et fait quelques recherches : le TRIM est fonctionnel sur les disques durs de WD (Western Digital) et probablement quelques Seagate (un lecteur m’a envoyé une image qui indique qu’un Seagate Barracuda de 2 To supporte la commande). Mes deux Seagate 2,5 pouces, qui sont SMR (un 3 To, un 5 To issu d’un boîtier externe) ne sont pas compatibles, mais apparemment certains modèles supportent la commande. Je ne connais pas le statut des modèles Toshiba, je n’en ai pas sous la main. Chez WD, par contre, les modèles 2,5 pouces récents le sont : j’ai un WD10SPZX (1 To, Blue) qui est bien compatible. De façon plus large, la marque semble ajouter le TRIM dans tous ses modèles SMR, il y a même un white paper assez récent sur le sujet et une vieille page de support.

Un modèle de 1 To, compatible TRIM

Pour le vérifier, il y a quelques possibilités. D’abord, la méthode utilisée avec le TRIM en USB fonctionne : s’il est formaté en APFS, il va être trimmé au branchement. Ensuite, des programmes comme Crystal Disk Info (sous Windows) indiquent la présence de la compatibilité avec la commande. Enfin, c’est actif sous macOS si vous avez un contrôleur SATA interne (ou en Thunderbolt), même s’il faut activer le TRIM manuellement. Attention tout de même, il faut tout de même que la commande passe. Ce n’est pas systématique en USB : il faut que l’adaptateur USB accepte la commande et l’envoie bien au disque, ce qui n’est pas toujours le cas.

macOS n’indique pas le TRIM explicitement

Pour vérifier si le TRIM a un impact, j’ai tenté une méthode une peu bourrine. Premièrement, j’ai mis le disque dur dans un boîtier USB qui prend en charge le TRIM et je l’ai presque rempli. Pour faire simple, j’ai écrit 900 Gio de données aléatoires. Ensuite, j’ai complété avec 30 Gio, que j’ai effacé, ce qui a lancé la commande TRIM. Après ça, j’ai testé le disque dur : les performances restaient bonnes, du niveau du disque dur vide.

Avec le TRIM

Ensuite, j’ai fait la même chose avec le même disque dur, mais avec un adaptateur USB qui n’est pas compatible TRIM. Je n’ai pas touché au fichier de 900 Gio, j’ai juste écrit 30 Gio, effacé le fichier et testé le disque. Assez bizarrement, dans ce cas de figure, le disque écrivait à la même vitesse, mais lisait moins vite.

Puis j’ai effacé le disque dur et recommencé, toujours sur le boîtier sans TRIM. Pour écrire les 900 Gio, rien n’a changé (ça reste assez lent sur un disque dur). Mais pour la seconde partie, les performances s’effondraient : elles étaient divisées par deux.

Sans TRIM

Enfin, j’ai simplement formaté le disque dur pour vérifier que l’adaptateur ne jouait pas sur les performances. Et ce n’est pas le cas : une fois vidé, il obtient les mêmes performances.

Dans l’ensemble, c’est donc a priori fonctionnel et (surtout) efficace pour éviter les dégradations. Le seul truc noté, sous Windows, c’est que la commande qui doit optimiser le disque (et envoyer la commande TRIM) n’a pas l’air de fonctionner sur le HDD. Je ne suis pas certain que c’est un comportement prévu ou un bug. Sous macOS, en tout cas, le disque dur est bien trimmé.

La commande ne semble pas fonctionner.


En HFS+, il est bien trimmé