Pull to refresh

[SSD only] Активация TRIM в Mac OS Lion / Mountain Lion 10.8

Reading time 6 min
Views 114K
Original author: Grant Pannell
Здравствуйте, уважаемые хабражители.

Этот перевод предназначен в первую очередь для тех, кто уже использует SSD диск и MacOS Lion. Лично я год с хвостиком радуюсь производительности SSD Intel X-25M и отсутствию карусельки смерти чего и вам от души желаю.

До сегодняшнего дня я был уверен, что мой SSD работает на 100% своих возможностей. Но не тут-то было! Если вы купили свой яблочный компьютер без SSD, то есть из магазина он выехал с обычным HDD, то обещанный во Льве TRIM у вас будет не активен, как оказалось только изначально укомплектованные SSD накопителем компьютеры имеют эту функцию по умолчанию. Проблема, как вы понимаете, в вызывающем вопросы маркетинге компании имеет софтверные корни, а не железные. И на эту подлянку от Apple мистер Грант Пеннэл предлагает свой болт с резьбой.



Прежде чем перейти непосредственно к переводу, предлагаю вам проверить, работает у вас TRIM или нет:


Если у вашего SSD контроллер SandForce 2***, то TRIM вам не рекомендуется. Как говорят очевиды всё дело в том, что контроллер SF2*** обрабатывает удалённую пользователем информацию своим особым образом и вообще хранит данные на диске в виде одного большого архива… подробности его работы и вытекающие проблемы описаны тут. Контроллером SF2*** оснащён достаточно широкий ряд устройств, в том числе популярный OCZ Vertex 3, поэтому обязательно загляните в список SSD оснащённых контроллером SandForce и смотрите внимательно, есть ли ваш диск в этом списке, если да, то в колонке Controller определите порядковый номер, если он начинается на 2, то дальнейшие операции по включению TRIM могут только навредить. Для всех остальных пользователей SSD эта статья будет полезна:

Ни в коем случае не используйте программу TRIM ENABLER (1.1 или 1.2) для активации TRIM во Льве.

После небольшой проверки этого приложения я обнаружил, что вместо обычного патча она заменяет важнейший системный файл на уровне ядра системы. Это значит, что если вы использовали TRIM Enabler, то он заменил файл с массой тянущихся из него ниточек по всей MacOS (особенно актуально для тех кто переехал на Льва из MacOS Snow Leopard 10.6.8). А это плохо. Очень плохо. На ряду с тем, что TRIM действительно включается, появляется реальная опасность столкнуться с вагоном проблем, начиная от kernel panic и заканчивая проблемами ввода/вывода (I/O), и вот тогда-то вас точно настигнет вращающийся и пугающий пляжный мяч.

В процессе дискуссии с разработчиком этого приложения (Oskar Groth) я услышал лишь обвинения через комментарии к его блогу, что мол занимаюсь троллингом и нагоняю страху (хотя на самом деле и в большей мере я пытался предложить альтернативный вариант, который представлен ниже). Вероятно — в следующей версии TRIM Enabler — файл будет корректно патчится, вместо его прямой замены, тем не менее этого апдейта до сих пор не произошло.

Итак, вот правильный способ по включению поддержки TRIM. Для этого следует выполнить следующие команды в терминале:

1. Для начала делаем резервное копирование файла, который будем патчить:
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.original

2. Пропатчиваем файл, тем самым активируем поддержку TRIM:
sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\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

3. Чистим кэш:
sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches

Теперь перезагружаемся!

Если вдруг понадобится отключить поддержку TRIM:


1. Отключение:
sudo 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

sudo kextcache -system-prelinked-kernel

sudo kextcache -system-caches

2. Восстановление файла из бэкапа:
sudo cp /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage.original /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage


Всё что делает этот патч, это замена фразы “APPLE SSD” на нули в файле IOAHCIBlockStorage. Это необходимо для того, что бы обойти ограничение самой Apple на использование только брендовых SSD дисков. Бэкап файла сохраняется в той же директории где лежит оригинальный файл.

Для проверки, активизировался ли TRIM, зайдите сюда: Об этом Mac > Отчёт о системе >


Помните, если у вас бородатое поколение SSD и оборудование само по себе не поддерживает TRIM… этот патч не поможет. Патч всего-лишь обходит ограничение, созданное самой Apple, что бы ограничить TRIM поддержку для любых SSD, которые не под яблочным брендом.

