[How to] CyanogenMod und TRIM

fireburner

fireburner

Stammgast
371
Wichtiger Hinweis:
Weder ich, noch Android-Hilfe.de, noch Lanchon oder XDA übernehmen die Haftung, wenn irgendetwas schief geht und euer Gerät Schaden nimmt. Wenn ihr euch nicht sicher seid, was ihr tut, dann fragt erst hier nach, bevor ihr loslegt.



Der TRIM Befehl könnte dem ein oder anderen von SSDs bekannt vorkommen. Kurz gesagt sorgt der TRIM Befehl dafür, das die Speicherabnutzung geringer ist und kann das Filesystem auch beschleunigen. Mehr dazu auf Wikipedia.

Alle CyanogenMod Versionen haben TRIM aber nicht integriert (CM13 hat TRIM ab der Nightly vom 03.03.2016), da durch den emmc Bug der Speicher kaputt gehen konnte. Diese Bugs sind aber seit JellyBean behoben, weshalb dem TRIM eigentlich nichts entgegensteht.
Wer eine genaue Diskussion über das für und wieder lesen möchte, kann sich gerne den passenden XDA Thread dazu ansehen. (auf Englisch)



--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Wichtige Informationen
  • Damit TRIM funktioniert ist ein TRIM-Kernel erforderlich
    Dann kann sowohl in der Recovery als auch im laufenden System getrimmt werden
    Update: Ab der Nightly vom 03.03.2016 ist TRIM in CM13 integriert. Ein seperater
    TRIM-Kernel ist nicht mehr nötig!
  • Der TRIM-Kernel muss nach jedem CM-Update neu geflasht werden (entfällt bei CM13 ab dem 04.03.2016)
    ----------------------------------------------------------------------------------------------------------------------
  • Alle Shell Befehle können sowohl im lokalen Terminal als auch in der ADB-Shell ausgeführt werden
  • Bei den Shell-Befehlen ist es sehr wichtig, auf die Groß- und Kleinschreibung zu achten
  • Eine Root-Shell bekommt man durch den Terminal Befehl
    Code:
    su
  • Die Root-Shell sollte nach dem Gebrauch wieder geschlossen werden
    Code:
    exit
  • Die Skriptdateien wurden auf die aktuellste Version angepasst 20160225
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Wie bekomme ich also jetzt TRIM Unterstützung für mein CyanogenMod?

Dazu müsst ihr euch den passenden Kernel von @Lanchon hier herunterladen. (für CM11, CM12.1 und CM13 verfügbar)
Diese Kernel bringen gleichzeitig eine Unterstützung für IsoRec mit. Was IsoRec ist findet ihr im CM13 oder CM12.1 Thread.
Update: Ab der Nightly vom 03.03.2016 ist TRIM in CM13 integriert. Ein seperater
TRIM-Kernel ist nicht mehr nötig!


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Wie kann ich jetzt trimmen?

CM trimmt automatisch (ca. alle 24h), wenn folgende Bedingungen erfüllt sind:
- natürlich muss ein Kernel mit TRIM Support installiert sein
- euer S2 wurde seit 1h nicht mehr benutzt (keine Interaktion)
- der Akku ist zu 80% geladen, oder das Ladegerät is angeschlossen und der Akku hat mindestens 30% Ladezustand
Ergo wird euer Gerät also wenn ihr am Schlafen und Laden seit, automatisch getrimmt.

Dabei werden folgende Partitionen getrimmt:
/cache /efs /preload /data
/system kann nicht getrimmt werden, da /system als Read-Only gemountet ist.
Die interne SD wird nicht getrimmt (vfat unterstützt den TRIM Befehl nicht). Falls ihr eure interne SD als ext4 formatiert habt, wird aber trotzdem nicht automatisch getrimmt.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Wie kann ich manuell trimmen?

Dazu kann man in eine Root-Shell folgendes eingeben:
Code:
vdc fstrim dotrim
Hiermit werden /cache /efs /preload /data getrimmt.
(Dieser Befehl funktioniert auch mit Toybox)


Sofern Busybox installiert ist, kann man auch einzelne Partitionen trimmen. CM11+Cm12.1 haben Busybox integriert. Seit CM13 wurde Busybox durch Toybox ersetz, welches leider folgendes Kommando (noch?) nicht unterstützt, weshalb Busybox für den folgenden Befehl manuell installiert werden muss (siehe Unten).
Das TWRP Recovery hat sein eigenes integriertes Busybox, weshalb diese Befehle dort auch funktionieren.
Dazu gibt man folgendes in eine Root-Shell ein:
Code:
fstrim -v /partitionx
partitionx
ist dabei die gewünschte Partition.
Damit kann man jede Partition manuell trimmen. Möchte man /system trimmen, muss man dies dazu als Read-Write mounten:
Code:
mount -o rw,remount /system
Und nach dem trimmen, wieder als Read-Only:
Code:
mount -o ro,remount /system
(Root-Shell ist für alle Drei Befehle erforderlich)


Wem dies zu umständlich ist, der kann sich die Trimmer App laden.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Trimmen der /system Partition und der internen SD nach einem CM-Update im TWRP IsoRec recovery

Hierfür ist ein IsoRec TWRP nötig.
Nach dem Flashen des CM-Updates, muss zuerst der TRIM-Kernel neu geflasht werden.(entfällt bei CM13 ab dem 03.03.2016)

Anschließend kann das angehängte Skript von Lanchon geflasht werden, wodurch alle Partitionen (außer vfat Partitionen) auf etwaige Fehler hin überprüft und getrimmt werden. (Ich habe den Namen von Lanchons Skript von hier hier so angepasst, dass es nur trimmt und das Dateisystem überprüft)
Wichtig: Bei Fragen und Problemen zu dem Skript, bitte den entsprechenden Thread verwenden.


Wenn ihr die interne SD als vfat formatiert habt (standard) dann nutzt das das Skript mit dem Namen:
lanchon-repit-20160923-i9100.zip
vfat ist Standard beim S2 für die interne SD. Wenn ihr also nicht bewusst, auf ext4 formatiert habt, müsst ihr diese Version nehmen!

Wenn ihr die interne SD als ext4 formatiert habt, müsst ihr folgendes Skript nehmen:
lanchon-repit-20160923-sdcard=++ext4-i9100.zip


Falls ihr euch nicht sicher seid, ob vfat oder ext4, dann gebt folgendes in die Root-Shell ein und sucht nach mmcblk0p11 (interne SD)
Code:
blkid

Warnung: Bei diesen Dateien handelt es sich um eine abgewandelte Version des
Repartitionierungsskriptes von hier bzw. hier hier!
Dazu ist es wichtig, den Dateinamen so zu belassen wie er ist, damit nur das Dateisystem
überprüft und getrimmt wird!


Der MD5-Hash der angehängten Dateien ist für beide:

554b8eea05db3be6c67d1012b7fd0b36

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Wie kann ich nachprüfen, ob getrimmt wurde?

In einer Root-Shell folgendes eintippen:
Code:
logcat -d | grep "Trimmed"
Der Output kann ich in eine Textdatei umgeleitet werden:
Code:
logcat -d | grep "Trimmed" > /storage/pfadzursd/trim.txt
pfadzursd ist dabei die Nummer eurer internen oder externen SD-Karte
(schaut im CM-Dateimanager, falls ihr nicht wisst welche Nummer gemeint ist)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Erklärung zur Funktion von Flashspeichern und TRIM


Wie ein Flashspeicher aufgebaut und gehandhabt wird und wie TRIM hier hilft hat Lanchon hier erläutert (auf Englisch):
between the CPU and the flash itself, there is another CPU running software loosely called FTL, flash translation layer. the FTL "emulates" a hard drive over flash, a medium that behaves completely different.

the FTL makes sure that, even if you write a particular (logical) sector of a disk, the physical write block used to store the data will rotate around to balance the write load, hopefully around all of the flash medium. this is called wear leveling, and is done because flash only withstands a finite number of erase/write cycles. for old-style MLC arrays, the endurance is around 2000 to 3000 erase/write cycles.

the FTL maintains a mapping from logical sectors to physical flash, and bugs in this software were what caused so much grief in the brickbug days. another point to note is that erasing data from an SSD only makes it appear to be gone by unmapping it from the FTL, but the data is typically still there if you have the means to access it. most times, it even keeps history and multiple versions of the data you want to delete, like a version control system.

