fireburner
Stamm-User
- 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
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:
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:
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:
Und nach dem trimmen, wieder als Read-Only:
(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 vonhier 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)
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:
Der Output kann ich in eine Textdatei umgeleitet werden:
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):
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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:
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
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
(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
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
Code:
mount -o ro,remount /system
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
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.
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"
Code:
logcat -d | grep "Trimmed" > /storage/pfadzursd/trim.txt
(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
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
Zuletzt bearbeitet: