Hyper-V и расширенное управление питанием. Функции Sleep и Hibernate



Очевидно, что Hyper-V разрабатывался для использования преимущественно на серверах и своей архитектурой предполагает именно серверные сценарии работы. Также очевидно, что на физических серверах в промышленной среде вы навряд ли используете энергосберегающие состояния — сна (sleep) или гибернации (hibernate). Однако я сам, как и многие из моих коллег, предпочитаю использовать серверную операционную систему на домашнем компьютере и даже на ноутбуках. Ведь возможность интерактивной демонстрации работы продукта на переносимом стенде — большое преимущество при продаже решения. Да и работа с лучшей технологией виртуализации для Windows на собственном ноутбуке также является хорошим подспорьем для технического специалиста.


Если перечисленные сценарии затрагивают и вас — то вы, наверное, уже знаете, что при установке роли Hyper-V на Windows Server 2008 отключаются функции расширенного управления питанием. В частности, пропадает возможность просто закрыть ноутбук с расчетом на то, что он «заснёт» или сохранит своё состояние в режиме гибернации. Цель сегодняшней заметки — рассказать о том, как можно использовать Hyper-V на ноутбуке, не лишаясь при этом возможностей закрыть ноутбук, не задумываясь о том, что он «не заснёт» и посадит вам всю батарею за пару часов.


Итак, мы имеем установленную ОС Windows Server 2008 с ролью Hyper-V. При добавлении роли из ОС исчезли функции расширенного управления питанием. Оказывается, что все дело в драйвере HVBoot.sys, который загружается при старте системы и блокирует функции расширенного управления питанием. Что же можно сделать с драйвером, чтобы вернуть возможность «засыпания» ноутбука, не лишив себя возможности пользоваться виртуальными машинами Hyper-V при необходимости? Работа системных драйверов и служб в Windows настраиваются в ветви реестра HKLM\SYSTEM\CurrentControlSet\Services. Каждый драйвер или служба, среди стандартного набора параметров, обязательно имеют указание на тип запуска службы или загрузки драйвера. Это определено в параметре «Start» (кроме драйверов адаптеров, которые игнорируют данный параметр реестра). Для этого параметра существует пять возможных значений:

































Значение параметра «Start»


Загрузчик


Описание


0x0 (Boot)


Kernel


Включен в базовый набор, загружаемый загрузчиком до старта ядра ОС


0x1 (System)


I/O subsystem


Драйвер, загружаемый подсистемой ввода/вывода при инициализации ядра


0x2 (Auto)


Service Control Manager


Драйвер/служба, загружаемая ОС автоматически при старте


0x3 (On Demand)


Service Control Manager


Драйвер/служба, доступные для ручного запуска пользователем


0x4 (Disabled)


Service Control Manager


Драйвер/служба, не запускаемые ни при каких обстоятельствах


По умолчанию значение параметра «Start» для ветви HKLM\SYSTEM\CurrentControlSet\Services\HVBoot равно «0x0», что загружает драйвер до старта ядра и отключает расширенные функции управления питанием. Исследование показало, что переключение типа загрузки данного драйвера из значения «0x0» в значение «0x3» возвращает в ОС возможности «засыпания» и гибернации. Понятно, что пока драйвер не загружен, вы не можете работать с виртуальными машинами Hyper-V. Однако восстановить работу с Hyper-V можно, загрузив драйвер вручную. Для этого можно использовать, например, команду «net start».


Что же теперь рекомендуется сделать, если вам нужно и пользоваться виртуальными машинами, и возможностью «засыпания» ОС? Во-первых вам следует перевести тип запуска HVBoot в «Manual». Для этого лучше воспользоваться командой командой sc config HVBoot start= demand. Обратите внимание на пробел после знака «=»!


При загрузке ОС вы получите все расширенные функции управления питанием. Если вы хотите поработать с виртуальными машинами Hyper-V, выполните другую команду: sc start HVBoot. Это загрузит драйвер HVBoot.sys, заработает Hyper-V и отключатся расширенные функции управления питанием. Однако, обратная операция — то есть выгрузка драйверов при работающей системе — крайне небезопасна, и потому не реализована штатными службами управления ОС. Для того, чтобы вернуться в исходное состояние — вернуть возможности «засыпания» и гибернации — потребуется перезагрузить ОС.

Comments (3)

  1. Alex A says:

    Опять куча вопросов в одном.

    Торжественно обещаю в следующий раз игнорировать такие вопросы. Есть несколько – пишем несколько, ведь отвечать и читать неудобно.

    1) Hibernate – читаем статью выше отключается драйвером HVBoot.sys, гипервизор тут ни при чем. Если драйвер загружен, нет расширенного управления питанием (и гибернации), но работают ВМ. Если драйвер не загружен, то есть гибернация, но не работают виртуальные машины. Это архитектурно заложено и изменению не подлежит.

    2) VS2005/VPC суть один продукт, немного по разному запускаемый. Решение для персонального исользования на базе гипервизора будет для Win7 – проект VPC7 – отдельное приложение общее кодом с Hyper-V v2, но не компонента ОС. На Vista ставиться не будет. Комментарии по этому поводу только в почте.

  2. Anonymous says:

    Так как руки уже чешутся поставить Windows 7, решил пока не поздно рассказать как ставил себе Windows

  3. sie says:

    На форуме TechNet-RU не так давно был вопрос о том, можно ли использовать Hibernate вместе с Hyper-V. Мне пришлось ответить отрицательно на этот вопрос, изходя из общей логики работы гипервизора, т.к. информации в документации не удалось найти: где-то есть официальная информация о том, что Hyper-V запрещает Hibernate? Этот вопрос и этот пост навевают еще один вопрос: если виртуальные машины VS 2005 работают на VPC 2007 (additions одни и те же), то виртуальные машины Hyper-V работают только на Hyper-V сервере, а решения для персонального использования нет – будет?

Skip to main content