Comment configurer TRIM périodique pour le stockage SSD sur des serveurs Linux

introduction

En raison de l'architecture des disques SSD ou SSD, une utilisation continue entraîne une dégradation des performances si elle n'est pas prise en compte et atténuée. La commandeTRIM est une opération qui permet au système d'exploitation de propager des informations vers le SSD sur les blocs de données qui ne sont plus utilisés. Cela permet aux systèmes internes du SSD de mieux gérer le nivellement par usure et de préparer l’appareil pour de futures écritures. TRIM peut avoir un impact majeur sur les performances de l’appareil au fil du temps et de sa longévité globale.

Bien qu'il soit possible d'activer TRIM en continu sous Linux, cela peut en fait affecter négativement les performances en raison de la charge supplémentaire liée aux opérations de fichier normales. Une alternative plus douce consiste à configurerperiodic TRIM. Ceci configure le système d'exploitation pour TRIM le lecteur selon une planification plutôt que comme un composant nécessaire des opérations de fichier normales. Dans presque tous les cas, il offre les mêmes avantages que le TRIM continu sans que les performances en pâtissent.

Dans ce guide, nous aborderons brièvement le fonctionnement des disques SSD et TRIM, puis nous montrerons comment activer TRIM périodique sur diverses distributions Linux.

Comment les SSD stockent-ils les données?

Pour mieux comprendre les problèmes résolus par TRIM, il est utile de connaître quelques notions sur la manière dont les disques SSD stockent et gèrent leurs données.

Unités de données

Les données sur les disques SSD sont écrites et lues en unités d'une taille fixe appeléepages. Les pages, à leur tour, sont regroupées en unités plus grandes appeléesblocks.

Lire, écrire et effacer les limitations

Les disques SSD peuvent lire et écrire individuellement sur des pages. Cependant, ils ne peuvent effacer les données qu'au niveau du bloc. Une autre limitation est que les écritures ne peuvent être effectuées que sur des pages qui ont été entièrementzeroed (tous les bits mis à 0). Cela signifie qu’écraser directement les données est impossible.

Pour modifier les données, le SSD doit en réalité lire les informations de l'ancien emplacement, les modifier en mémoire, puis écrire les données modifiées dans de nouvelles pages mises à zéro. Il met ensuite à jour une table interne pour mapper l'emplacement logique attribué au système d'exploitation au nouvel emplacement physique des données sur le périphérique. L'ancien emplacement est marqué dans une table interne différente commestale: non utilisé, mais pas encore remis à zéro.

Récupérer des pages périmées

Pour récupérer les pages obsolètes, les processus de ramassage des ordures internes du SSD doivent lire toutes les pages valides d’un bloc et les écrire dans un nouveau bloc. Là encore, les emplacements physiques et logiques de mappage de la table interne sont mis à jour. L'ancien bloc, qui ne contient plus aucune donnée unique encore en usage, peut ensuite être mis à zéro et marqué comme prêt pour de futures écritures.

Qu'est-ce que TRIM Do?

Les processus internes de collecte des ordures du SSD sont chargés de l’effacement des blocs et de la gestion du nivellement par l’usure. Cependant, les systèmes de fichiers «suppriment» généralement les données en les marquant simplement dans leurs propres enregistrements en tant qu'espace disponible à nouveau. Ils n'effacent pas réellement les données du stockage sous-jacent, mais peuvent écraser la zone précédemment occupée par ces données lors d'écritures ultérieures.

Cela signifie que le disque SSD ne saura généralement pas qu'une page n'est plus nécessaire jusqu'à ce qu'il reçoive des instructions du système de fichiers lui permettant d'écrire ultérieurement au même emplacement logique. Il ne peut pas exécuter ses routines de nettoyage de la mémoire, car il n’est jamais informé du moment où les données sont supprimées, mais au moment où l’espace précédemment réservé doit maintenant être utilisé pour d’autres données.

La commande TRIM propage des informations sur les données qui ne sont plus utilisées depuis le système de fichiers jusqu'au disque SSD. Cela permet à l'appareil de s'acquitter de ses tâches habituelles de collecte des déchets lorsqu'il est inactif, afin de garantir la mise à zéro des pages prêtes à gérer de nouvelles écritures. Le SSD peut mélanger les données à l’avance, nettoyer les pages obsolètes et maintenir l’appareil en bon état de fonctionnement.

L'exécution de TRIM à chaque suppression peut toutefois être coûteuse et avoir un impact négatif sur les performances du lecteur. La configuration périodique de TRIM fournit au périphérique des informations en masse sur les pages inutiles selon un calendrier régulier et non avec chaque opération.

Désactivation de TRIM continue

Vous avez peut-être déjà activé TRIM en continu sur vos appareils lors de leur montage. Avant d'activer TRIM périodique, il est judicieux d'examiner nos options de montage actuelles.

Le TRIM continu est activé en montant un lecteur ou une partition avec l'optiondiscard.

Tout d'abord, recherchez les systèmes de fichiers actuellement montés avec l'optiondiscard:

