+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.51 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Wake On Lan- технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов

23.12.2013 13:37

Wake-on-LAN (WOL; в переводе с англ. - "пробуждение по [сигналу из] локальной сети") - технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов.

И все бы хорошо, если бы не одно НО. После сбоя питания ваш компьютер не включится.
Согласитесь, это будет "приятной" неожиданностью, особенно если вы находитесь за пару тысяч километров от него.
Одно из решений написано здесь, но оно аппаратно-программное, а ведь можно обойтись без дополнительного железа.

Введение

Для начала разберемся, почему компьютер не включится. Для понимания этого стоит обратится к ACPI.
ACPI - англ. Advanced Configuration and Power Interface - усовершенствованный интерфейс управления конфигурацией и питанием). В ACPI описаны состояния - как глобальные, так и конкретных устройств в частности.
 
 

Нас интересуют два глобальных состояния:

  • G2 (S5) (soft-off) - мягкое (программное) выключение; система полностью остановлена, но под напряжением, готова включиться в любой момент. Системный контекст утерян.
  • G3 (mechanical off) - механическое выключение системы; блок питания ATX отключен.

К сожалению, при подключении питания система сама не переходит из G3 в G2.
Поэтому для обеспечения возможности загрузки после сбоя питания нужно научится переводить компьютер из G3 в G2.

В большинстве [новых] биосов есть опция "After Power Failure". Принимать она может одно из трех значений:

  • "Stay Off" - при потере питания в сети и его восстановлении для включения ПК необходимо нажать кнопку питания.
  • "Turn On" - восстановление питания вызывает автоматическое включение системы.
  • "Last State" - к автоматическому включению ПК добавляется возможность восстановления системы в том состоянии, в котором она находилась на момент пропадания питания.

image

Выбрав "Turn On", останется вопрос лишь в том, как выключить компьютер, когда он включился после сбоя питания, а не от запроса по сети или штатного запуска кнопкой на корпусе. Делать эти проверки мы будем в initrd. 

Initrd (сокращение от англ. Initial RAM Disk, диск в оперативной памяти для начальной инициализации) - временная файловая система, используемая ядром Linux при начальной загрузке.

Расположение файлов для initrd в Ubuntu/Debian можно посмотреть в man на initramfs-tools. 
Для Centos все немного по другому - там dracut.

Для обеспечения проверки, как был включен компьютер, после посылки wol пакета мы будем пинговать его. Но так как пакет WOL у нас "магический", пусть пинги будут тоже "магическими". Пусть наши пинги будут размером в 48 байт, а не в 84.

Итого вся идея в виде блок-схемы:
image

Реализация

Модули

В /etc/initramfs-tools/modules добавим необходимые модули для работы iptables и сети.

Модуль для вашей сетевой карты

r8169 (у вас может быть другая)

Модули iptables

xt_length iptable_filter ip_tables x_tables

Скрипт

В /etc/initramfs-tools/scripts/local-top/ добавим файл checkboot с содержимым:

#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac [ `cat /proc/cmdline / grep nocheckboot / wc -l` -eq 1 ] && exit 0 iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 48 -j ACCEPT modprobe r8169 ifconfig eth0 192.168.0.2 up sleep 3 C=`iptables -L INPUT -v / grep 'icmp echo-request length 48' / cut -f5 -d' '` [ $C -gt 0 ] && exit 0 poweroff -f exit 0
И делаем его исполняемым:

chmod +x /etc/initramfs-tools/scripts/local-top/checkboot
Скрипт реализует блок-схему, приведенную выше.

Хук

В /etc/initramfs-tools/hooks/ добавим файл checkboot с содержимым:

#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac cp /sbin/ifconfig "${DESTDIR}/sbin" cp /sbin/iptables "${DESTDIR}/sbin" cp /lib/libip4tc.so.0 "${DESTDIR}/lib" cp /lib/libip6tc.so.0 "${DESTDIR}/lib" cp /lib/libxtables.so.7 "${DESTDIR}/lib" cp /lib/i386-linux-gnu/i686/cmov/libm.so.6 "${DESTDIR}/lib" mkdir "${DESTDIR}/lib/xtables" cp "/lib/xtables/libipt_icmp.so" "${DESTDIR}/lib/xtables" cp "/lib/xtables/libxt_length.so" "${DESTDIR}/lib/xtables" cp "/lib/xtables/libxt_standard.so" "${DESTDIR}/lib/xtables" exit 0
И делаем его исполняемым:

chmod +x /etc/initramfs-tools/hooks/checkboot
Этот файл указывает, что необходимо добавить в initrd для корректной работы нашего скрипта.
В нем после копирования утилит iptables и ifconfig необходимо так же скопировать библиотеки для iptables.
Слинкованные библиотеки можно получить, выполнив  ldd /sbin/iptables . 
Но в процессе работы также будут использоваться динамически подгружаемые модули. Их список можно увидеть, выполнив команду:

# strace iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 48 -j ACCEPT 2>&1 / grep ^open / grep '.so' / grep -v ENOENT / grep -o '"[^"]*"'
Что позволит получить остальные подгружаемые библиотеки:

"/lib/xtables/libipt_icmp.so" "/lib/xtables/libxt_length.so" "/lib/xtables/libxt_standard.so"

Update initrd

Перед обновлением initrd хорошей идеей является скопировать стабильный вариант в /boot с другим именем, чтобы в случае каких-либо ошибок в скрипте/хуке загрузка системы не представляла сложности.
Обновляем initrd командой:

# update-initramfs -u

Grub

Добавляем новые строчки в grub с nocheckboot.
Делаем это либо непосредственным редактированием /boot/grub/grub.cfg с созданием нового пункта с добавлением nocheckboot в строке параметров к ядру, либо изменяя /etc/grub.d/10_linux, что лучше, так как после update-grub2 наши изменения не исчезнут, как случится, если мы будем редактировать grub.cfg.

Для этого в /etc/grub.d/10_linux добавляем:

linux_entry "${OS} nockeckboot" "${version}" simple \ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT} nocheckboot"
После:

linux_entry "${OS}" "${version}" simple \ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}"
А затем делаем:

# update-grub2

Запуск


Осталось только написать скрипт запуска.
И вот он:

!#/bin/sh wol -i 192.168.0.255 {MAC} ping -s 20 -c 50 -W 1 192.168.0.2
Здесь "-c 50" - это 50 пакетов, 1 пакет в секунду, а значит 50 секунд - время, за которое должны пройти все этапы до "Проверка счетчика правила iptables". А "-s 20" делает размер пакета равным 48 байтам. 48 - 20 = 28 байт - заголовки IP и ETHERNET.

Вместо заключения


Вот и все, теперь вы не потеряете доступ к машинам из-за сбоя питания.
Конечно, здесь ещё можно поговорить про UPS, но задача состояла в поиске решения без использования UPS.
Такая схема полезна в том случае, если вам нужен доступ к вашим компьютерам (доступ к данным, проведение вычислений), которые основное время прибывают в выключенном состоянии и ждут вас.

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года