Можно ли использовать истинные функции спящей системы Win 7 и OS X, чтобы создать своего рода мгновенное переключение между ними? Представьте себе это при чтении/записи спящих образов на быстрый SATA-3 SSD.
Исправление повреждения спящего режима:Если это возможно, убедитесь, что ваши различные разделы не имеют разрешения записи друг на друга. (например, сделайте так, чтобы Boot Camp Windows 7 не мог записывать в раздел OS X и наоборот). Эта мера безопасности должна сделать невозможным повреждение друг друга вашими различными системами, когда одна из них находится в спящем режиме.
Редактировать:Я понял, что не уверен, что разделы на диске работают именно так. Спящее ядро OS X может иметь ссылки на блоки на диске, в которые оно продолжит записывать данные, когда снова проснется. Содержатся ли такие блоки диска в разделе или они назначаются разделу после записи? Отличается ли это на HDD и SSD? Влияет ли это на вышеупомянутое исправление hibernate-corruption-fix?
Хорошо, давайте продолжим:
В Windows 7 уже есть опция «Гибернация», которая позволяет вам загрузиться обратно в раздел OS X, но OS X не предлагает того же самого.
В OS X можно перейти в режим гибернации, изменив системную переменную hibernatemode.
До OS X 10.7
sudo pmset -a спящий режим 2
ОС X 10.7
sudo pmset -a спящий режим 25
Это заставит ваш Mac перейти в спящий режим, когда вы переводите его в режим сна. Вы можете перевести его в режим сна с помощью:
sudo shutdown -s сейчас
Ладно, пока все хорошо. Так что мы можем по желанию перевести в спящий режим и Windows 7, и OS X Lion. Но подождите! Впереди еще больше проблем.
Когда вы переводите OS X в режим гибернации, она автоматически загрузится обратно в OS X, когда вы снова включите свой Mac. Это делает невозможным использование ее для «горячего переключения» между разделами.
Возможные исправления:
Если вы установитеРЕМОНТбез 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 спящий режим заставляет вас выйти из спящего режима в OS X. Можно ли взломать это так, чтобы можно было выбрать загрузочный раздел после перехода OS X в спящий режим и при этом иметь возможность вернуться в OS X позже и вывести ее из спящего режима?
Давайте посмотрим, что мы вместе сможем придумать!
решение1
Это невозможно сделать так, как вы думаете. Проблема заключается в тесной интеграции прошивки Apple и OS X. OS X и прошивка работают друг с другом, чтобы определить состояние сна компьютера.
Когда Windows переходит в спящий режим, он сбрасывает содержимое оперативной памяти в C:\Hiberfil.sys и устанавливает флаг в реестре, что машина находится в спящем режиме. Когда вы впервые загружаете машину Windows, код загрузочного сектора загружает файл BCD, который загружает эту часть реестра очень рано в процессе загрузки и видит, что система находится в спящем режиме. После выполнения базовой проверки работоспособности он загружает hiberfil.sys обратно в память. Здесь важно то, что все это содержится в файловой системе. Вот почему вы можете свободно загрузиться в OS X, а затем снова загрузиться в Windows, и она продолжит возобновлять работу из файла спящего режима.
Это не относится к OS X. Когда OS X переходит в спящий режим, она сбрасывает содержимое ОЗУ в /var/vm/sleepimage так же, как это делает Windows. Но она сохраняет флаг спящего режимав коляске, а не файловая система (параметр называется IORegistryCurrentSleepMode, если вам интересно). Когда вы снова включаете Mac, значения в PRAM считываются еще до попытки загрузки ОС. Если флаг указывает на то, что система находится в спящем режиме, первое, что он делает, — это возвращает ее в нормальное состояние. Затем прошивка немедленно загружает систему и игнорирует параметр Startup Disk и любые попытки Option+boot. Вы даже не получаете звукового сигнала запуска. На Mac прошивка содержит всю логику, необходимую для проверки файловой системы и загрузки ОС. Ей не нужен загрузочный код, как Windows.
Когда вы добавляете rEFIt в этот микс, он вставляет себя в процесс. Он заменяет обычный /System/Library/CoreServices/boot.efi (который является загрузчиком OS X) своим собственным файлом загрузчика. Вот тут-то все становится неясным для меня, потому что все это фирменные вещи Apple, но суть в том, что когда прошивка загружает OS X, она передает любые аргументы, необходимые для загрузки /var/vm/sleepimage вместо обычного ядра Darwin. rEFIt не делает этого должным образом с Lion и более поздними версиями. Но независимо от того, старая это версия OS X или новая, прошивка уже переключила бит гибернации еще до того, как rEFIt загрузился. Вот почему выход OS X из режима гибернации больше невозможен после первого включения питания.