Vergewissern Sie sich unabhängig davon, dass TRIM auf SSD funktioniert

13

Ich habe eine LUKSPartition, mit /dev/sda1der ich luksOpen --allow-discards:

cryptsetup --allow-discards luksOpen /dev/sda1 root

Ich ext4mounte dann das Dateisystem mit der discardOption:

grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0

Ich schneide dann freien Speicherplatz auf der gemounteten Partition:

fstrim -v /

mit df, ich sehe, /hat 80% freien Speicherplatz. Das bedeutet, dass /dev/sda180% der Festplatte binäre Nullen sind.

Wenn ich das Image mit klone cat

cat /dev/sda1 > sda1.img

und komprimieren Sie das Bild mit xz, ich würde erwarten, dass alle Nullen auf der Festplatte komprimiert werden. Da die 20% der Daten auf der Festplatte verschlüsselt sind, sollten sie zufällig aussehen und nicht komprimierbar sein. Daher sollte das xz-komprimierte Bild ungefähr gleich sein. 20% der Rohgröße.

Das resultierende xz-komprimierte Bild hat jedoch ungefähr dieselbe Größe wie das Original.

Ist meine Argumentation richtig?

Warum wird meine Theorie nicht in die Praxis umgesetzt?

Martin Vegter
quelle
2
unix.stackexchange.com/a/85880/30851 und auchdmsetup table | grep allow_discards
frostschutz

Antworten:

8

Deine Logik ist nicht falsch. Sie ist jedoch nur gültig, wenn einige Bedingungen erfüllt sind.

Der Befehl TRIM , wie im ATA-Befehlssatz angegeben , kann die Sektoren, für die er ausgegeben wird, auf Null setzen oder nicht.
Tatsächlich konzentriert sich der Standard darauf, welche Daten nach der Ausgabe von TRIM 1 zurückgegeben werden müssen :

Die folgenden Verhaltensweisen sind in dieser Norm für Sektoren festgelegt, die das Gerät abschneidet (siehe 7.5.3.3):

a) nicht deterministisch - die Daten als Antwort auf ein Lesen aus einem zugeschnittenen Sektor können sich für jedes Lesen ändern, bis der Sektor vom Host geschrieben wird;
b) Deterministisches Lesen nach dem Zuschneiden (DRAT) - Die Daten, die als Antwort auf ein Lesen eines zugeschnittenen Sektors zurückgegeben werden, ändern sich nicht, können sich jedoch von den zuvor zurückgegebenen Daten unterscheiden. und
c) Nullen nach dem Zuschneiden lesen (RZAT) - die Daten, die als Antwort auf ein Lesen des zugeschnittenen Sektors zurückgegeben werden, sind Null.

[...] Sowohl für DRAT- als auch für nicht deterministische Speichergeräte werden die Daten als Antwort auf einen Lesebefehl an eine LBA zurückgegeben, die erfolgreich gekürzt wurde:

a) können die zuvor zurückgegebenen Daten für die angegebene LBA sein;
b) kann ein von der Speichervorrichtung erzeugtes Muster sein; und
c) es handelt sich nicht um Daten, die zuvor vom Host in eine andere LBA geschrieben wurden.

Daher fstrimhängt es von den implementierten Funktionen ab , wonach Ihr Gerät zurückkehrt . Sofern RZAT nicht unterstützt wird, gilt die Annahme, dass die von einem zugeschnittenen Gerät gelesenen Daten nur Nullen sind, nicht.

Sie können Folgendes hdparmüberprüfen:

sudo hdparm -I /dev/sdX | grep -i trim

Ich habe einige Tests mit zwei SSDs durchgeführt sdaund sdb. Gleicher Hersteller, verschiedene Modelle, mit unterschiedlicher ATA-Konformität:

$ sudo hdparm -i /dev/sdb
 ...
 Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7
 ...

$ sudo hdparm -i /dev/sda
 ...
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7
 ...

Die beiden SSDs unterstützen TRIM unterschiedlich:

$ sudo hdparm -I /dev/sda | grep -i trim
           *    Data Set Management TRIM supported (limit 1 block)

$ sudo hdparm -I /dev/sdb | grep -i trim
           *    Data Set Management TRIM supported (limit 8 blocks)
           *    Deterministic read ZEROs after TRIM