findmnt -O discard
OutputTARGET     SOURCE    FSTYPE OPTIONS
/mnt/data  /dev/sda1 ext4   rw,relatime,discard,data=ordered
/mnt/data2 /dev/sdb1 ext4   rw,relatime,discard,data=ordered

Vous pouvez remonter ces systèmes de fichiers sur place, sans l'optiondiscard, en incluant-o remount,nodiscard avecmount:

sudo mount -o remount,nodiscard /mnt/data
sudo mount -o remount,nodiscard /mnt/data2

Si vous exécutez à nouveau la commandefindmnt, vous ne devriez recevoir aucun résultat:

findmnt -O discard

Ensuite, ouvrez le fichier/etc/fstab pour voir les options de montage actuellement définies pour vos systèmes de fichiers. Celles-ci déterminent comment les systèmes de fichiers sont montés à chaque démarrage:

sudo nano /etc/fstab

Recherchez l'optiondiscard et supprimez-la des lignes que vous trouvez:

/etc/fstab

. . .
# /dev/sda1 /mnt/data ext4 defaults,nofail,discard 0 0
/dev/sda1 /mnt/data ext4 defaults,nofail 0 0
# /dev/sdb1 /mnt/data2 ext4 defaults,nofail,discard 0 0
/dev/sdb1 /mnt/data2 ext4 defaults,nofail 0 0

Enregistrez et fermez le fichier lorsque vous avez terminé. Les systèmes de fichiers seront désormais montés sans l'optiondiscard, et seront montés de la même manière lors des démarrages suivants. Nous pouvons maintenant configurer TRIM périodique pour tous les systèmes de fichiers qui le prennent en charge.

Configuration de TRIM périodique pour les distributions systemd

La configuration périodique de TRIM pour les distributions modernes livrées avec systemd a tendance à être plutôt simple.

Ubuntu 16.04

Ubuntu 16.04 est livré avec un script exécuté chaque semaine parcron. Cela signifie que l'activation de la méthode systemd décrite dans la section suivante n'est pas nécessaire pour Ubuntu 16.04.

Si vous souhaitez examiner le script, vous pouvez le voir en tapant:

cat /etc/cron.weekly/fstrim
Output#!/bin/sh
# trim all mounted file systems which support it
/sbin/fstrim --all || true

Comme vous pouvez le voir, ce script a besoin d'une version defstrim avec l'indicateur--all. De nombreuses versionsfstrim livrées avec les versions antérieures d'Ubuntu ne contiennent pas cette option.

Autres distributions système

Pour les autres distributions systemd, TRIM périodique peut être activé avec le fichierfstrim.timer, qui exécutera des opérations TRIM sur tous les lecteurs compatibles et montés une fois par semaine. Cela exploite également l'optionfstrim --all.

Au moment d'écrire ces lignes, c'est la meilleure méthode pour les distributions suivantes:

  • Debian 8

  • CentOS 7

  • Fedora 24

  • Fedora 23

  • CoreOS

Pour CentOS 7, Fedora 23, Fedora 24 et CoreOS, les unitésfstrim.service etfstrim.timer sont disponibles par défaut. Pour planifier un TRIM hebdomadaire de tous les lecteurs compatibles connectés, activez l'unité.timer:

sudo systemctl enable fstrim.timer

Debian 8 a lesfstrim.service etfstrim.timer disponibles dans le système de fichiers, mais pas chargés dans systemd par défaut. Il vous suffit de copier les fichiers en premier:

sudo cp /usr/share/doc/util-linux/examples/fstrim.service /etc/systemd/system
sudo cp /usr/share/doc/util-linux/examples/fstrim.timer /etc/systemd/system

Maintenant, vous pouvez activer le timer de la même manière que pour les autres distributions:

sudo systemctl enable fstrim.timer

Votre serveur doit maintenant TRIM tous les systèmes de fichiers montés prenant en charge l'opération, une fois par semaine.

Configuration de TRIM périodique pour des distributions non-système

Par coïncidence, la plupart des versions de distribution livrées avec des systèmes d'initialisation non systemd étaient également livrées avec des versions de l'utilitairefstrim qui n'avaient pas l'indicateur--all. Cela rend les opérations TRIM automatiques sûres et beaucoup plus difficiles.

L'utilisation de TRIM sur des lecteurs qui ne le prennent pas en charge ou sur des périphériques qui ne l'implémentent pas correctement peut être dangereuse et entraîner la perte de données. L'indicateur--all peut gérer ces scénarios en toute sécurité, mais tenter manuellement de déterminer si les lecteurs connectés prennent correctement en charge l'opération peut être dangereux.

Dans Ubuntu 14.04, un court script appeléfstrim-all est inclus, qui tente de le faire. Un script hebdomadaire exécuté parcron l'exécute. Toutefois, le script n'interprète pas toujours correctement la capacité TRIM des lecteurs attachés.

Pour cela et d'autres distributions avec des commandesfstrim sans l'indicateur--all, la meilleure solution de contournement peut être de compiler une version liée statiquement defstrim qui inclut l'indicateur. Cela peut être installé parallèlement à la version gérée par la distribution et uniquement appelé explicitement à partir du travailcron.

