Apple aktiviert den TRIM Support nur bei Verwendung von Apple SSDs automatisch; SSDs anderer Hersteller werden ignoriert aber man kann diese Funktion auch mit einem Kernel Hack freischalten. Für diese Aufgabe sind zwar auch einige Patches erhältlich aber ich möchte hier auf die manuelle Freischaltung eingehen, weil somit klar ist, was geändert wird und zumindest am Anfang waren einige Patches auf dem Markt, welche nach der Ausführung ein unerwünschtes Verhalten ausgelöst hatten. Diese Aussage kann ich jedoch nicht bestätigen, wir hatten einen Patch getestet und zumindest dieser hat getan, was er sollte.
Für das Aktivieren des TRIM Supports ist die Kernel Extension »IOAHCIBlockStorage.kext« zuständig und hier wird im Prinzip lediglich der String »Apple SSD« gegen lauter Nullen ausgetauscht:
1) Backup der Datei erstellen, welche verändert wird:
$ 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.bak
2) Patchen der Datei:
≤ 10.7.4 und 10.8.0:
$ sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00).{9}(\x00\x51)|$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2|sg' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
≥ 10.7.5 und 10.8.1 - 10.8.2:
$ sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\x4D)|$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2|sg' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
10.8.3 - 10.8.5 und 10.9.0 - 10.9.3:
$ 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
10.9.4 - 10.9.5:
$ sudo perl -pi -e 's|(^\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
3) Kernel Caches leeren:
$ sudo kextcache -system-prelinked-kernel $ sudo kextcache -system-caches $ sudo touch /System/Library/Extensions/
4) Neustart:
$ sudo reboot
Apples neuestes Betriebssystem Yosemite hat bzgl. des oben angewandten Hacks eine Besonderheit aufzuweisen. Yosemite prüft die Signaturen der Kernel Extensions auf Ihre Gültigkeit und verweigert den Systemstart, sobald an einer Kernel Extension herumgebastelt wurde und genau das tun wir in unserem bisherigen Workaround. Die gute Nachricht ist, dass wir die Signaturprüfung abschalten können, die schlechte Nachricht jedoch ist, dass das solange funktioniert bis zB ein Secure Boot ausgeführt wird. Der Secure Boot leert alle Caches im System und somit auch den KextCache, den wir im Workaround anlegen. Das ganze ist aber keine Sackgasse, es gibt einen Ausweg aber zuerst mal die notwendigen Schritte um TRIM in Yosemite zu aktivieren:
$ 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 nvram boot-args="kext-dev-mode=1"
$ sudo reboot
$ sudo perl -pi -e 's|(^\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 kextcache -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions
$ sudo touch /System/Library/Extensions/
$ sudo reboot
Soweit funktioniert der TRIM Hack wie bisher gehabt aber wenn jetzt zB ein Secure Boot ausgeführt wird, startet das System nicht mehr und bleibt mit einem duchgestrichenen gauen Kreis stehen. Das System möchte uns damit sagen, dass kein Bootvolume gefunden wurde, was ohne AHCI Treiber auch schlecht geht. Um das System jetzt wieder startfähig zu machen, starten Sie das System von einem Installationsdevice (zB USB-Stick) und führen von dort im Terminal folgende Kommandos aus:
$ nvram boot-args
$ cd /Volume/Macintosh\ HD
$ touch System/Library/Extensions
$ kextcache -prelinked-kernel System/Library/Caches/com.apple.kext.caches/Startup/kernelcache -K System/Library/Kernels/kernel System/Library/Extensions
That's the way it works
— pronto 2015/01/12 15:47
Mit dem Servicepack 4 für Yosemite (10.10.4) hat Apple ein eigenes Utility »trimforce«1) zum aktivieren von Dritthersteller SSDs integriert. Führen Sie einfach in einem Terminal folgendes Kommando aus, bestätigen Sie die Warnung die besagt dass Apple keine Garantie für das Funktionieren von TRIM bei jeder SSD übernimmt (Haben sie eh noch nie) und starten Sie Ihren Rechner anschließend neu:
$ sudo trimforce enable
Da dieses Feature ursprünglich für »El Capitan« (10.11) vorgesehen war und jetzt vorgezogen wurde, kann man davon ausgehen, dass dieses Utility uns wohl auch in Zukunft erhalten bleibt und die og Workarounds überflüssig werden.
— pronto 2015/07/06 10:15
Weitere Nachforschungen (aus 2011):
Die Welt ist böse und Apple macht da keine Ausnahme, deshalb haben wird den og Workaround kritisch hinterfragt, weil wir befürchteten, dass diese Option auch nur kosmetisch im System_Profiler aktiviert worden sein könnte. In einer relativ aufwändigen Testreihe haben wir aber nachweisen können, dass das System bei aktiviertem TRIM Support das TRIM-Kommando auch an den Festplattencontroller weitergibt und dieser so reagiert, wie es in seiner Spezifikation ausgewiesen wurde.
Des Weiteren mussten wir unter Snow Leopard, was auch schon seit 10.6.7 den TRIM Support implementiert hat, feststellen, dass og Workaround nicht funktioniert. Wir waren gezwungen das im Schritt 1) erstellte Backup wieder einzuspielen. Da es aber auch hier Lösungen zu geben scheint, werden wir diese noch näher analysieren und, sollten wir einen funktionierenden Weg finden, ggf noch dokumentieren und zur Verfügung stellen.
Verwandte Artikel:
-> Die neue Festplattengeneration Solid-State-Disk (SSD)
— pronto 2011/08/23 10:39