21

Можно ли использовать истинные функции гибернации системы Win 7 и OS X для создания своего рода мгновенного переключения между ними? Представьте себе это, когда читаете / записываете спящие образы на быстрый SSD SATA-3.

Hibernate-коррупция-исправить: Если это стало возможным, убедитесь, что ваши различные разделы не разрешены записи от друг друга. (например, сделать так, чтобы Boot Camp Windows 7 не мог записывать в раздел OS X и наоборот). Эта мера безопасности должна исключить возможность повреждения ваших различных систем, когда одна из них находится в спящем режиме.

Редактировать: я понял, что я не уверен, что именно так на диске работают разделы. Ядро спящего режима OS X может иметь ссылки на блоки на диске, которые оно будет продолжать записывать при повторном пробуждении. Содержатся ли такие дисковые блоки внутри раздела или они назначены разделу после того, как на них записаны? Различается ли он на HDD и SSD? Влияет ли это на вышеуказанное исправление hibernate-коррупции?

Хорошо, давайте двигаться дальше:

Windows 7 уже имеет опцию "Hibernate", которая позволяет вам загружаться обратно в раздел OS X, но OS X точно не предлагает то же самое.

С OS X возможно спящий режим, изменяя системную переменную hibernatemode.

Pre OS X 10.7

sudo pmset -a hibernatemode 2

OS X 10.7

sudo pmset -a hibernatemode 25

Это заставляет ваш Mac переходить в спящий режим, когда вы кладете его в режим сна. Вы можете положить его спать с:

отключение sudo -s сейчас

Хорошо, пока все хорошо. Таким образом, мы можем перевести как Windows 7, так и OS X Lion в спящий режим по желанию. Но ждать! Впереди еще много проблем.

Когда вы переводите OS X в режим гибернации, он автоматически загружается обратно в OS X, когда вы снова включаете Mac. Это лишает нас возможности использовать его для "горячего переключения" между разделами.

Возможные исправления:
Если вы установите rEFIt без rEFItBlesser, вы получите загрузочное меню rEFIt после спящего режима OS X. На OS X 10.7 Lion, однако, это работает не полностью, вместо этого вы получаете черный экран и вынуждены жестко выключать ваш Mac. Но эй! По крайней мере, это прерывает автоматическую загрузку OS X, верно? Может быть, это может быть изменено дальше оттуда.

Как упоминалось в более ранних версиях OS X:s загрузочное меню REFIt действительно появляется после выключения гибернации + включения питания. Это позволяет вам, например, загрузить раздел Boot Camp Windows 7. Здесь тоже есть проблемы. Очевидно, раздел OS X теряет свой флаг гибернации, если вы следуете этому методу, что означает, что при следующей загрузке в OS X он не вернется из своего состояния гибернации. Вместо этого он сделает чистый запуск. Почему это?
Ищет ли OS X наличие спящего образа, чтобы определить, следует ли просыпаться из спящего режима или делать чистый запуск, или у него есть какая-то системная переменная / флаг?

Резюме

Когда Win 7 переходит в спящий режим, он полностью выключается, и вы можете загрузить OS X при запуске. Однако в OS X hibernate заставляет вас просыпаться в OS X. Можете ли вы взломать это, чтобы иметь возможность выбрать загрузочный раздел после спящего режима OS X и при этом иметь возможность позже вернуться в OS X и вывести его из спящего режима??

Давайте посмотрим, что мы вместе можем придумать!

1 ответ1

16

Это невозможно сделать так, как вы думаете. Проблема заключается в тесной интеграции прошивки Apple и OS X. OS X и прошивка работают друг с другом, чтобы определить состояние сна компьютера.

Когда Windows находится в режиме гибернации, она сбрасывает содержимое оперативной памяти в C:\Hiberfil.sys и устанавливает в реестре флаг, что машина находится в режиме гибернации. При первой загрузке компьютера с Windows код загрузочного сектора загружает файл BCD, который загружает эту часть реестра в самом начале процесса загрузки и видит, что система находится в спящем режиме. После выполнения базовой проверки работоспособности он загружает hiberfil.sys обратно в память. Здесь важно то, что все это содержится в файловой системе. Вот почему вы можете свободно загружаться в OS X, затем снова загружаться в Windows, и он продолжит возобновление работы из файла гибернации.

То же самое не относится к OS X. Когда OS X находится в спящем режиме, он сбрасывает содержимое оперативной памяти в /var /vm /sleepimage так же, как это делает Windows. Но он сохраняет флаг гибернации в PRAM, а не в файловой системе (настройка называется IORegistryCurrentSleepMode, если вам интересно). Когда вы снова включаете Mac, значения в PRAM считываются еще до того, как будет предпринята попытка загрузить ОС. Если флаг указывает на то, что система находится в режиме гибернации, первое, что он делает, возвращает его в нормальное состояние. Затем микропрограмма немедленно загружает систему и игнорирует настройки загрузочного диска и любые попытки загрузки Option+. Вы даже не получаете перезвон запуска. На Mac прошивка содержит всю логику, необходимую для проверки файловой системы и загрузки ОС. Он не нуждается в загрузочном коде, как в Windows.

Когда вы бросаете REFIt в микс, он вставляется в процесс. Он заменяет обычный /System/Library/CoreServices/boot.efi (который является загрузчиком OS X) своим собственным файлом загрузчика. Здесь все становится неясным для меня, потому что это все вещи, принадлежащие Apple, но суть в том, что когда микропрограмма загружает OS X, она передает любые аргументы, необходимые для загрузки /var /vm /sleepimage вместо обычного ядра Дарвина. REFIt не делает это должным образом со Львом и позже. Но независимо от того, является ли это более старой версией OS X или более новой, микропрограмма уже перевернула бит гибернации до того, как она даже загрузится. Вот почему возобновление OS X из спящего режима больше невозможно после первого включения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .