dann sieht er ob Trim aktiv ist oder nicht
Er wollte es aber nicht sehen, sondern programmatisch auswerten.
Code:
function enable-trim {
sudo cp "/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage" "/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage_original"
sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\x54)|$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2|sg' "/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage"
sudo touch /System/Library/Extensions/
}
Kurze Erläuterung zu diesem etwas etwas kryptisch aussehenden Perlbefehl, man soll ja nichts ausführen, das man nicht kennt.
Diese Anweisung sucht nach einem String "(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\x54)" und ersetzt ihn durch "$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2".
Hier werden Regex genutzt, d.h. bei dem Suchstring handelt es sich eigentlich um folgendes (sprachlich ausgedrückt):
"fange mit \x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C an, danach kommen 1-20 mal \x00, danach kommt 9 mal etwas, das nicht \x00 ist, abschließend nochmal 1-20 mal \x00 gefolgt von \x54"
Ersetzt wird das mit:
"Anfang des Suchergebnisses, 9 mal \x00, Ende des Suchergebnisses"
Das ist etwas unpräzise: konkret handelt es sich bei $1 um alles, was innerhalb der ersten Klammer in der Suche eingeschlossen war, bei $2 entsprechend um alles in der zweiten Klammer.
----------
Wer der Sache etwas genauer auf die Spur kommen will, holt sich einen Hex Editor wie z.B.
0xED und öffnet darin die Datei, die der Befehl editieren soll, also /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage. Um da schnell hinzukommen empfiehlt es sich im "Öffnen" Dialog von 0xED "Shift+Cmd+G" zu drücken, damit der "Pfad öffnen" Dialog erscheint, worin man dann den Pfad zur gewollten Datei direkt einfügen kann.
Als nächstes machen wir die \x?? Kombinationen lesbarer. Hierbei handelt es sich um hexadezimale Angaben von ASCII Zeichen. Gibt viele Methoden das in etwas lesbares umzuwandeln. Am einfachsten: Terminal öffnen, "python" eintippen und bestätigen, nun folgendes eingeben:
print "\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C"
Als Ergebnis erhaltet ihr "Rotational". Mit Strg+D kommt ihr wieder aus python raus.
Dieses Wort, also "Rotational", kann man nun in die Textsuche von 0xED eingeben (oben rechts) und kommt an eine Stelle, in der in der geöffneten Datei "Rotational.APPLE SSD.Time..." steht.
Wenn ich euch nun nochmal das Suchmuster anschaut, stellt ihr fest, dass der Befehl das gefundene "Rotational" nimmt und alles bis hin zu, sowie nach "APPLE SSD", übernimmt, aber den "APPLE SSD" Teil verschwinden lässt.
Hier liegt der Knackpunkt: sollte Apple "Rotational" irgendwann zu "Rotational1", oder "APPLE SSD" zu "APPLE SSD5" ändern, geht das in die Hose.
Hallo Kaito,
danke. Gibt es denn keine Möglichkeit den Namen der SSD in "APPLE SSD SM256E" umzubenennen? Dann könnte man sich doch den Austausch in der IOAHCIBlockStorage sparen, oder? ...
Viele Grüße
André
Die Frage ist, ob das helfen würde? Wie du etwas weiter oben siehst, findet sich die Bezeichnung SM256E gar nicht an der kritischen Stelle in der Kext, die Information könnte also von anderer Stelle kommen. Um den Bezeichner einer HDD/SSD zu ändern... ich bin mir nicht sicher, aber da müsstest du eventuell an die Firmware ran. Wäre das so einfach möglich, wäre es die perfekte Lösung für alle, resistent gegen jegliche Updates. Ich glaube nicht, dass wir mit dem patchen von Binärfiles rumhantieren würden, wenn das ginge.