Ma partition /dev/sda3
sur un lecteur SSD ne contient aucun système de fichiers, mais elle contient des ordures. Comment effectuer une opération TRIM / DISCARD sur toute la partition?
Ma partition /dev/sda3
sur un lecteur SSD ne contient aucun système de fichiers, mais elle contient des ordures. Comment effectuer une opération TRIM / DISCARD sur toute la partition?
Réponses:
Si votre version d'util-linux est suffisamment nouvelle (septembre 2012), il existe en fait un outil spécialement conçu blkdiscard
, c'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, lisez la suite ... Il y a des cas où hdparm
/ wiper.sh
refusez de toucher un volume parce que ce n'est pas une partition, nous avons donc besoin de quelque chose au-delà.
Le moyen le plus pris en charge que j'ai trouvé est de tirer parti du fait que les volumes d'échange Linux prennent en charge DISCARD lorsqu'ils sont activés. Les wipefs à la fin sont là, donc le volume n'est pas reconnu comme swap plus tard.
D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D
Cela émet la DISCARD sur la majorité de l'appareil.
blkdiscard
. Commande dangereuse ... :)
WARNING: All data in the discarded region on the device will be lost!
Je sais que cette question est assez ancienne, mais ...
La façon la plus simple de le faire 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 TRIM la partition entière. Une fois que vous avez fait cela, vous pouvez remplacer les données créées par le système de fichiers que vous souhaitez.
(Je viens de faire cela pour créer une nouvelle partition vfat sur une carte SD, par exemple.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
semble entraîner un peu moins d'écritures que le -J size=4
fait. (Basé sur des expériences utilisant un fichier clairsemé plutôt qu'un SSD physique et du
pour vérifier combien avait été écrit.)
hdparm --trim-sector-range est de bas niveau, il est censé parler directement au SSD, donc pas de dépendance sur le système de fichiers. Ce que wiper.sh fait, c'est utiliser des programmes spécifiques au système de fichiers pour mapper les régions libres (système de fichiers) aux secteurs (matériels) SSD, ils utilisent hdparm pour les couper.
En répondant à la question, vous pouvez utiliser hdparm pour découper cette partition, mais vous devez être très prudent . Pour ce faire, obtenez la plage de secteurs utilisée par la partition, puis utilisez hdparm sur cette plage de secteurs. Vous devrez probablement passer plusieurs plages de secteurs, car chaque plage de plages de secteurs --trim 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 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 2047 (512 octets de taille, sur mes SSD) secteurs à partir du secteur 1: hdparm --trim-sector-ranges 1:2047
. Je ne peux pas couper à 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 le ferais hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
. Il peut être scénarisé mais je ne vais pas en écrire un maintenant.
Juste pour être sûr: je ne garantis rien ici, je peux avoir des secteurs mal calculés, faire une sauvegarde de tout avant d'utiliser efficacement --trim-sector-range.
Remarque : si vous supprimez l'espace "vide" avant la première partition, comme je l'ai montré, assurez-vous de réinstaller GRUB (ou le chargeur de démarrage que vous utilisez) avant de redémarrer, car GRUB en stocke une partie sur les secteurs "inutilisés" avant la première partition . Je ne connais pas d'autres chargeurs de démarrage mais je suppose que cela peut être le cas, alors faites attention.
wiper.sh
est obsolète, fstrim
ce qui est beaucoup plus sûr, mais pour cette utilisation spécifique blkdiscard
bat les deux. En 2013, il n'est pas nécessaire de risquer manuellement les plages de calcul.
Vous pouvez jeter un œil au script wiper.sh
inclus avec le package hdparm. Il utilise la commande hdparm --trim-sector-ranges
pour TRIM tous les secteurs vides sur une partition, au moins si elle contient un système de fichiers ext3 / 4. Je ne sais pas si cela fonctionne avec des partitions non formatées, mais vous pouvez toujours le formater temporairement avec ext4.
wiper.sh
réduirait presque toute la partition à l'exception des métadonnées ext4. Mais je voudrais couper toute la partition.
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 connaît rien aux partitions. Je suppose que le noyau fait la traduction.
Soyez très prudent, blkdiscard
ne posez aucune question et ne montrez aucune information de progression.
Si blkdiscard n'est pas disponible, utilisez ce script et alimentez sa sortie vers hdparm. Le premier argument est le nombre de secteurs à rogner, le second est le premier secteur à rogner.
#! /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
Voici un article intéressant qui parle de l'utilisation de HDDErase pour invoquer la fonction d'effacement sécurisé intégrée du SSD, qui devrait vous donner ce que vous voulez:
blkdiscard --secure
.