Nicht-Apple SSD im Mac? Ab OS X 10.10.4 wird Trim unterstützt

Apple verbaut in den Macs mittlerweile (fast) durchgängig SSDs. Um einen älteren Mac aufzuwerten kann es sich lohnen die auf Rost gespeicherten Daten auf Flash-Speicherzellen umzuziehen und die Festplatte durch eine SSD zu ersetzen.

TL;DR

Um das Verwalten von gelöschten Speicherzellen effizienter zu gestalten gibt es den Trim Befehl mit dem das Betriebssystem der SSD „mitteilen“ kann, welche Blöcke im Dateisystem als gelöscht markiert sind. Eine SSD die kein Trim unterstützt wird Stück für Stück langsamer je voller sie ist.
Apples OS X unterstützt Trim seit Version 10.6.8, allerdings nur für SSDs mit Apple-Firmware. Mit Yosemite Version 10.10.4 wird der Trim Befehl nun auch für nicht-Apple SSDs unterstützt. Allerdings muss man ihn erst mit dem Befehl trimforce anschalten. Bitte beachten, dass dieser Befehl nach dem Ausführen den Rechner sofort neu startet. Also alle Daten sichern und am Besten alle Programm schließen bevor man den Befehl eingibt.
Um Trim einzuschalten startet man das Terminal und gibt folgenden Befehl ein:

sudo trimforce enable

Im Anschluss kommt eine längere Warnmeldung die besagt, dass der Trim Befehl für alle angeschlossenen SSDs eingeschaltet wird, auch für solche, die nicht zertifiziert oder von Apple unterstützt werden und dass dies zu potenziellen Datenverlust führen könnte: Apple möchte sich an dieser Stelle absichern. Nach der Rückfrage, ob man sich darüber im Klaren ist und einem Hinweis, dass das System im Anschluss sofort neu gestartet wird, ist Trim nach dem Neustart eingeschaltet. Wieder ausschalten kann man es mit dem Befehl

sudo trimforce disable

Auch hier erfolgt ein Neustart.
Wer sich unsicher ist ob seine SSD von Apple ist kann dies in den Systeminformationen überprüfen. Dazu klickt man im Menu, ganz links oben auf den Apfel und wählt den Punkt Über diesen Mac. Im sich öffnenden Fenster klickt man dann auf Systembericht worauf sich das Hilfsprogramm Systeminformationen öffnet. Im linken Teil des Fensters klickt man auf SATA/SATA Express – je nach Bus an dem die SSD hängt, in den Macs hängen interne Platten aber meistens am SATA Controller. Im rechten oberen Teil des Fensters sieht man nun die angeschlossenen Platten. Apple SSDs werden als solche aufgeführt, SSDs mit Firmware anderer Hersteller erscheinen hier unter dem jeweiligen Namen. Übrigens kann man hier, im unteren Fenster, auch sehen, ob TRIM-Unterstützung für die Platte eingeschaltet ist oder nicht.

Technische Hintergründe

Es gibt einen erheblichen Unterschied wie klassische Festplatten und Flash-Speicher mit dem Löschen von Daten umgehen. Werden Daten in einem laufenden Betriebssystem gelöscht wird (zumindest bei den meisten gängigen Dateisystemen) der nicht mehr genutzte Block im Dateisystem als nicht belegt markiert, physikalisch aber nicht gelöscht. Das Dateisystem weiss, dass es ab sofort an dieser Stelle neue Daten abspeichern darf. Die Festplatte selbst weiss nichts davon: wird in einem nächsten Schritt der Block adressiert werden die dort vorher gespeicherten Daten einfach überschrieben, der Bereich muss vorher nicht gelöscht werden. Bei SSDs ist dies anders, Speicherzellen die beschrieben werden müssen leer sein, also vorher genullt werden.

SSDs adressieren Speicherzellen lesenderweise typischerweise in Seiten oder Blöcken von 4-16KB. Bei Schreiboperationen werden diese Seiten abermals zu einem sogenannten erasable block zusammengefasst welcher 64, 128 oder 512 Seiten/Blöcke enthält. Bei einer Blockgröße von 4KB werden z.B. 128 Seiten zusammengefasst was dann eine erasable block-size von 512kb ergibt. Werden nun Daten innerhalb so eines erasable blocks geändert werden diese Blöcke nicht gelöscht oder überschrieben sondern als nicht mehr aktuell markiert und im nächsten freien Block desselben erasable blocks geschrieben. Erst wenn alle Blöcke in so einem erasable block nicht mehr aktuell sind wird der gesamte Block einmal ganz gelöscht. Bei jeder Änderung müssen also die bisherigen (nicht von der Änderung betroffenen) Blöcke mit den eigentlichen neuen Daten in die nächsten Blöcke kopiert werden. Eine Schreiboperation von wenigen Bytes kann somit auf einige Kilobyte ansteigen was man deshalb als write amplification bezeichnet.
Schreiboperationen können, wie bereits erwähnt, nur auf leere Zellen, erfolgen. Geschrieben werden können zwar einzelne Seiten (also etwa 4KB große, leere Gruppen von Speicherzellen), Löschoperationen können aber nur auf ganze erasable blocks (also einem vielfachen einer Seite) angewandt werden. Schreiben auf leere Blöcke ist damit sehr schnell, Löschoperationen (sprich: Zellen leeren) nicht. Das liegt an der oben beschriebenen Eigenart: vor dem Löschen wird der Inhalt eines gesamten erasable blocks in den SSD Cache geladen, alle Zellen in einem Rutsch gelöscht und aus dem SSD Cache die Daten neu geschrieben die nicht als nicht mehr aktuell markiert waren.
Für SSDs gibt es den Befehl Trim mit dem das Betriebssystem der SSD die auf dem Dateisystem gelöschten Blöcke mitteilen kann. Damit „weiss“ die SSD welche Blöcke auf Dateisystem-Ebene nicht mehr benutzt werden und kann selbst diese Blöcke als gelöscht markieren. Damit müssen bei einem Löschvorgang eines erasable blocks weniger Daten gecached und neu geschrieben werden. Der write amplification Effekt wird abgemildert und die SSD arbeitet aus Benutzersicht effizienter.