Mac OS X Mountain Lionで、Apple製じゃないSSDのTRIMを有効にしてみた。


よい子のお約束、というか免責のお知らせ。
この記事に書いてあることをうかつに実行すると、あなたのMacが起動しなくなる可能性があります。
転んでも泣かない人だけがマネしてください。なんか文句言われても僕はしりません。

正月はおうちネットワークを快適にしようということで色々といじっているのですが、僕のMac miniに放り込んだIntelの1万円を切る120GBなSSD、330 Series SSDSC2CT120A3K5のTRIMがどうやってもenableにできませんでした。

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。


アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。


アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。


ググるとTrim Enablerなるソフトウェアを使えば一発だという記事を見かけるのですが、僕のMac mini Late 2012とOS X 10.8.2では何度やってもダメでした。

さらに深くググると、How to Enable TRIM Support for All SSDs in OS X Lion or Mountain Lionという記事が見つかったのですが、この方法でもダメなので、記事の内容を基に自分の環境でもイケる方法を探し、結果成功しました。

元記事の方法では、

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

とあり、
52 6F 74 61 74 69 6F 6E 61 6C 00 41 50 50 4C 45 20 53 53 44 00 51
つまり、RotationalAPPLE SSD Qという文字列を検索して置換しているのですが、僕の手元のIOAHCIBlockStorageを見ると
52 6F 74 61 74 69 6F 6E 61 6C 00 41 50 50 4C 45 20 53 53 44 00 54
つまり、RotationalAPPLE SSD Tと書いてありました。
となれば簡単です。

sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00).{9}(\x00\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

を実行すれば良いのです。

ということで、全体の手順は次のとおり。(なんかブラウザでは見づらいのでtext版用意しました。)

sudo cp /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage /IOAHCIBlockStorage.original

として、まずIOAHCIBlockStorageのバックアップを取っておきます。
次に本命のバイナリパッチ。

sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00).{9}(\x00\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

あとは、cacheを更新して再起動します。

sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches
sudo reboot

あとは無事に起き上がってくるのを祈っておいてください。

結果、うまいこといきました。結構嬉しい。
スクリーンショット 2013-01-02 18.41.56

ちなみに、

$ sudo kextcache -system-prelinked-kernel
Kernel file /mach_kernel does not contain requested arch: i386

とか言われましたけど、まぁ問題ないらしいです。

あと、念のために書き換え前後のSHA1 hashを貼っておきます。

SHA1(/IOAHCIBlockStorage.original)= 3e8a10703bc8273f5c5eeec478ea009f5e04ca1c
SHA1(/IOAHCIBlockStorage.custom)= cd4a46a9a6ce3e55639263e3bb98db2dee19ded2

2013/03/03 追記 —
Mac mini Late 2012, OS X 10.8.2にCrucial m4, M4-CT512M4SSD1を組み込んで上記のスクリプトを実行しました。
結果、無事にTRIMを有効にすることができました。

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

2013/09/18 追記 —
上記のMac mini Late 2012にCrucial m4, M4-CT512M4SSD1を組み込んだマシンをOS X 10.8.5にアップデートしたらTRIMが無効になってしまいました。
気付いて、上記のスクリプトを再度実行したところ、無事に再びTRIMを有効にすることができました。