Ich kann bestätigen, dass fstrimdas Laufwerk, das "Deterministic read ZEROs after TRIM" (RZAT) unterstützt, die betroffene Partition nach der Ausgabe fast vollständig auf Null gesetzt zu haben scheint. Umgekehrt scheint das andere Laufwerk nur einen kleinen Teil des freigewordenen Speicherplatzes auf Null gesetzt zu haben (oder auf andere Weise durch ein stark komprimierbares Muster ersetzt zu haben).

1 Online-Quelle: INCITS 529: Informationstechnologie - ATA / ATAPI-Befehlssatz - 4 (ACS-4)


Hinweis zum Testen:

Wie frostschutz in Kommentaren anmerkt , kann ein Read After fstrimDaten aus dem Cache des Betriebssystems und nicht aus dem gekürzten Gerät zurückgeben. Es ist zum Beispiel das, was in dieser Frage passiert ist .
(Ich würde auch auf diese Antwort auf dieselbe Frage für eine alternative Methode zum Testen von TRIM verweisen ).

Zwischen fstrimund einem nachfolgenden Lesevorgang müssen Sie möglicherweise den Cache löschen, z. B. mit:

echo 3 | sudo tee /proc/sys/vm/drop_caches

Abhängig von der Größe der Partition, mit der Sie spielen, reicht es möglicherweise aus, den Cache nicht zu löschen, damit Ihre Tests fehlschlagen.


Hinweis zu Ihrem Setup:

Die discardMount-Option ermöglicht kontinuierliches TRIM, dh jedes Mal, wenn Dateien gelöscht werden. Es ist nicht erforderlich von fstrim. Tatsächlich sind On-Demand-TRIM und Continuous-TRIM zwei verschiedene Methoden, um TRIM-Operationen zu steuern. Für weitere Informationen verweise ich auf Solid State Drive im Arch Linux Wiki, in dem dieses Thema ausführlich behandelt wird.

Fra-San
quelle
Linux gibt möglicherweise auch Daten ungleich Null nach TRIM aus dem Cache zurück, obwohl die SSD sie erneut als Nullen liest. Dies war ein Problem mit meinem Ja-Trimm-Test dort unix.stackexchange.com/a/85880/30851 , könnte aber auch mit dem Lesen der Rohdaten vor und nach TRIM zusammenhängen. Wenn Sie also nicht die erwartete Null erreichen, legen Sie die Caches für alle Fälle ab.
Frostschutz
@frostschutz Guter Punkt! Ich ging irgendwie davon aus, dass das OP, da es ein "Root" -Volume erwähnte, zu groß gewesen wäre, als dass ein wesentlicher Teil davon in den Speicher passen würde. Aber definitiv war mir der Cache während meiner Tests im Weg - das schlug kläglich fehl, bis ich anfing ihn fallen zu lassen. Ich werde meine Antwort aktualisieren.
Fra-San
2

Verfügt die SSD über eine integrierte Hardwareverschlüsselungsschicht? Wenn es einen gibt, sind die TRIMmed-Blöcke auf der Raw-Hardware-Ebene möglicherweise nur Nullen (oder möglicherweise nur Einsen). Da der Computer sie jedoch durch die Verschlüsselungsschicht sieht, werden sie nach dem Übergeben des Alls als Pseudozufalls-Kauderwelsch angezeigt -zeroes roher Block durch den Entschlüsselungsprozess.

Eine solche Hardware-Verschlüsselungsschicht hätte einige Vorteile:

  • Dies würde eine sehr schnelle Sicherheitslöschfunktion ermöglichen: Lassen Sie das Laufwerk einfach den in der Hardwareverschlüsselungsschicht verwendeten Originalschlüssel zerstören und durch einen neuen ersetzen, und alle Daten können für die meisten praktischen Zwecke sofort nicht wiederhergestellt werden.
  • Da alle Daten, die auf die Rohhardwareebene treffen, verschlüsselt würden, würde garantiert, dass sie pseudozufällig aussehen und somit weitgehend homogen sind. Dies kann dazu beitragen, heiße / kalte Stellen zu vermeiden und die Verschleißschätzung erheblich zu vereinfachen.
telcoM
quelle
0

df Das Melden von freiem Speicherplatz bedeutet nicht, dass der Speicherplatz auf Null gesetzt ist.

trimteilt dem Speichergerät mit, dass die Blöcke nicht verwendet werden. Ich denke nicht, dass das sie nullt.

Strg-Alt-Delor
quelle