SSDs have a SECURE ERASE command that guarantees that all data ever written to a sector will be actually really wiped. they also have a simple ERASE comman that only unmaps it. many people complain that TWRP 3 takes a lot to wipe partitions and downgrade to version 2. v3 uses secure erase so you can use it to sell your phone, for instance. v2 uses simple erase, so it's fast and cheap (and insecure). the reality is the TWRP should man up and offer both options, because these commands serve different purposes and only the user knows what he needs. btw, brickbug et al were all problems of SECURE ERASE. ERASE always worked well, and i was able to predict it should without ever testing it (read the main (not i9100-specific) TRIM thread for details).

back on track: because of the FTL (and assuming the FTL is well implemented), write patterns are unimportant to longevity; only THE TOTAL VOLUME of data written is. also, because of physical limitations, flash erase blocks are much larger than write blocks. this means that sometimes, some useful data has to copied around to coalesce a full free erase block so that it can be recycled. this means that actual data written to a flash is more than what the CPU asks for. this is called write amplification and at any given time is characterized by a factor.

this factor should ideally be 1 but it is actually always larger. an untrimmed SSD gets a high WA factor in the long run. this is what makes it slow (at writing); trim is not some magic turbo dust. a high WA also burns away battery AND the life of the SSD! this is why i suffer when i see TRIM not going official on CM.

so two things matter: the write volume and the WA factor. if you dont trim, your WA factor can be 10 or more, so you are burning away the life of your phone and doing it FAST! write 200 MB and it counts like writing 2 or 4 GB! on a trimmed device, this doesn't happen.

so all this was to say:
1) it doesnt matter if you flash nightlies or download movies, all writes are created equal.
2) other factors, like write amplification, can be much more important than flashing roms at determining the life of your device.

but i have to say that nobody in their right mind should flash every day, its a waste of time! flash every month. ok, well, you are obsessive, then flash every week, its ok.

but whatever you do, dont forget to TRIM!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Downloads

TRIM-Kernel: hier
Busybox: hier oder auf Google Play hier
Trimmer App: hier

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Da ich gerne selbst erst alle Shell Befehle verstehen möchte, bevor ich sie ausführe, habe ich versucht, die Syntax aller oben aufgeführten Befehle zu erklären:
su [user]

substitute user; der aktuelle User wird durch [user] ersetzt; wenn nichts weiter angegeben wird, wird dieser automatisch durch Root(Admin) ersetzt


exit

beendet eine su Sitzung
ein erneutes Ausführen beendet die Shell


vdc fstrim dotrim

Kann ich leider (noch) nicht erklären.
Alles was ich bisher herausgefunden habe ist, dass vdc Befehle ausführt . vdc ruft den Befehl auf, gibt allerdings sofort eine Rückmeldung sofern der Befehl erfolgreich angewiesen wurde. Es lässt keinen Rückschluss darauf zu, ob der eigentliche Befehl schon erfolgreich beendet wurde.


fstrim -v /partitionx

fstrim Trim Befehl
-v verbose; auf Deutsch soviel wie: "Gib mir Auskunft was genau getan wurde"
/partionx Pfad der zu trimmenden Partition


mount -o rw,remount /system

mount Befehl zum mounten(einhängen) eines Dateisystems
-o options
rw read-write; lesend und schreibender Zugriff auf das Dateisystem.
remount wie der Name schon sagt
/system die Partition, bzw. der Mountpoint auf die der Befehl angewandt wird



mount -o ro,remount /system

ro read-only; nur lesender Zugriff auf das Dateisystem


logcat -d | grep "Trimmed"

logcat kontinuierliches Log von Android
-d ohne -d wird das Log live ausgegeben; -d gibt alles bis zum aktuellen Zeitpunkt aus und beendet dann den Ausgabe-Befehl
| pipe; auf Deutsch ein Befehl wird in den anderen Befehl übergeben: in diesem Fall benutzt grep die Ausgabe von logcat und manipuliert dessen Ausgabe
grep "xyz" durchsucht in diesem Fall die Ausgabe des logcat Befehls nach dem String xyz und gibt nur die Zeilen aus, die diesen String enthalten


logcat -d | grep "Trimmed" > /storage/pfadzursd/trim.txt