Cela peut être la meilleure option pour les distributions suivantes:

  • Ubuntu 14.04

  • Ubuntu 12.04

  • Debian 7

  • CentOS 6

Pour Ubuntu 14.04, il est probablement préférable de désactiver l'exécution du scriptfstrim-all, car il risque de ne pas détecter correctement l'état:

sudo chmod a-x /etc/cron.weekly/fstrim
sudo mv /etc/cron.weekly/fstrim /etc/cron.weekly/fstrim.bak

Pour les autres distributions, vous pouvez vous lancer directement.

Installer les outils de compilation de logiciels

Commencez par installer les outils de création de logiciels

Pour les systèmes Ubuntu et Debian, vous pouvez le faire en tapant:

sudo apt-get update
sudo apt-get install build-essential

Pour les systèmes CentOS, vous pouvez installer un ensemble d’outils similaire en tapant:

sudo yum groupinstall 'Development Tools'

Vous disposez maintenant des dépendances de construction nécessaires pour compiler une version récente defstrim.

Télécharger et extraire les fichiers sources

L'utilitairefstrim est publié avec d'autres outils dans un groupe appeléutil-linux. Vous pouvez trouver le code source, organisé par version,here.

Cliquez sur la version la plus récente du package. Pour le moment, c'estv2.28, mais cela peut être différent à mesure que le développement se poursuit.

Dans le répertoire suivant, recherchez l'archive la plus récente pour le logiciel. Cela commencera parutil-linux- et se terminera par.tar.gz. Actuellement, la version stable la plus récente estutil-linux-2.28.1.tar.gz. Cliquez avec le bouton droit sur le lien approprié et copiez-le dans votre presse-papiers.

De retour sur votre serveur, accédez au répertoire/tmp. Utilisez l'utilitairecurl ouwget et collez l'URL que vous avez copiée pour télécharger le fichier:

cd /tmp
curl -LO https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.1.tar.gz

Ensuite, extrayez l'archive pour créer la structure de répertoires source:

tar xzvf util-linux*

Maintenant que nous avons le code source et les outils de construction, nous pouvons construire le logiciel.

Configurer et compiler un fstrim lié de manière statique

Commencez par entrer la structure de répertoire extraite:

cd /tmp/util-linux*

Ensuite, nous devons configurer le logiciel. Puisque nous installons uniquement un binairefstrim isolé et que nous ne voulons pas écraser les utilitaires et les bibliothèques gérés par notre système de gestion de paquets, nous compilerons un binaire statique.

Pour ce faire, nous devons activer la liaison statique et désactiver les bibliothèques partagées. Configurez le logiciel avec ces propriétés en tapant:

./configure --enable-static --disable-shared

Une fois le logiciel configuré, vous pouvez compiler l'utilitairefstrim en tapant:

make fstrim

Cela compilera l'utilitaire en le plaçant dans le répertoire de niveau supérieur de l'archive extraite.

Copiez le binaire dans un répertoire qui estnot dans votre PATH. Étant donné que nous ne voulons appeler cela qu'à partir du scriptcron, nous devons nous assurer qu'il n'entre pas en concurrence avec lesfstrim installés par le système pour d'autres utilisations.

Nous allons créer un répertoire appelé/cron-bin et y placer le binaire:

sudo mkdir /cron-bin
sudo cp /tmp/util-linux*/fstrim /cron-bin

Nous avons maintenant accès à un utilitairefstrim plus fonctionnel.

Créer un script hebdomadaire pour exécuter fstrim

Maintenant, nous pouvons créer un nouveau script qui sera exécuté parcron chaque semaine. Ce sera exactement le même script que celui fourni avec Ubuntu 16.04, à la différence qu’il indiquera l’emplacement où nous avons placé notre binaire compilé statiquement.

Créez le fichier en tapant:

sudo nano /etc/cron.weekly/fstrim

À l'intérieur, collez les lignes suivantes. Cela exécutera notre nouveau binairefstrim avec l'option--all:

/etc/cron.weekly/fstrim

#!/bin/sh
# trim all mounted file systems which support it
/cron-bin/fstrim --all || true

Enregistrez et fermez le fichier lorsque vous avez terminé.

Rendre le script exécutable en tapant:

sudo chmod a+x /etc/cron.weekly/fstrim

Les démonscron etanacron exécuteront ce script une fois par semaine pour TRIMER les systèmes de fichiers.

Conclusion

Votre serveur Linux doit maintenant être configuré pour TRIM périodiquement tous les systèmes de fichiers pris en charge sur une base hebdomadaire. TRIM aide à maximiser les performances à long terme et la durée de vie de vos disques SSD.

Les opérations TRIM continues peuvent sembler idéales, mais elles peuvent ajouter un surcoût important aux opérations de système de fichiers normales. TRIM périodique constitue un bon compromis en relayant les informations clés nécessaires à la maintenance de routine du lecteur dans un travail planifié plutôt qu'en tant que composant de chaque opération de fichier.