Meine Partition /dev/sda3
auf einem SSD-Laufwerk enthält kein Dateisystem, aber es enthält Müll. Wie mache ich einen TRIM / DISCARD-Vorgang auf der gesamten Partition?
Meine Partition /dev/sda3
auf einem SSD-Laufwerk enthält kein Dateisystem, aber es enthält Müll. Wie mache ich einen TRIM / DISCARD-Vorgang auf der gesamten Partition?
Antworten:
Wenn Ihre Version von util-linux neu genug ist (September 2012), gibt es tatsächlich ein spezielles Tool. blkdiscard
Dies ist der beste Weg, dies zu tun:
sudo blkdiscard /dev/sda3
Wenn Sie jedoch Kompatibilität mit älteren Linux-Distributionsversionen benötigen, lesen Sie weiter ... Es gibt Fälle, in denen sich hdparm
/ wiper.sh
weigert, ein Volume zu berühren, da es sich nicht um eine Partition handelt. Daher benötigen wir darüber hinaus etwas.
Die von mir am besten unterstützte Möglichkeit besteht darin, die Tatsache zu nutzen, dass Linux-Swap-Volumes DISCARD unterstützen, wenn sie aktiviert sind. Die Wipefs am Ende sind vorhanden, sodass das Volume später nicht als Swap erkannt wird.
D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D
Dies gibt die DISCARD auf dem Großteil des Geräts aus.
blkdiscard
. Gefährlicher Befehl ... :)
WARNING: All data in the discarded region on the device will be lost!
Ich weiß, dass diese Frage ziemlich alt ist, aber ...
Der einfachste Weg, dies zu tun, besteht darin, einfach ein ext4-Dateisystem auf der Partition mit einer einigermaßen aktuellen Version von zu erstellen mkfs.ext4
. Das erste, was dieses Tool macht, ist das TRIMMEN der gesamten Partition. Danach können Sie die erstellten Daten mit dem gewünschten Dateisystem überschreiben.
(Ich habe dies gerade getan, um zum Beispiel eine neue vfat-Partition auf einer SD-Karte zu erstellen.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
scheint zu etwas weniger Schreibvorgängen zu führen als dies der -J size=4
Fall ist. (Basierend auf Experimenten mit einer spärlichen Datei anstelle einer physischen SSD und um du
zu überprüfen, wie viel geschrieben wurde.)
hdparm --trim-sector-range ist low level, es soll direkt mit der SSD kommunizieren, also keine Abhängigkeit vom Dateisystem. Wiper.sh verwendet dateisystemspezifische Programme, um freie (Dateisystem-) Regionen (Hardware-) SSD-Sektoren zuzuordnen. Sie verwenden hdparm, um diese zu kürzen.
Wenn Sie die Frage beantworten, können Sie diese Partition mit hdparm zuschneiden, aber Sie sollten sehr vorsichtig sein . Die Methode besteht darin, den von der Partition verwendeten Sektorbereich abzurufen und dann hdparm für diesen Sektorbereich zu verwenden. Wahrscheinlich müssen Sie mehrere Sektorbereiche übergeben, da jeder Bereich für --trim-sector-range maximal 65535 Sektoren haben kann.
fdisk -l kann Ihnen den Beginn und die Größe der Partitionen mitteilen. Achten Sie auf die von fdisk verwendeten Einheiten und auf die Sektorgröße Ihrer SSD.
Beispiel (meine SSD):
Device Boot Start End Blocks Id System
/dev/sdb1 2048 39070079 19534016 83 Linux
Um den Raum zu verwerfen , bevor dieser Partition, konnte ich trimmen 2047 (512 Byte Größe, auf meine SSD) Sektoren von Sektor beginnend 1: hdparm --trim-sector-ranges 1:2047
. Ich kann nicht ab Sektor 0 schneiden, da dies der MBR ist (keine Ahnung, wie es bei GPT geht).
Ich würde tun, um den von der Partition belegten Speicherplatz zu verwerfen hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
. Es kann als Skript geschrieben werden, aber ich werde jetzt kein Skript schreiben.
Nur um sicher zu gehen: Ich garantiere hier nichts, möglicherweise habe ich Sektoren falsch berechnet, mache ein Backup von allem, bevor ich --trim-sector-range effektiv nutze.
Hinweis : Wenn Sie den "leeren" Speicherplatz vor der ersten Partition zuschneiden, wie ich gezeigt habe, müssen Sie GRUB (oder den von Ihnen verwendeten Bootloader) vor dem Neustart neu installieren, da GRUB einen Teil davon auf "nicht verwendeten" Sektoren vor der ersten Partition speichert . Ich kenne keine anderen Bootloader, aber ich denke, es könnte der Fall sein, also pass auf dich auf.
wiper.sh
ist obsolet, fstrim
was viel sicherer ist, aber für diese spezifische Nutzung blkdiscard
schlägt beides. Im Jahr 2013 besteht keine Notwendigkeit, Rechenbereiche manuell zu riskieren.
Sie können sich das Skript ansehen, das wiper.sh
im hdparm-Paket enthalten ist. Es verwendet den Befehl hdparm, --trim-sector-ranges
um alle leeren Sektoren auf einer Partition zu TRIMMEN, zumindest wenn diese ein ext3 / 4-Dateisystem enthält. Ich bin mir nicht sicher, ob es mit unformatierten Partitionen funktioniert, aber Sie können es immer temporär mit ext4 formatieren.
wiper.sh
ausführen, wird fast die gesamte Partition mit Ausnahme der ext4-Metadaten gekürzt. Aber ich würde gerne die ganze Partition zuschneiden.
blkdiscard
kann auf Partitionen arbeiten, nicht nur auf ganzen Laufwerken. Ich habe es erfolgreich auf Fedora 20 getestet. Ich habe die Quellen überprüft blkdiscard
- es ist ein sehr einfaches Programm, das nichts über Partitionen weiß. Ich gehe davon aus, dass der Kernel die Übersetzung übernimmt.
Sei sehr vorsichtig, blkdiscard
stelle keine Fragen und zeige keine Fortschrittsinformationen.
Wenn blkdiscard nicht verfügbar ist, verwenden Sie dieses Skript und leiten Sie die Ausgabe an hdparm weiter. Das erste Argument ist die Anzahl der zu trimmenden Sektoren, das zweite ist der erste zu trimmende Sektor.
#! /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
In diesem interessanten Artikel wird die Verwendung von HDDErase zum Aufrufen der integrierten Funktion zum sicheren Löschen der SSD beschrieben.
blkdiscard --secure
tut.