> leitet die Ausgabe in eine Datei um


Aller Dank für den TRIM-Kernel und das Skript geht an @Lanchon aus dem XDA Forum!


Erstellt: 21-Feb-2016
Zuletzt bearbeitet: 26-Okt-2016
 

Anhänge

  • lanchon-repit-20160923-i9100.zip
    806 KB · Aufrufe: 135
  • lanchon-repit-20160923-sdcard=++ext4-i9100.zip
    806 KB · Aufrufe: 110
Zuletzt bearbeitet:
  • Danke
Reaktionen: Zatzi, jholstein, Nick Knight und 6 andere
Wichtig anzumerken wäre, dass das Skript von der externen SD Karte aus geflasht wird.

Frage: betrifft das Extrathema Trim alle Geräte, die als Stock <Android 4.3 ausgeliefert wurden?
Dort kann also jeweils ein CM Build nicht für das Trimmen sorgen?
 
Jae2804 schrieb:
Wichtig anzumerken wäre, dass das Skript von der externen SD Karte aus geflasht wird.
Danke, werde ich hinzufügen.
Zu der anderen Frage: Ich habe es explizit (erst einmal) auf CM11-13 bezogen, da ich hier weiß das es es einen TRIM Kernel für gibt.
Zu anderen ROMs kann ich nichts sagen, da ich nie andere verwende habe.

Jae2804 schrieb:
Genau, meine Fragen waren von heute mittag und einige Post vorher: ob durch das Flashen des Kernels und Skripts die Trim App und manuelles Flashen obsolet sind, da du dort schreibst, dass CM jede Nacht automatisch einmal trimmt.
Das automatische Trimmen trimmt eben nicht /system und auch eine ext4 formatierte SD wird damit nicht getrimmt.
/system reicht einmal nach dem flashen, einer ROM/Update
/sdcard0: da ich die Trimmer App selbst noch nicht getestet habe, kann ich nicht sagen, ob dies damit getrimmt werden kann.

Was zusätzliches (zusätzlich zum Auto-Trim) Trimmen angeht, werde ich es erst einmal so handhaben, wenn ich CM update (so alle 1-2 Wochen), dass ich dann Lanchons angepasstes Skript mitflashen werde.
 
Zuletzt bearbeitet:
Es muss nicht zwingend von der externen SD ausgeführt werden, weil es sich - falls es nicht alles unmounten kann, ohnehin nach /tmp kopiert und meldet, dass man es von dort noch einmal starten soll.
Zu Ausführungsfehlern oder weiteren Erläuterungen des Skripts sollten wir meiner Meinung nach wirklich besser auf "meinen" Thread verweisen.
Sonst müssen wir alle Abhängigkeiten (oder eben Diskussionen dazu) hier auch nochmal separat pflegen (oder führen).
Fände ich persönlich eher ungünstig.
 
Die SystemPartition wird ja aber nur beschrieben, wenn eine Rom geflasht wird, daher reicht es ja auch nach einem Update das Skript drüber laufen zu lassen, oder?

Die andere Frage bezog sich auf alle Geräte generell:
Warum ist Trim beim S2 ein Thema, ab dem S3 aber nicht mehr (da, wenn ich das richtig verstanden habe, im CM Nightly Build enthalten) - beim S2 jedoch nicht, weil das S2 ehemals noch mit Android 4.2 ausgeliefert wurde?
 
Jae2804 schrieb:
Die SystemPartition wird ja aber nur beschrieben, wenn eine Rom geflasht wird, daher reicht es ja auch nach einem Update das Skript drüber laufen zu lassen, oder?
Korrekt. Denn wo nichts gelöscht wird, kann durch Trim auch nichts freigegeben werden.
Jae2804 schrieb:
Warum ist Trim beim S2 ein Thema
Weil beim S2 eben ein Fehler bekannt wurde, durch den der verbaute Controller bei Ausführen bestimmter Instruktionen den Speicher "kaputt" geschrieben hat, so dass das Gerät unbrauchbar wurde. Daher wurde beim S2 seinerzeit Trim abgeschaltet und blieb es, obwohl die gefährlichen Instruktionen quasi schon überall lange umgangen werden, es also nicht mehr zum Brick-Bug kommen kann.
 
