Pull to refresh

Автоматизация активации TRIM для Mac OS Lion

Доброе время суток!

Спасибо автору поста «Активация TRIM для Mac OS Lion [SSD only]»!

Мне уже давно не нравится, что приходится патчить Mac OS для включения поддержки trim чужой программой, которая работает из-под пользователя root.

На базе поста «Активация TRIM для Mac OS Lion [SSD only]» я написал скрипт, который позволяет быстро и удобно включать поддержку trim после обновления системы, а также, рассказал как восстановить оригинальный файл IOAHCIBlockStorage и проверить, что же изменил скрипт.



1. Как восстановить оригинальный файл IOAHCIBlockStorage:

Переходим в шелл пользователя root:
sudo su -


Монтируем диск с ОС Lion:
diskutil mount Recovery\ HD
hdiutil mount /Volumes/Recovery\ HD/com.apple.recovery.boot/BaseSystem.dmg


Сохраняем текущий файл IOAHCIBlockStorage:
mv /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage.bck_$(date +%m%d%y)

Восстанавливаем оригинальный файл:
cp /Volumes/Mac\ OS\ X\ Base\ System/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage \
/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS


2. Скрипт для включения/выключения поддержки trim.

Эти работы проводятся из-под обычного пользователя ОС (не root).

Сохраняем скрипт как trim_support.sh:
#!/bin/bash
# Backup original file:
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.orig_$(date +%m%d%y)
echo "Original IOAHCIBlockStorage backuped."
case $1 in
'enable')
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
echo "Trim support enabled!"
;;
'disable')
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
echo "Trim support disabled!"
;;
esac
echo "Please wait for kextcache work completion.."
kextcache -system-prelinked-kernel
kextcache -system-caches
echo
echo "### Please reboot your Mac! ###"


Назначаем права скрипту:
chmod 700 trim_support.sh


Чтобы включить поддержку TRIM для non-Apple SSD выполните:
sudo trim_support.sh enable


Чтобы выключить поддержку TRIM для non-Apple SSD выполните:
sudo trim_support.sh disable


Не забудьте перезагрузить компьютер после выполнения скрипта.

Чтобы убедиться, что ничего кроме строки «APPLE SSD» не было заменено, выполняем команды:
strings /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage.orig_$(date +%m%d%y) > ./IOAHCIBlockStorage.orig
strings /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage > ./IOAHCIBlockStorage.patched
echo "Difference between IOAHCIBlockStorage original and pathed:"
diff ./IOAHCIBlockStorage.orig ./IOAHCIBlockStorage.patched


localhost:programs admin$ diff ./IOAHCIBlockStorage.orig ./IOAHCIBlockStorage.patched
184d183
< APPLE SSD


Надеюсь, данная информация будет вам полезной!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.