Чудеса невиданной кривизны II (со вкусом яблок)

Два года назад я писал о том, какие непредсказуемые последствия может иметь сочетание кривого железа и кривого софта. Но я никогда в жизни не думал, что мне придётся столкнуться с подобным поведением продукции Apple. В конце концов, платформа Mac знаменита тесной интеграцией аппаратной и программной составляющей, что и является ключевым элементом её знаменитой безглючности, верно? Верно.

На днях мне подвернулась возможность приобрести по очень хорошей цене новый MacBook Pro 15" 2012 года, которой (возможностью) я не преминул воспользоваться. До этого я смотрел на MacBook Pro 13" с Retina-экраном, но мне всё-таки довольно часто приходится работать с видео и фото, поэтому хотелось 4-ядерный процессор и дискретную графику, а Retina MBP 15" слегка выходил за рамки моего бюджета. К тому же мысль о покупке компьютера, в котором все возможные и невозможные элементы распаяны прямо на материнской плате, до сих пор вызывает у меня дискомфорт.

Поскольку мой новый ноутбук последние 2 года лежал где-то на складе, то он приехал с операционной системой OS X 10.8. Это горе не беда, подумал я, вытащил из него заводской жёсткий диск, установил внутрь SSD Samsung 850 EVO объёмом 500 ГБ и накатил сверху OS X 10.10.3. После чего обнаружилась странная вещь: оказалось, что мой новый MBP не хочет спать. Вернее, засыпает-то он нормально, но уже никогда не просыпается — после открытия крышки показывает чёрный экран, и вывести его из этого состояния можно только жёсткой перезагрузкой (путём удержания кнопки питания). В системный лог при этом пишутся ошибки вида:

4/5/15 6:42:56.000 AM kernel[0]: AppleIntelFramebuffer::setPowerState(0xaa3d15141a7fed1, 0 -> 2) timed out after 45435 ms
4/5/15 6:42:56.000 AM kernel[0]: NVDA::setPowerState(0xaa3d150e40996d1, 0 -> 2) timed out after 45435 ms

Иными словами, ноутбук не мог вывести ни один из двух установленных в нём графических адаптеров из энергосберегающего режима. Поиск в Google показал, что это широко распространённая проблема, которая приняла масштабы небольшой эпидемии около года назад — после выхода OS X 10.9.3. Чаще всего страдают от этого ноутбуки с двумя видеокартами (интегрированной и дискретной), хотя проблема может проявляться практически на любом железе. Как лечить — не знает никто, в том числе и Apple. Отдельным счастливчикам помогает различное шаманство в стиле «переустановить комбо-апдейт, сбросить PRAM, сбросить SMC, перезагрузиться в безопасном режиме». А кому-то не помогает вообще ничего, в том числе и полная переустановка системы с нуля. Лично я в поисках решения форматировал системный диск и переустанавливал систему два раза и шаманил настройками питания при помощи утилиты pmset, но так почти ничего и не добился.

«Почти» — потому что мне всё-таки удалось найти крайне кривое и костыльное решение, которое мне самому очень не нравится, но которым мне, судя по всему, придётся удовольствоваться до тех пор, пока Apple не соблаговолит всё-таки решить эту проблему на более низком уровне.

Итак, решение. Открываем терминал и пишем:

sudo pmset -a hibernatemode 25 DestroyFVKeyOnStandby 1

Теперь проверяем настройки при помощи команды pmset -g. Её вывод должен выглядить примерно так:

Как это решение работает?

Во-первых, данная команда выключает сон и включает режим гибернации (hibernatemode 25). То есть при закрытии крышки ноутбук пишет дамп памяти на системный раздел и полностью отключает питание.

Во-вторых, мы указали, что при этом система должна уничтожать находящуюся в оперативной памяти копию ключа шифрования системного диска (DestroyFVKeyOnStandby 1).

Теперь, когда я открываю крышку ноутбука, системный загрузчик просит меня ввести пароль пользователя, который используется для расшифровки системного раздела. И уже только после этого происходит чтение файла гибернации и восстановление предыдущего состояния системы. При этом графический адаптер оказывается инициализирован системным загрузчиком, так что проблем с выводом его из сна не наблюдается.

Плюсы этого решения:

  • ноутбук надёжно засыпает и просыпается;
  • в режиме сна не расходуется заряд аккумулятора;
  • повышенная безопасность, т.к. в режиме сна ключ расшифровки системного раздела не находится в оперативной памяти.

Минусы этого решения:

  • система засыпает и просыпается дольше, чем обычно, т.к. гибернация требует больше времени;
  • при выводе ноутбука из режима сна необходимо вводить пароль дважды (для расшифровки системного раздела и для разблокировки системы);
  • частая запись полного дампа оперативной памяти (8 ГБ в моём случае) приводит к повышенному износу твердотельного накопителя.

В моём случае это решение работает, поскольку ноутбук обычно стоит на столе с подключённым питанием и переходит в режим сна только тогда, когда мне надо перевезти его из дома в офис и обратно (то есть 2-3 раза в неделю). Но если вы ездите с ноутбуком постоянно и переводите его в режим сна несколько раз в день, то твердотельный накопитель может износиться несколько быстрее, чем того хотелось бы. (Хотя один мой знакомый, который хорошо разбирается в этой теме, утверждает, что мои страхи беспочвенны и что даже в этом случае любой современный SSD прослужит минимум 10 лет.) ♦

Если вам понравился этот текст, не забудьте подписаться на обновления моего блога.

Плюсануть
Поделиться