WoL. Управляемый вывод компьютера из сна

Настраивал недавно сервер Windows Server 2012 R2 в качестве файлового хранилища, с таким условием, что при отсутствии активности более часа, компьютер должен засыпать (переходить в режим энергопотребления S3), и при первых попытках скачать с общей папки - должен быстро просыпаться и отдавать контент.

Вначале настроил биос (не забудьте разрешить работу компьютера в режиме S3), чтобы можно было запускать компьютер с помощью "магического пакета" (подробности тут). Для этого я использую маленькую консольную утилитку mc-wol.exe (см. в аттаче). Синтаксис программы крайне прост. Надо запустить программу и в качестве переменной указать MAC адрес запускаемого компьютера через двоеточия:

mc-wol.exe 00:11:22:aa:ff:cc

Соответственно сервер из холодного режима запускался легко, а вот после запуска ОС, система не хотела просыпаться из спящего режима.

Пришлось прибегнуть к PowerShell. Для доп.настройки надо запустить:

powershell

netsh interface ipv4 show interfaces

затем найти индекс нашего интерфейса, с которого надо будет разрешить просмотр команды на запуск сервера, и ввести новую команду:

netsh interface ipv4 set interface сюда_пишем_наш_индекс forcearpndwolpattern=enabled

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

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

Копаем дальше. Также оказалось, что для Windows 7,8,2012 требуется настроить план энергопотребления, причем не просто абы какой, а сбалансированный. Именно при использовании сбалансированного плана можно заставить комп выходить из спячки. Необходимо выключить режим гибернации. Сам не пробовал проверять, но народ в интернете говорит, что при его включении режим спячки не работает. Ниже пример правильных настроек:

Также оказалось, что режим быстрого запуска системы в Windows Server 2012 как таковой отсутствовал. Чтобы он появился, надо было в PowerShell запустить команду:

powercfg -h on

После этого пункт появился в меню, только надо будет предварительно нажать кнопку вверху окна:

Сетевая карта должна поддерживать технологию ARP разгрузки и NS разгрузки (подробности тут). Также сетевая карта должна поддерживаться в операционной системе. В общем советую установить самые свежие драйвера для сетевой карты. Если у вас внешняя сетевая карта (PCI или PCI-Ex), то она дополнительно должна быть подключена к материнской плате особым кабелем, который позволит сетевой плате включить материнскую плату, так что лучше использовать встроенную сетевую карту.

Вот мои настройки:

После этого провожу эксперимент. Ввожу компьютер в сон, пытаюсь сделать пинг, ничего не происходит. Отправляю магический пакет - комп оживает. Целый день потратил, пытаясь решить загадку, почему компьютер не просыпается. Оказалось, что сетевая карта реагирует только на некоторые запросы, в числе которых - определение адреса по имени. Т.е. если в проводнике написать к примеру \\имя_сервера, то сервер благополучно просыпается, а вот если написать \\IP_адрес_сервера, то сервер продолжает спать. Таким же образом он реагирует и на пинги к нему - т.е. никак.

Вывод: на текущий момент сервер может просыпаться только при наличии магического пакета, или попытки разрешения имени компьютера (SYN соединение я не пробовал). Неутешительно в общем.