Purger et réinitialiser un SSD sous Ubuntu avec blkdiscard

Présentation générale

L’utilitaire blkdiscard s’impose comme l’une des méthodes les plus directes et performantes sous Linux pour réinitialiser les cellules d’un support flash (SSD SATA ou NVMe) via l’envoi d’instructions TRIM au contrôleur. Afin de se familiariser avec ses options indispensables sans mettre en péril des données critiques, ce guide détaille une démarche pratique reposant sur un disque virtuel loopback. Vous découvrirez ainsi la mécanique interne de cette commande pour préparer un disque à un réemploi optimal ou restaurer ses débits nominaux en toute sérénité.

1. Détection des périphériques blocs et validation du support TRIM

Avant d’enclencher la remise à zéro d’un disque électronique, la première étape consiste à s’assurer que le matériel prend effectivement en charge les primitives de défausse (discard/TRIM). Pour inspecter la hiérarchie des disques et leurs attributs associés, saisissez la commande lsblk --discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS.
L’affichage des colonnes DISC-GRAN et DISC-MAX fournit l’indicateur clé : des grandeurs non nulles (telles que 512B et 2T) démontrent formellement que le disque désigné (nvme0n1) gère nativement le protocole TRIM.

Vérification de la compatibilité TRIM avec lsblk

2. Déploiement d’un périphérique loopback dédié aux tests

Afin d’écarter tout risque sur les unités de stockage physiques, nous générons un fichier conteneur de 64 Mo saturé de bruit aléatoire grâce à la commande dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none.

Génération d’une image disque de test avec dd

Ce fichier image doit ensuite être rattaché au sous-système de blocs sous la forme d’un lecteur virtuel en appelant sudo losetup -fP /tmp/test_disk.img.

Association de l’image disque à un périphérique boucle avec losetup

Pour manipuler ce lecteur en boucle sans ressaisir manuellement son identifiant, mémorisons son chemin dans une variable de session via LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Récupération du chemin du périphérique loopback dans une variable

L’affectation correcte de cette variable $LOOP_DEV se vérifie immédiatement dans la console en exécutant echo "생성된 디바이스: $LOOP_DEV".
Le terminal confirme la prise en compte du nœud /dev/loop0 pour les étapes suivantes.

Vérification du nom du périphérique alloué

Avant de lancer le moindre effacement, contrôlons que la zone initiale renferme bien les données aléatoires attendues à l’aide de sudo hexdump -C -n 128 $LOOP_DEV.
Le vidage hexadécimal des 128 premiers octets met en évidence des séquences d’octets dispersées et totalement hétérogènes.

Examen hexadécimal des données initiales avec hexdump

3. Purge intégrale des blocs avec blkdiscard

Assurons-nous une nouvelle fois que le pointeur d’environnement référence bien le bon disque virtuel au moyen de LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Actualisation de la variable pointant sur le périphérique virtuel

Le vidage de la totalité des secteurs du lecteur s’ordonne en sollicitant le mode détaillé par sudo blkdiscard -v $LOOP_DEV.
Le compte-rendu confirme que les 67 108 864 octets (correspondant précisément aux 64 Mo du volume) situés à partir de l’offset 0 ont été abandonnés par le noyau.

Exécution de blkdiscard en mode verbeux sur tout le volume

Pour valider l’impact de cette purge sur les données sous-jacentes, interrogeons de nouveau l’en-tête avec sudo hexdump -C -n 128 $LOOP_DEV.
Le retour ne produit plus aucun résidu ou affiche une séquence uniformément vierge, certifiant la suppression effective des données antérieures.

Constat de la remise à zéro des blocs après discard

4. Ciblage granulaire par offset et longueur (-o, -l)

Pour illustrer la réinitialisation ciblée d’un segment précis, redéfinissons notre variable de périphérique avec LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Réassignation du chemin loopback avant le test partiel

Afin d’établir une empreinte témoin dans la plage de test, écrivons une chaîne reconnaissable sur les 10 premiers mégaoctets via echo "TESTDATA_RELOAD" | sudo dd of=$LOOP_DEV bs=1M count=10 status=none.

Écriture d’un jeu de données de contrôle sur le volume

L’effacement sélectif est alors restreint au bloc de départ de 10 Mo en appliquant les paramètres appropriés : sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV.
Les informations retournées confirment le traitement d’une tranche exacte de 10 485 760 octets (10 Mo) à compter de l’offset 0.

Purge sélective des dix premiers mégaoctets avec les options -o et -l

Un coup d’œil aux 64 premiers octets via sudo hexdump -C -n 64 $LOOP_DEV permet de valider le résultat.
La zone ciblée a été totalement purgée et ne contient plus la signature injectée lors de la phase précédente.

Contrôle hexdump de la zone partielle réinitialisée

5. Nettoyage de l’environnement virtuel et recommandations

Au terme de cet atelier pratique, réactualisons la désignation du lecteur loopback avant sa fermeture à l’aide de LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Vérification finale du périphérique loopback avant suppression

Rompons la liaison du disque virtuel avec la couche système en saisissant sudo losetup -d $LOOP_DEV.

Détachement du périphérique virtuel avec losetup -d

Le fichier image intermédiaire peut dorénavant être supprimé du stockage hôte en lançant rm -f /tmp/test_disk.img.

Suppression du fichier image temporaire avec rm

Pour achever l’entretien de la machine, assurons-nous qu’aucun périphérique virtuel orphelin ne subsiste via losetup -a.
L’absence totale de sortie confirme le nettoyage irréprochable de l’environnement de test.

Vérification de la désallocation complète avec losetup -a

Vous disposez à présent d’une vue d’ensemble complète sur l’exploitation de blkdiscard sous Ubuntu pour assainir vos unités SSD à haute vitesse.
Gardez systématiquement à l’esprit que ce traitement efface irréversiblement les structures de données : revérifiez toujours avec rigueur l’identifiant du lecteur cible avant d’exécuter cette commande en production.