|
|
|||||||||||||||||||||||||||||
|
Wake On Lan- технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтовИсточник: habrahabr
Wake-on-LAN (WOL; в переводе с англ. - "пробуждение по [сигналу из] локальной сети") - технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов. И все бы хорошо, если бы не одно НО. После сбоя питания ваш компьютер не включится.
Согласитесь, это будет "приятной" неожиданностью, особенно если вы находитесь за пару тысяч километров от него. Одно из решений написано здесь, но оно аппаратно-программное, а ведь можно обойтись без дополнительного железа.
ВведениеДля начала разберемся, почему компьютер не включится. Для понимания этого стоит обратится к ACPI.
ACPI - англ. Advanced Configuration and Power Interface - усовершенствованный интерфейс управления конфигурацией и питанием). В ACPI описаны состояния - как глобальные, так и конкретных устройств в частности. Нас интересуют два глобальных состояния:
К сожалению, при подключении питания система сама не переходит из G3 в G2. Поэтому для обеспечения возможности загрузки после сбоя питания нужно научится переводить компьютер из G3 в G2. В большинстве [новых] биосов есть опция "After Power Failure". Принимать она может одно из трех значений:
Выбрав "Turn On", останется вопрос лишь в том, как выключить компьютер, когда он включился после сбоя питания, а не от запроса по сети или штатного запуска кнопкой на корпусе. Делать эти проверки мы будем в initrd.
Initrd (сокращение от англ. Initial RAM Disk, диск в оперативной памяти для начальной инициализации) - временная файловая система, используемая ядром Linux при начальной загрузке. Расположение файлов для initrd в Ubuntu/Debian можно посмотреть в man на initramfs-tools. Для Centos все немного по другому - там dracut. Для обеспечения проверки, как был включен компьютер, после посылки wol пакета мы будем пинговать его. Но так как пакет WOL у нас "магический", пусть пинги будут тоже "магическими". Пусть наши пинги будут размером в 48 байт, а не в 84. Итого вся идея в виде блок-схемы:
РеализацияМодули
В /etc/initramfs-tools/modules добавим необходимые модули для работы iptables и сети.
Модуль для вашей сетевой картыr8169 (у вас может быть другая)
Модули iptablesxt_length iptable_filter ip_tables x_tables
СкриптВ /etc/initramfs-tools/scripts/local-top/ добавим файл checkboot с содержимым:
ХукВ /etc/initramfs-tools/hooks/ добавим файл checkboot с содержимым:
Update initrdПеред обновлением initrd хорошей идеей является скопировать стабильный вариант в /boot с другим именем, чтобы в случае каких-либо ошибок в скрипте/хуке загрузка системы не представляла сложности. Обновляем initrd командой:
GrubДобавляем новые строчки в grub с nocheckboot. Делаем это либо непосредственным редактированием /boot/grub/grub.cfg с созданием нового пункта с добавлением nocheckboot в строке параметров к ядру, либо изменяя /etc/grub.d/10_linux, что лучше, так как после update-grub2 наши изменения не исчезнут, как случится, если мы будем редактировать grub.cfg. Для этого в /etc/grub.d/10_linux добавляем:
ЗапускОсталось только написать скрипт запуска. И вот он:
Вместо заключенияВот и все, теперь вы не потеряете доступ к машинам из-за сбоя питания. Конечно, здесь ещё можно поговорить про UPS, но задача состояла в поиске решения без использования UPS. Такая схема полезна в том случае, если вам нужен доступ к вашим компьютерам (доступ к данным, проведение вычислений), которые основное время прибывают в выключенном состоянии и ждут вас. Ссылки по теме
|
|