Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #53, АПРЕЛЬ 2005 г.

Ресетнем по-быстрому?

SkyWriter (to@skywriter.ru)

Спецвыпуск: Хакер, номер #053, стр. 053-118-1


Как сотворить watch-dog aka следящую собаку

Привет, амиго! Мы решили немного потомить тебя (или наоборот - позволить расслабиться) и слегка сменили тему на время: неужели тебе не надоело читать про все эти пластиковые карты и системы защиты? Признайся честно, что всем, в том числе тебе, хочется чего-нибудь разумного, доброго, вечного.

К такому разумному, доброму и вечному можно было бы отнести починку утюга для мамы, но мы хакеры, а не домохозяйки, так? :) Починим лучше, например, твой домашний маршрутизатор на базе Linux'a.

Безусловно, у тебя возникнет вопрос, а зачем его, собственно, чинить, если он и так почти всегда прекрасно работает? Вот он, корень зла: "почти всегда" прекрасно работает, а когда не работает, то, скорее всего, просто жестко висит, и ты в очередной раз давишь кнопку Reset на несчастном системнике. И в то же время ты радуешься, что маршрутизатор стоит у тебя дома, а не где-нибудь в далекой лифтовой или на крыше. А если он все-таки живет на крыше, то каждый твой зимний ночной поход к компьютеру будет просто праздником.

Проблему очертили, теперь будем решать ее? Решается она не просто, а очень просто: достаточно найти кого-нибудь/что-нибудь, кто/что перезагружало бы твой маршрутизатор, если тот завис. Ежу понятно, правда? А определить, что он завис, можно заставив его периодически "пингать" то самое кого-нибудь/что-нибудь: не дождались "пинка" - через минут пять перезагрузили маршрутизатор.

Итак, что будет делать наш девайс (работящего негра, денно и нощно ресетящего наш рутер, отбрасываем сразу, ОК?) :)?

- Он (девайс, который, кстати, грамотная общественность именует watchdog'ом) должен следить за работоспособностью рутера, обнаруживать сбои (вне зависимости от их природы: программный сбой или аппаратное "подвисание") и осуществлять "холодный" перезапуск компьютера в случае сбоя.

- Слежку за работоспособностью ПК и выработку сигнала о нормальной работе системы (дальше, чтобы не париться - OK) реализуем программно: в рутере запускаем watchdog-драйвер - Unix-процесс, постоянно следящий за исправностью системы. Конкретный набор выполняемых проверок зависит от конфигурации, периферии рутера и твоих личных предпочтений.

Пока условие "все работает нормально" выполняется, наш процесс (watchdog-драйвер) с некоторым периодом t выдает аппаратный сигнал OK на интерфейс watchdog'a.

Аппаратная часть watchdog'a вырабатывает сигнал Reset в случае если в течение периода Т>t не поступил сигнал OK подтверждения нормальной работы системы. То есть вне зависимости от причин сбоя (аппаратное "зависание", программные ошибки) потерянная работоспособность маршрутизатора будет гарантированно восстановлена без вмешательства негра :-). И тут ты спросишь: а как же проверка файловой системы после перезагрузки? Наверняка будут ошибки и все равно придется залезать на крышу с монитором и клавиатурой.

Ошибки будут, если твой маршрутизатор налажен неграмотно. А грамотно - это так, чтобы в рабочем режиме все разделы, находящиеся на жестком диске/IDE-flash'ке (что именно используешь ты, не знаю), были замонтированы в режиме read-only, в этом случае даже при нажатии кнопки Reset они не будут помечены как "грязные" ("dirty" в терминологии man'ов). Есть, правда, некоторые разделы, которые не могут существовать в режиме read-only: /var, /tmp. Для них отдельная песня: при загрузке создаешь файловую систему где-нибудь на ramdisk'е, монтируешь ее в /var, /tmp и т.п. и создаешь там нужное дерево каталогов. При перезагрузке ramdisk, конечно, потеряется, но... для кого это важно? :)

Содержание  Вперед на стр. 053-118-2