Ich konnte bisher nicht viel mit dem “Trim” Befehl für SSDs anfangen – bis ich den Grund für diesen Befehl nun selbst erfahren durfte. Nachdem sich meine SSD langsam aber sicher gefüllt hat, wurden kurzerhand die iPhoto und iTunes Librarys auf eine externe USB Festplatte verlagert. Dumm nur: ich hatte danach genauso viel freien Speicher wie vorher. Und dass, obwohl ich an die 10.000 Bilder entfernt hatte.
Das Problem an SSDs ist nämlich: löscht man eine Datei, dann wird, wie bei normalen magnetischen Festplatten auch, nur die Referenz auf diese Datei gelöscht. Die Nullen und Einsen, aus denen die Datei mal bestanden hat, bleiben erstmal auf der Platte liegen. Erst wenn dieser frei gewordene Platz für andere Dateien benötigt wird, so wird er mit den neuen Daten überschrieben. Funktioniert dies bei magnetischen Speichern problemlos, ist es bei Flash Speicher nicht ganz so leicht. Hier muss nämlich der zu schreibende Datenbereich wirklich gelöscht werden.
Normalerweise sollte dies der Controller der Festplatte übernehmen – z.B. in Zeiten geringer Belastung, also wenn die Festplatte gerade nichts anderes zu tun hat. In meinem Fall hat er es offensichtlich nicht getan. Und dafür gibt es nun den sogn. Trim Befehl, den das Betriebssystem an die Platte schicken kann und somit veranlasst, dass frei gewordener Speicher auch gelöscht wird.
Gütigerweise hat Apple den Support dafür auch unter OSX Lion eingebaut – aber nur für die original von Apple verbauten SSDs. Selbst eingebaute SSDs kommen nicht in den Genuss. Da mein Gerät von Gravis zusammengestellt wurde, ist offensichtlich keine original Hardware verwendet worden. Was nicht schlimm ist, aber eben die von mir beobachtete fehlerhafte Speicherplatzanzeige brachte.
Glücklicherweise kann man dieses Verhalten ändern – indem man Trim für ALLE SSDs freischaltet. Und das geht so:
Bevor ihr loslegt: ich übernehme keinerlei Haftung oder Verantwortung, falls ihr eure Hardware oder euer System beschädigt. Alle Aktionen werden auf eigene Gefahr durchgeführt. Sicherheitshalber sollte man vorher nochmal Timemachine laufen lassen, um ein valides Backup vom kompletten System zu haben!
- Terminal öffnen
- Backup des zuständigen Treibers erstellen:
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
- Treiber patchen:
sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\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
- Caches löschen:
sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches
- Reboot!
Überprüfung: links oben auf den Apfel -> über diesen Mac -> weitere Informationen -> Systembericht -> Serial-ATA anklicken.
Unter “Trim Unterstützung” sollte nun “Ja” stehen.
Will man den Patch wieder rückgängig machen:
- Patch rückgängig machen:
sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00).{9}(\x00\x51)|$1\x41\x50\x50\x4C\x45\x20\x53\x53\x44$2|sg' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
- Caches löschen:
sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches
- Reboot!
und sollten alle Stricke reißen, dann kann man immer noch das zuvor erstellte Backup wieder einspielen:
sudo cp /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage.original /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
reboot
via digitaldj.net