Skip to content

Instantly share code, notes, and snippets.

@clarencesong
Last active September 28, 2023 17:03
Show Gist options
  • Star 40 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save clarencesong/3768688 to your computer and use it in GitHub Desktop.
Save clarencesong/3768688 to your computer and use it in GitHub Desktop.
Enable TRIM in OS X 10.7.5 to 10.9.5

Enable TRIM on non-Apple SSDs in OS X

NOTE: This is tested on the versions mentioned in the title, and NOT earlier or later versions. YMMV.

Run the following commands in Terminal…

Backup the original driver:

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-backup

Modify the driver (choose only one of the following lines, based on the version):

# 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

# 10.8.3 to 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.7.5, 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

Run these commands in succession to clear the system caches to enable OS X to pick up the modified driver:

sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches
sudo touch /System/Library/Extensions/

Restart the Mac.

@Atalantia
Copy link

Thank you it works like a charm on a 10.9.5 But if System Information says Trimm is on. Is it really on? How can I see that this is on. And by the way what does it? Randomly change the Memory Location of every bit?

@RJVB
Copy link

RJVB commented Apr 21, 2020

Exactly where am I supposed to see the trim enabled indicator on OS X 10.9.5?

I think I've applied the correct patch from the list above but I cannot seem to find the indicator for my external Kingston SUV500MS120G (SSDNow family).

> md5sum /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/*
79f51aaf114f3dd8be5e409f6e3c13df  /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
ef72c0c2bfb1074bf400d3405efdae10  /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage-backup

> kextstat | fgrep -i IOAHCIBlockStorage
   61    0 0xffffff7f813bb000 0x18000    0x18000    com.apple.iokit.IOAHCIBlockStorage (2.6.0) <43 16 6 5 4 3 1>

contents comparison, does this look correct?

> od -x IOAHCIBlockStorage-backup > /tmp/kk1
> od -x IOAHCIBlockStorage > /tmp/kk2
> diff tmp/kk[12]
3975c3975
< 0201720      0a79    4100    5050    454c    5320    4453    5400    6d69
---
> 0201720      0a79    0000    0000    0000    0000    0000    5400    6d69

EDIT: I just realised this patch replaces the string "APPLE SSD" with as many null bytes. I see a second occurrence of a very similar pattern a bit further in the file: "APPLE SSD TS". I guess I have nothing to lose to replace that one too (would I have an older version of the framework on my system?!)

@clarencesong
Copy link
Author

@RJVB You should be able to see it in System Information.app → Hardware → SATA → Trim Support: Yes

@RJVB
Copy link

RJVB commented Apr 26, 2020 via email

@clarencesong
Copy link
Author

@RJVB I've only tested this on SATA SSDs, as this was the only way to get TRIM back in the day. (Later versions of OS X supported the trimforce command.) Sorry, I don't know of a way to check if TRIM is actually working at a lower level.

@RJVB
Copy link

RJVB commented Apr 26, 2020 via email

@PhshPhan
Copy link

Thanks man. Worked on my evo860 SSD on my mid-2012 i5 on OSX 10.9.5 after the initial software update following reinstallation of OS X.

@Starkoman
Copy link

Hi there — Can confirm this code works on 2006 MacBook Pro 17" Core2Duo 3GB RAM with cheap Fanxiang S101 1TB SSD.

Had to paste into Terminal a couple of times, reboot, no joy in System Info — so tried final time but pasted all three of the second set all at once — rebooted again and System Info confirmed "Trim Enabled: Yes". Thank you so much! Very pleased.

Thanks for figuring this out.

@Starkoman
Copy link

P.S.: That's on Mac OS X 10.7.5. Lion (!). Works like a charm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment