42 votes

Comment recadrer/éliminer une partition entière SSD sur Linux ?

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

57voto

David Masters Points 3420

Si votre version de util-linux est suffisamment récente (septembre 2012), il existe en fait un outil spécialement conçu, blkdiscard, qui est la meilleure façon de le faire :

sudo blkdiscard /dev/sda3

Mais si vous avez besoin de compatibilité avec les anciennes versions de distribution Linux, continuez à lire... Il y a des cas où hdparm/wiper.sh refusent d'intervenir sur un volume parce qu'il n'est pas une partition, donc nous avons besoin de quelque chose au-delà de cela.

La manière la plus prise en charge que j'ai trouvée est de profiter du fait que les volumes swap Linux prennent en charge DISCARD lorsqu'ils sont activés. La commande wipefs à la fin est là pour que le volume ne soit pas reconnu comme un swap plus tard.

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

Cela envoie la commande DISCARD sur la majorité du dispositif.

10voto

lorddev Points 163

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

La façon la plus simple de faire cela est de simplement 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 cet outil fait est de TRIM la partition entière. Une fois que vous avez fait cela, vous pouvez remplacer les données qu'il a créées par le système de fichiers de votre choix.

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

9voto

spuk Points 248

Hdparm --trim-sector-ranges est de niveau bas, il est censé parler directement au SSD, donc aucune dépendance au système de fichiers. Ce que fait wiper.sh, c'est utiliser des programmes spécifiques au système de fichiers pour mapper les régions libres (du système de fichiers) aux secteurs (matériels) du SSD, puis utiliser hdparm pour les effacer.

En répondant à la question, vous pouvez utiliser hdparm pour effacer cette partition, mais vous devez être très prudent. La méthode consiste à obtenir la plage de secteurs utilisée par la partition, puis à utiliser hdparm sur cette plage de secteurs. Probablement, vous devrez passer plusieurs plages de secteurs, car chaque plage pour --trim-sector-ranges peut avoir au maximum 65535 secteurs.

fdisk -l peut vous indiquer le début et la taille des partitions. Faites attention aux unités utilisées par fdisk et à la taille de 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 pourrais effacer 2047 secteurs (de taille 512 octets, sur mon SSD) à partir du secteur 1 : hdparm --trim-sector-ranges 1:2047. Je ne peux pas effacer à partir du secteur 0 car c'est le MBR (je ne sais pas comment ça se passe pour GPT).

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

Aussi pour être sûr : je ne garantis rien ici, j'ai peut-être mal calculé les secteurs, faites une sauvegarde de tout avant d'utiliser effectivement --trim-sector-ranges.

Remarque : si vous effacez l'espace "vide" avant la première partition, comme je l'ai montré, assurez-vous de réinstaller GRUB (ou tout autre chargeur de démarrage que vous utilisez) avant de redémarrer, car GRUB stocke une partie de celui-ci sur des secteurs "inutilisés" avant la première partition. Je ne connais pas les autres chargeurs de démarrage mais je suppose que c'est peut-être le cas, alors soyez prudent.

7voto

Jaap Eldering Points 8835

Vous pourriez jeter un œil au script wiper.sh inclus dans le package hdparm. Il utilise la commande hdparm --trim-sector-ranges pour TRIMMER tous les secteurs vides sur une partition, du moins si elle contient un système de fichiers ext3/4. Je ne suis pas sûr que cela fonctionne avec des partitions non formatées, mais vous pourriez toujours la formater temporairement avec ext4.

5voto

proski Points 161

blkdiscard peut fonctionner sur des partitions, pas seulement sur des disques 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 sait rien des partitions. Je suppose que le noyau fait la traduction.

Soyez très prudent, blkdiscard ne pose aucune question et ne montre aucune information de progression.

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

#! /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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X