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 и отключатся расширенные функции управления питанием. Однако, обратная операция — то есть выгрузка драйверов при работающей системе — крайне небезопасна, и потому не реализована штатными службами управления ОС. Для того, чтобы вернуться в исходное состояние — вернуть возможности «засыпания» и гибернации — потребуется перезагрузить ОС.