Разобравшись с TRIM Enabler и невзлюбив его метод я начал искать вменяемое решение… нашёл его тут.

Записи контрольных сумм MD5 для оригинала и пропатченного файл в 10.7.0 следующие:
Оригинал: 155b426c856c854e54936339fbc88d72
Изменённый: 945944136009c9228fffb513ab5bf734

Если вы уже использовали TRIM Enabler, вы можете сделать следующее:
  • Попытаться скопировать и заменить ключевой файл с другого Mac под управлением той же версии.
  • Попытаться скопировать и заменить ключевой файл из Раздела для восстановления (Откройте Дисковую утилиту > Mount Recovery HD)
  • Переустановить Льва
  • Ждать следующего апдейта OS до 10.7.* и надеяться, что ключевой файл будет заменён при обновлении (что, кстати, де-факто), и уже после этого применять нормальный патч.


Важно:
К сожалению придётся каждый раз проводить эту операцию после крупного обновления OS X 10.7.1 > 10.7.2 > 10.7.3 > и так далее..., ибо ключевой файл обновляется почти каждый раз при обновлении ОС (если оно не дежурное).

Конец перевода

Дальше в статье идут разжёвывания Википедии, что TRIM не работает на стандартных HDD, что компьютер не дурак и может отличить HDD от SSD, что SSD не может греться больше при активации TRIM, что патч никак не может повлиять на работу системы, так как не вносит никаких изменений в работу самого ядра, что если включить TRIM, а у вас HDD, то ничего не произойдёт и все команды будут просто игнорироваться… ну и так далее. В общем: так как автор назвался грибом, пришлось залезать в короб по самую шляпку и отвечать всем. При наличии подобных вопросов в местных комментариях — буду переводить его послесловия с префиксом «Update», порционно.

Результативных вам усTRIMлений. Спасибо за внимание.

TRIM:
Технология TRIM увеличивает скорость записи в те ячейки, где уже хранились какие-либо данные ранее. Иными словами, эти данные там хранятся и после их удаления. А при необходимости перезаписи на SSD отправляется команда освободить эти ячейки и только потом начинается запись. Таким образом уходит время и сокращается скорость записи. Технология TRIM позволяет контроллеру записывать данные в обход операции высвобождения ячеек. К примеру: заявленная скорость у моего SSD x-25M — до 70 Mb в секунду. Протестировав до активации TRIM — выдавало не больше 50 Mb/s, сейчас заявленные 65-70 Mb/s. Протестируйте свой SSD, возможно так-же недосчитаетесь 30% скорости при записи данных…

Update 1.0
Появилась информация, что TRIM в некоторых случаях вызывает проблемы на тех SSD, которые оснащены контроллером SandForce 2***, как говорят очевиды всё дело в том, что контроллер SF2*** обрабатывает удалённую пользователем информацию своим особым образом и вообще хранит данные на диске в виде одного большого архива… подробности его работы и вытекающие проблемы описаны тут.

Как оказалось контроллером SF2*** оснащён достаточно широкий ряд устройств, в том числе популярный OCZ Vertex 3, поэтому обязательно загляните в список SSD оснащённых контроллером SandForce и смотрите внимательно, есть ли ваш диск в этом списке, если да, то в колонке Controller определите порядковый номер, если он начинается на 2, то отключайте TRIM, инструкция есть выше.

Update 2.0

Данный метод перестал работать после апдейта системы до версии 10.8.1
Тем не менее TRIM Enabler работает, но в интернетах до сих пор встречаются мнения, что он может рушить систему. На свой страх и риск можете попробовать, проблемы уходят, если через эту-же программу отключить TRIM при их возникновений, но вы сами понимаете — всё это «вилами по воде» — если и проявляется, то индивидуально.

Когда найдётся метод без вмешательства в ядро системы — я о нём напишу; если кто-то из вас, уважаемые маководы, найдёт способ раньше, не поленитесь сообщить, пожалуйста.

Update 3.0 // Найден способ активация TRIM для системы 10.8.2

Благодарим пользователя shok, способ найден на просторах интернета.

Выполните следующие команды в терминале:
1. Резервное копирование оригинальных драйверов.
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

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

3. Выполняем две команды, чтобы очистить кэш OS X и забрать модифицированный драйвер.
sudo kextcache -system-prelinked-kernel sudo kextcache -system-caches

4. Перезагружаем Mac. Проверяем активацию TRIM
Источник: Наука и Технологии
Tags:
Hubs:
+35
Comments 94
Comments Comments 94

Articles