Установка Mac OS X на PC. Часть 19: UEFI-загрузка

UEFI

В этом году на AppStudio появилось множество новых таблиц и разделов. Мы воплотили в жизнь многие затеи и планы. И всё бы отлично, но вот кое за что нас можно пожурить. В 2012-м у нас не получилось уделять должного внимания нашим циклам статей. Но хотя бы под конец года мы немного поправим это упущение — например, очередная статья давно напрашивается в наш большой цикл о теории хакинтоша.

Часто нас спрашивают: «Вы же приличный сайт, про пиратство не пишете, за пару предложений про AppSync отправляете в бан. Так почему же вы рассказываете про такие тёмные дела, как хакинтоши?». Обычно мы отвечаем двумя доводами:

  • во-первых, это чертовски интересно. Если сравнить инструментарий, применяемый для настройки хакинтошей сейчас, с тем, что был в 2007-2008 году, отличия будут поразительными. Какие только выдумки не были воплощены в этой динамично меняющейся сфере знаний!
  • во-вторых, это полезно для самой Apple. Кто бы что ни говорил, а в голову любого хакинтошника рано или поздно закрадывается мысль «а не пора ли перейти на реальный мак?». И что интересно, многие так и поступают.

В отличие от джейлбрейка, который скоро можно будет окончательно хоронить, с хакинтошами история развивается совсем иначе. Сейчас — отличное время для того, чтобы с ними экспериментировать. Кто бы мог подумать лет пять назад, что когда-нибудь Mac OS X на PС можно будет грузить через EFI-среду? А нынче это не просто модный тренд, это уже мейнстрим.

Про EFI (точнее, про UEFI)-загрузку Mac OS X на PC мы и хотели бы поговорить в девятнадцатой по счёту статье нашего хакинтошного цикла. Как всегда, мы рассмотрим тему с точки зрения обывателя и постараемся ответить на простые вопросы: что такое UEFI-загрузка, зачем она нужна, какие минусы имеет и как её правильно настроить.

Несколько лет назад мы с уверенностью твердили: главное отличие Маков от PC состоит в наличии на яблочных компьютерах EFI — продвинутой альтернативы PC-шному BIOS, возможности которой сравнительно легко расширяются. Но сегодня этот тезис безнадёжно устарел. Загляните в любой компьютерный магазин, купите современную материнку, и с большой вероятностью это окажется материнская плата с UEFI.

Про EFI, UEFI и Маки

UEFI и EFI — есть ли разница между ними? И да, и нет. Дело в том, что Unified EFI (UEFI) — результат закономерной эволюции спецификаций EFI, который сейчас де-факто является стандартом, причём поддержку этого стандарта обеспечивает сама компания Intel. В скором будущем BIOS окончательно будет вытеснен UEFI по ряду чисто объективных причин. Главная из них состоит в том, что компьютеры с BIOS неспособны работать с жёсткими дисками, чья ёмкость превышает 2,2 ТБ. Давным-давно такая ёмкость казалась фантастикой, а сейчас, в эпоху Blu-ray-видео, и трёхтерабайтными винчестерами уже никого не удивишь.

Таким образом, стёрлось одно из важнейших отличий Mac и PC, и два таких разных компьютерных мира стали ещё ближе друг к другу. Разумеется, это повод порадоваться за хакинтошников, но радоваться можно лишь отчасти. Виновата в этом Apple (а кто бы сомневался? :). Дело в том, что UEFI-среда на Маках всё равно отличается от той, что применяется на современных материнских платах для PC. Ситуация похожа на положение вещей в Mac OS X — с одной стороны, это как бы полноценная *nix-система с открытым кодом; а с другой стороны оказывается, что Apple открывает только тот исходный код, который сама сочтёт нужным. Так и с маковским UEFI — вне сомнений, это тот самый UEFI, который основан на стандартах Intel, но он основательно допилен в Купертино под собственные нужды.

«Допилить» UEFI гораздо проще, чем BIOS. Конечно, модульный принцип реализован и там, и там. Но работая с BIOS, вы никогда не заставите его подгружать файлы дополнительных модулей из папки на диске, учитывая изменение их состава при каждой загрузке. А для UEFI это является самой что ни на есть обыденной возможностью. Этим и пользуется Apple: программисты компании написали собственные модули для EFI, которые используются на Маках. Исходники для них никто не публиковал, так что поддержание статуса-кво со стороны яблочной компании надёжно обеспечено.

UEFI Gigabyte
Высокотехнологичный UEFI Gigabyte

Что придумали хакинтошники?

Представители хакинтошного движения подумали совершенно здраво: раз нельзя взять и подправить эппловские модули EFI так, чтобы они запускались на PC, то можно написать свои собственные, которые решали бы те же задачи. На сегодняшний день можно констатировать, что первый (да что там первый — единственный) загрузчик, в котором эта концепция полностью раскрыта — это Clover, о котором мы уже писали в нашем хакинтошном цикле статей.

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

Например, вот по какой цепочке грузится Clover на компьютере с BIOS:

BIOS -> сектор MBR -> сектор PBR -> файл boot -> файл загрузчика CLOVERX64.efi -> файл системного загрузчика boot.efi->ядро системы mach_kernel

А так этот процесс выглядит при работе через UEFI:

UEFI -> файл загрузчика CLOVERX64.efi -> файл системного загрузчика boot.efi->ядро системы mach_kernel

Даже если вы не хотите вникать в технические тонкости, разницу вы заметите: во втором варианте цепочка загрузки меньше на три пункта. В этом и состоит главное достоинство UEFI-загрузки.

Зачем нужна UEFI-загрузка?

Сразу развенчаем один популярный миф: никто никогда не говорил, что на материнских платах с UEFI загрузка Mac OS X в UEFI-режиме хакинтошного загрузчика является единственно возможным вариантом. Вовсе нет, на таких материнках совершенно спокойно можно грузиться через эмулятор BIOS. Соответственно, возникает закономерный вопрос о том, что же такого даёт UEFI-загрузка в сравнении с BIOS-загрузкой?

Отвечаем:

  • во-первых, скорость. Это наиболее заметный плюс, т.к. за счёт сокращения длины цепочки загрузки (см. выше) можно достичь сокращения общего времени загрузки компьютера и системы в 2-4 раза. Например, Mac OS X на SSD в условиях BIOS-загрузки Clover будет запускаться не раньше, чем через 45-50 секунд после того, как вы нажмёте кнопку включения компьютера. Львиную долю времени вы будете наблюдать чёрный экран и ждать инициализации загрузчика. Та же Mac OS X на том же SSD может грузиться секунд за 8-10, и это действительно замечательный результат
  • во-вторых, NVRAM. На UEFI-материнках эта часть памяти, свободно изменяемая, но не очищаемая при перезагрузке компьютера, может использоваться в системных целях. Например, Маки хранят в NVRAM информацию о загрузочном разделе (который задаётся в панели «Загрузочный том» в системных настройках). На хакинтошах до относительно недавнего времени эта панель никогда не работала. Потом для BIOS-среды, в рамках которой сохранение информации в NVRAM после перезагрузки или выключения физически невозможно, был придуман хитрый трюк с копированием содержимого виртуально эмулируемой памяти NVRAM в файл на диске и последующим считыванием этого содержимого при следующей загрузке. В условиях UEFI все эти ухищрения теряют смысл; всё работает почти так же, как и на настоящих Маках
  • в-третьих, «нативность». Правда, мы сами не понимаем, что это даёт, кроме некоторого душевного успокоения. Всё равно хакинтош никогда не будет «нативнее», чем настоящий Мак :)

Какие недостатки имеет UEFI-загрузка?

Недостатков тоже не так много:

  • во-первых, возможны проблемы с iCloud (например, неспособность залогиниться в iMessage или FaceTime)
  • во-вторых, при UEFI-загрузке режим сна становится ещё капризнее: даже на тех хакинтошах, где он без проблем работал при загрузке через эмуляцию BIOS, сон может испортиться при переходе на загрузку через UEFI

Обе проблемы носят временный характер; часть причин скрыта в несовершенстве существующих EFI-модулей для хакинтошей, ещё часть — в недрах самой Mac OS X, которая и на «настоящиках» иногда работает совершенно загадочно. Как бы то ни было, надеяться на устранение этих недостатков в будущем всё-таки можно.

Как включить UEFI-загрузку на хакинтоше?

Проще, чем может показаться после прочтения написанного выше. Clover (особенно его свежие сборки) рассчитан на максимальное упрощение этого процесса. В большинстве случаев вам достаточно поставить загрузчик на EFI-раздел диска, на котором расположена Mac OS X. Для этого предусмотрена отдельная опция в параметрах установщика Clover.

