Ich habe eine LUKS
Partition, mit /dev/sda1
der ich luksOpen --allow-discards
:
cryptsetup --allow-discards luksOpen /dev/sda1 root
Ich ext4
mounte dann das Dateisystem mit der discard
Option:
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/sda1
80% 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?
dmsetup table | grep allow_discards
Antworten:
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 :
Daher
fstrim
hä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:Ich habe einige Tests mit zwei SSDs durchgeführt
sda
undsdb
. Gleicher Hersteller, verschiedene Modelle, mit unterschiedlicher ATA-Konformität:Die beiden SSDs unterstützen TRIM unterschiedlich:
Ich kann bestätigen, dass
fstrim
das 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
fstrim
Daten 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
fstrim
und einem nachfolgenden Lesevorgang müssen Sie möglicherweise den Cache löschen, z. B. mit: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
discard
Mount-Option ermöglicht kontinuierliches TRIM, dh jedes Mal, wenn Dateien gelöscht werden. Es ist nicht erforderlich vonfstrim
. 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.quelle
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:
quelle
Verwerfen ist nicht dasselbe wie Null.
Wenn Sie mit cryptsetup auf Null setzen möchten, können Sie das fs, den Crypt-Block und den nicht verwendeten Speicherplatz verkleinern.
Wenn Sie wissen möchten, ob die Trimmung funktioniert hat, sollte ein Geschwindigkeitstest nach starker Beanspruchung ein Indikator sein.
https://linux.die.net/man/8/fstrim https://en.m.wikipedia.org/wiki/Trim_(computing)
quelle
df
Das Melden von freiem Speicherplatz bedeutet nicht, dass der Speicherplatz auf Null gesetzt ist.trim
teilt dem Speichergerät mit, dass die Blöcke nicht verwendet werden. Ich denke nicht, dass das sie nullt.quelle