Как стать автором
Поиск
Написать публикацию
Обновить

Автоматизация активации 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


Надеюсь, данная информация будет вам полезной!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.