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