TRIM Support in Mac OSX bei Non-Apple SSDs freischalten

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

Yosemite 10.10

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:

  • Wie gehabt erstellen wir zuerst ein Backup unserer originalen Kernel Extension:
    $ 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
  • Wir deaktivieren die Signaturprüfung im NVRAM:
    $ sudo nvram boot-args="kext-dev-mode=1"
  • Führen Sie danach einen Neustart durch:
    $ sudo reboot
  • Es folgt der eigentliche Patch:
    $ 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
  • Der MKEXT (Mac OS X Mach kernel extension memory cache) wird manuell aufgebaut. Dies ist der Schritt der uns bei besonderen Boot Optionen wie dem Secure Boot um die Ohren fliegt.
    $ sudo kextcache -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions
  • Dann noch das übliche Outro:
    $ 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:

  • Überprüfen Sie ob der NVRAM Boot Argument »kext-dev-mode=1« noch vorhanden ist:
    $ nvram boot-args

    Ist das noch der Fall, gehen Sie weiter vor wie beschrieben. Wenn nicht, dann setzen Sie ihn nochmal wie oben bereits schon einmal ausgeführt.
  • Wechseln Sie in das Startvolume:
    $ cd /Volume/Macintosh\ HD
  • Touchen Sie das Extension Verzeichnis. Dadurch wird der Timestamp aktualisiert:
    $ touch System/Library/Extensions
  • Erstellen Sie einen neuen Prelinked Kernel, was durchaus ein paar Minuten dauern kann:
    $ 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

Yosemite 10.10.4

NEW
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

mac/activate_trim.txt (8634 views) · Zuletzt geändert: 2015/07/06 10:29 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0