Hat dann quasi bis heute (seit es den Trim Kernel gibt) niemand jemals sein S2 Speicher getrimmt?

Warum ist es dann heute nicht möglich die Funktion in die CM Builds zu implementieren?
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: Nick Knight - Grund: Direkt Zitat entfernt.
Trim-Kernel gibt es schon lange. Aber eben nicht in offiziellen CM-Builds. Daher flashen ja viele eben immer nochmal einen Trim-Kernel hinterher.
Möglich wäre es sofort, es gibt einen passenden Patch, der nur ins offizielle CM gemerged werden müsste.
Doch die Entscheider dort scheinen wahrscheinlich aus Unwissenheit immer noch mehr Angst davor zu haben ihn zu implementieren, als davor, ihn nicht zu implementieren und somit das Leben der Geräte im Allgemeinen zu verkürzen.
 
Ok, aber bspw beim S4 ist Trim im offiziellen Nightly Build drin? Nur beim S2 zögeren die nach wie vor?
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: Nick Knight - Grund: Direkt Zitat entfernt.
@Jae2804 ja, so ist es. Wobei ich jetzt nicht nach geprüft habe, ob es beim S4 integriert ist, ich gehe aber ziemlich sicher davon aus.
 
  • Danke
Reaktionen: Jae2804
the.gangster schrieb:
Möglich wäre es sofort, es gibt einen passenden Patch, der nur ins offizielle CM gemerged werden müsste.

In der nächsten Nigthly, Enable TRIM on the Galaxy S2 Familie!
 
  • Danke
Reaktionen: fireburner
Yippieeh
:)
 
OP wurde aktualisiert
Grund: TRIM Support im CM13 Stock Kernel
 
  • Danke
Reaktionen: Nick Knight
Funktioniert TWRP 3.0.0 mittlerweile mit dem Skript?
 
@Jae2804 du meinst das Repit Skript?
Solange arnab keine neue Version veröffentlicht, wird es denke ich nicht funktionieren. Keine Ahnung ob Lanchon auf die unter TWRP3 fehlenden binaries für sein Skript verzichten kann. Habe aber nichts diesbezüglich gelesen, das seine neuste Version mit TWRP3 funktionieren würde.
 
  • Danke
Reaktionen: Jae2804
Nein, auch die neueste Version 2016-03-17 würde mit der TWRP3.0.0-0 von Arnab nicht funktionieren.
Selbst wenn Lanchon jetzt (was er aber auch nicht implementiert hat) auf mehrere binaries zum fsck und format von vfat prüfen würde (die enthaltenen passen nicht zum Aufruf), würde immer noch "parted" komplett fehlen. Da ginge dann also trotzdem nichts.
 
  • Danke
Reaktionen: Jae2804
OK, danke für die Rückmeldungen. Bin gespannt wie es weiter geht ;)
 
###########################################
Update:
aktuelles angepasstes REPIT Skript zum TRIMEN
###########################################
 
Jae2804 schrieb:
Funktioniert TWRP 3.0.0 mittlerweile mit dem Skript?
Sollte ab der aktuellen Version (2016-03-28) mit TWRP 3.0.0-0 klappen.
Die neue Version enthält jetzt eigene Tools, weshalb es von den paar bytes auf fast 4MB angewachsen ist.
 
  • Danke
Reaktionen: Jae2804
Hier auch kurz der Hinweis:
the.gangster schrieb:
#### Hinweis zur heute erschienenen IsoRec TWRP 3.0.2-0 Recovery:
Alle, die auf F2FS umformatiert haben, werden mit der 3.0.2er TWRP keine Freude haben, da dort Binary oder Link auf fsck.f2fs fehlt und somit keine Dateisystemprüfung für das Flash-Friendly Filesystem funktioniert.
Somit wird Repit dort mit Fehler abbrechen.
Betriff aber wirklich nur Geräte mit F2FS-formatierten Partitionen.
 

Ähnliche Themen

C
  • Angepinnt
  • Umfrage
  • CHEF-KOCH
Antworten
4
Aufrufe
9.532
Dickens1412
D
the.gangster
Antworten
172
Aufrufe
53.602
the.gangster
the.gangster
Pr0TuRk38
Antworten
1
Aufrufe
4.423
MTBiker
M
Zurück
Oben Unten