fstrim schneidet mehr als die Hälfte der Partitionsgröße ab, obwohl die Partition mit Discard montiert ist

8

Als ich meine SSD installiert habe, habe ich sie nur montiert discardund nicht geschwitzt. Heute habe ich jedoch über die Vor- und Nachteile der Verwendung gelesen fstrimund beschlossen, das Programm auszuführen, um eine Vorstellung davon zu bekommen, wie lange es tatsächlich dauern würde (immer noch mit meinen Partitionen discard). Der Befehl dauerte sowohl auf meiner Root- als auch auf meiner Home-Partition einige Minuten. Für meine Home-Partition habe ich Folgendes verwendet -vund erhalten:

$ sudo fstrim -v /home
/home: 137494052864 bytes were trimmed

Dies ist mehr als die Menge an freiem Speicherplatz auf der Partition!

$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       206G   78G  118G  40% /home

Nachfolgende Läufe enden in weniger als einer Sekunde, z.

$ sudo fstrim -v /home
/home: 0 bytes were trimmed

Wenn ich die Partition schon immer gemountet habe discard, fstrimsollte ich dann nicht so eine große Datenmenge kürzen? Die discardOption ist definitiv aktiviert, hier sind die relevanten fstabZeilen:

UUID=xxxxxxxx...    /          ext4   noatime,discard,errors=remount-ro  0      1
UUID=xxxxxxxx...    /home      ext4   noatime,discard,errors=remount-ro  0      2

Und mountAusgangsleitungen:

/dev/disk/by-uuid/xxxxxxxx... on / type ext4 (rw,noatime,discard,errors=remount-ro,stripe=128,data=ordered)
/dev/sda2 on /home type ext4 (rw,noatime,discard,errors=remount-ro,stripe=128,data=ordered)

Die SSD ist eine TOSHIBA THNSNS256GMCP. Warum passiert das?

Graeme
quelle

Antworten:

12

Zwei Dinge hier:

  1. fstrimschneidet alle Daten ab, die im Dateisystem nicht zugeordnet sind (naja, nicht wirklich alle Daten, nur die Datenblöcke, die nicht zugeordnet sind, ich glaube nicht, dass die nicht verwendeten Teile der Inode-Tabelle oder die Teile nicht vollständig verwendeter Blöcke sind getrimmt), unabhängig davon, ob discardverwendet wird oder nicht. fstrimIch kann nicht wissen, welche dieser nicht zugewiesenen Blöcke "getrimmt" wurden oder noch nicht in der Vergangenheit, aber es (eigentlich der Kernel, die ganze fstrimArbeit wird in der erledigt FITRIM ioctl) verfolgt jedoch, welche Blockgruppe wurden gekürzt und werden nicht erneut gekürzt, wenn seitdem keine Zuordnung in dieser Blockgruppe mehr erfolgt ist, es sei denn, Sie fordern ein FITRIM mit einer geringeren Mindestausdehnungslänge an (von der Überprüfung des ext4-Codes kann es für andere anders sein Dateisysteme), was erklärt, warum Sie beim nächsten Lauf 0 erhalten.

    Beachten Sie, dass es nicht schadet trimmen einen Block, der bereits getrimmt wurde. Das sagt der SSD nur noch einmal, dass sie damit machen kann, was sie will (wie zum Beispiel löschen, damit sie wieder für etwas anderes verwendet werden kann).

  2. Bei der dfAusgabe berücksichtigt der Wert "verfügbar" nicht den Speicherplatz, für den "reserviert" rootist. Sie werden feststellen, dass 206 - 76 130 G und nicht 118 G sind. 12G (ca. 5%) sind reserviert. Sehen Sie, um tunefs -mzu ändern, wie viel reserviert ist.
Stéphane Chazelas
quelle
1
Wenn Sie fstrimalso nicht wissen, was bereits zugeschnitten wurde, warum werden beim zweiten Mal 0 Byte gemeldet? Sicherlich muss dies von der Festplatte kommen, aber warum sollte es dann beim ersten Mal einen so großen Zuschnitt melden? Sicherlich wäre die Festplatte unabhängig davon, ob sie verwendet wurde discardoder trimnicht.
Graeme
1
@ Graeme, argh, guter Punkt. fstrim verwendet das FITRIM ioctl und es ist der Kernel, der die ganze Arbeit erledigt und das Ergebnis an fstrim meldet. Ich nehme an, der Kernel verfolgt, was bereits zugeschnitten wurde, aber das kann er nur, seit er gebootet ist. Wird die Antwort untersuchen und aktualisieren.
Stéphane Chazelas
1
Ok, ja, der Kernel muss verfolgen, was seit dem Booten getrimmt wurde. Wenn ich neu starte und einen anderen mache fstrim, erhalte ich ungefähr die gleiche Ausgabe.
Graeme
@ Graeme, siehe meine Bearbeitung.
Stéphane Chazelas
1
fstrimgibt nur das entsprechende aus ioctl, alles andere ist die Entscheidung des Dateisystems, und die Dateisysteme verhalten sich sehr unterschiedlich. ext4versucht zu vermeiden, dass dieselben Dinge immer und immer wieder xfsgekürzt werden , kümmert sich nicht darum und schneidet alles ab, was kostenlos ist, andere tun möglicherweise andere Dinge - wenn sie es überhaupt unterstützen ... wenn es nicht vorhersehbar ist, beschweren Sie sich beim Dateisystem.
Frostschutz