А если вы хотите ставить Clover самостоятельно, напомним инструкцию. Допустим, вы распаковали загрузчик на рабочий стол в папку Clover. Запустите Терминал, введите команду sudo -s (потребуется ввести пароль от аккаунта вслепую и нажать Enter). Затем вбейте diskutil list и найдите номер нужного вам диска:

Если искомый диск — disk1 (напоминаем, что после каждой перезагрузки номера дисков могут меняться случайным образом), вводите следующие команды:

[php]mkdir /Volumes/EFI
mount_msdos /dev/disk3s1 /Volumes/EFI
cd /Volumes/EFI
touch /Volumes/EFI.metadata_never_index
rm -rf /Volumes/EFI/.fseventsd/
mkdir /Volumes/EFI/.fseventsd
touch /Volumes/EFI/.fseventsd/no_log
cp -R ~/Clover/* /Volumes/EFI
umount -f /Volumes/EFI[/php]

Чтобы потом получить доступ к EFI-разделу и смонтировать его в Finder, потребуются следующие команды:

[php]sudo -s
mkdir /Volumes/EFI
mount_msdos /dev/disk1s1 /Volumes/EFI[/php]

Само собой, в disk1s1 надо будет подставить правильный номер диска, который вам покажет команда diskutil list. Отключение EFI-раздела производится командой umount -f /Volumes/EFI.

После перезагрузки в настройках UEFI вашей материнки в секции управления загрузочными устройствами надо будет выбрать пункт, соответствующий EFI-разделу на диске с Mac OS X.

Как правильно настроить UEFI-загрузку?

Большинство проблем при UEFI-загрузке возникают из-за неверного выбора EFI-модулей. Важно понимать их задачу: это те же драйверы, но работают они ещё до загрузки системы, т.к. они предназначены для самого загрузчика. Стоит вам забыть какой-нибудь модуль или поставить лишний — всё испортится, система рискует перестать грузиться.

Поэтому важно знать, для чего предназначены те или иные хакинтошные EFI-модули:

Что следует положить в эти папки? На выбор пользователя.

  • HFSPlus.efi, NTFS.efi, VBoxExt2.efi — драйверы файловых систем, обеспечивающие доступ загрузчика Clover к разделам в HFS+, NTFS и ext2/3 соответственно. Забудете первый — загрузка Mac OS X станет невозможной. Забудете второй — Clover не увидит никакие диски с Windows; а если забудете положить третий — не будут видны разделы с Linux-системами
  • FSInject.efi – модуль, который обязателен в том случае, если вы хотите подгружать в систему дополнительные кексты (расширения ядра, они же драйверы OS X) прямо из папки загрузчика Clover
  • PartitionDxe.efi – модуль, обеспечивающий правильную работу с разными разметками диска (как с MBR, так и с GPT, а также с гибридной разметкой)
  • DataHubDxe.efi – по идее, можно и без него, но с ним надёжнее. Драйвер регулирует обмен данными через порты компьютера
  • OsxFatBinaryDrv.efi – модуль, обеспечивающий загрузку других крупных EFI-модулей. Таким крупным модулем является системный загрузчик Mac OS X — boot.efi, поэтому этот драйвер обязателен для EFI-загрузки
  • OsxLowMemFix.efi и OsxAptioFixDrv.efi – модули, корректирующие работу загрузчика с оперативной памятью. Если у вас возникают проблемы с загрузкой системы, пробуйте первый из них, если и он не помогает — второй. Но ни в коем случае не ставьте их одновременно
  • Usb*.efi, *HCI.efi – USB-драйверы для UEFI, которые пригодятся на тот случай, если в UEFI-режиме у вас отваливается мышь или клавиатура
  • CsmVideoDxe.efi — модуль, активирующий дополнительные разрешения экрана загрузчика в UEFI-режиме
  • модули со словом «Mouse» в названии обеспечивают работу мыши в среде загрузчика Clover. Если не нужна мышь — не нужны и драйверы

Все (а точнее, не все, а только те, что вам нужны ;) эти драйверы нужно класть в папку /EFI/drivers64UEFI на том носителе, где установлен Clover.

Напоследок скажем, что обсудить нюансы UEFI-режима Clover непосредственно с разработчиком загрузчика вы можете здесь.