web-dev-qa-db-fra.com

Comment TRIM / DISCARDER une partition SSD entière sur Linux?

Ma partition /dev/sda3 sur un lecteur SSD ne contient aucun système de fichiers, mais contient des déchets. Comment faire une opération TRIM/DISCARD sur toute la partition?

27
pts

Si votre version de util-linux est suffisamment nouvelle (septembre 2012), il existe en fait un outil spécialement conçu, blkdiscard , c'est le meilleur moyen de le faire:

Sudo blkdiscard /dev/sda3

Mais si vous avez besoin de compatibilité avec les anciennes versions de la distribution Linux, lisez la suite ... Il existe des cas où hdparm/wiper.sh refuse de toucher un volume car il ne s'agit pas d'une partition. Nous avons donc besoin de quelque chose de plus.

La méthode la plus répandue que j'ai trouvée consiste à tirer parti du fait que les volumes d'échange Linux prennent en charge DISCARD lorsqu'ils sont activés. Le wipefs à la fin est là pour que le volume ne soit pas reconnu comme échange plus tard.

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

Ceci émet le message DISCARD sur la majorité du périphérique.

39
robbat2

Je sais que cette question est assez ancienne, mais ...

Le moyen le plus simple consiste à créer un système de fichiers ext4 sur la partition avec une version raisonnablement récente de mkfs.ext4. La première chose que fait cet outil est TRIM la partition entière. Une fois que vous avez terminé, vous pouvez écraser les données créées avec le système de fichiers de votre choix.

(Je viens de faire cela pour créer une nouvelle partition vfat sur une carte SD, par exemple.)

9
David Given

hdparm --trim-secteur-gammes est de bas niveau, il est supposé parler directement au SSD, donc pas de dépendance du système de fichiers. Ce que fait wiper.sh, c’est qu’il utilise des programmes spécifiques au système de fichiers pour mapper des régions libres (système de fichiers) sur des secteurs SSD (matériel), et utilise hdparm pour les couper.

En répondant à la question, vous pouvez utiliser hdparm pour couper cette partition, mais vous devriez être très prudent. Pour ce faire, vous devez obtenir la plage de secteurs utilisée par la partition, puis utiliser hdparm sur cette plage de secteurs. Vous devrez probablement passer par plusieurs plages de secteurs, car chaque plage de - trim-secteurs-secteurs peut avoir au maximum 65 535 secteurs.

fdisk -l peut vous dire le début et la taille des partitions. Faites attention aux unités utilisées par fdisk et à la taille du secteur de votre SSD.

Exemple (mon SSD):

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

Pour supprimer l'espace avant cette partition, je pouvais couper les secteurs de 2047 (taille de 512 octets, sur mon SSD) à partir du secteur 1: hdparm --trim-sector-ranges 1:2047. Je ne peux pas couper à partir du secteur 0 parce que c'est le MBR (je ne sais pas comment ça se passe pour le GPT).

Pour supprimer l'espace utilisé par la partition, je ferais hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 .... Cela peut être écrit mais je ne vais pas en écrire un maintenant.

En outre, pour être juste sûr: je ne garantis rien ici, il se peut que mes secteurs soient mal calculés, faites une copie de sauvegarde de tout avant d’utiliser efficacement - trim-sector-secteurs.

Note: si vous coupez l'espace "vide" avant la première partition, comme je l'ai montré, veillez à réinstaller GRUB (ou le chargeur de démarrage que vous utilisez) avant de redémarrer, comme GRUB en stocke une partie sur des secteurs "non utilisés" avant la première partition. Je ne connais pas d'autres chargeurs de démarrage, mais je suppose que c'est peut-être le cas, alors faites attention.

8
spuk

Vous pouvez consulter le script wiper.sh inclus dans le package hdparm. Il utilise la commande hdparm --trim-sector-ranges pour TRIMER tous les secteurs vides d’une partition, du moins s’il contient un système de fichiers ext3/4. Vous ne savez pas si cela fonctionne avec des partitions non formatées, mais vous pouvez toujours le formater temporairement avec ext4.

6
Jaap Eldering

blkdiscard peut fonctionner sur des partitions, pas seulement sur des lecteurs entiers. Je l'ai testé avec succès sur Fedora 20. J'ai vérifié les sources de blkdiscard - c'est un programme très simple qui ne connaît rien des partitions. Je suppose que le noyau fait la traduction.

Soyez très prudent, blkdiscard ne pose pas de question et ne montre aucune information sur l’avancement.

Si blkdiscard n'est pas disponible, utilisez ce script et transmettez sa sortie à hdparm. Le premier argument est le nombre de secteurs à couper, le second est le premier secteur à couper.

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done
4
proski