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

14 Май
2012

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

Спасибо автору поста «Активация 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|(x52x6Fx74x61x74x69x6Fx6Ex61x6Cx00).{9}(x00x51)|$1x00x00x00x00x00x00x00x00x00$2|sg'
/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
echo "Trim support enabled!"
;;
'disable')
perl -pi -e 's|(x52x6Fx74x61x74x69x6Fx6Ex61x6Cx00).{9}(x00x51)|$1x41x50x50x4Cx45x20x53x53x44$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


Надеюсь, данная информация будет вам полезной!
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх