Bug 6514

Summary: /etc/init.d/halt: umount /proc/bus/usb выполняется до передачи UPS команды на отключение.
Product: Sisyphus Reporter: Sergey Y. Afonin <asy>
Component: startupAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: ldv, legion, rider
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
инитскрипт
none
скрипт для проверки UPS none

Description Sergey Y. Afonin 2005-04-13 20:06:34 MSD
umount для /proc/bus/usb выполняется до передачи бесперебойнику команды на 
отключение. Если UPS USB-шный, команду, я так понимаю, он не получит: 
  
[ -f /proc/bus/usb/devices ] && umount -n /proc/bus/usb >/dev/null 2>&1 
 
<skip> 
 
# See if this is a powerfail situation. 
UPSCTL=/etc/apcupsd/apccontrol 
if [ -x "$UPSCTL" -a -f /etc/apcupsd/powerfail ]; then 
        action "Attempting to turn the UPS off:" "$UPSCTL" killpower 
        message="The system is halted" 
        command=/sbin/poweroff 
fi 
 
UPSCTL=/sbin/upsdrvctl 
if [ -x "$UPSCTL" -a -f /etc/killpower ]; then 
        action "Attempting to turn the UPS off:" "$UPSCTL" shutdown 
        message="The system is halted" 
        command=/sbin/poweroff 
fi
Comment 1 Dmitry V. Levin 2005-04-13 20:44:00 MSD
И что вы предлагаете?
Comment 2 Sergey Y. Afonin 2005-04-13 20:57:52 MSD
Пока не знаю. А каков, вообще, смысл в отмонтировании usb ? 
 
Comment 3 Sergey Y. Afonin 2005-04-14 01:15:03 MSD
И один не сильно хороший вариант, пока не прояснен вопрос с необходимостью 
отмонтирования USB. Вести список UPS, которые выдерживают паузу после получения 
команды. В случае обнаружения UPS из списка отложить отмонтирование. На сколько 
я помню APC-шные Смарты к таковым относятся. Попробую проверить завтра. 
 
Кстати, кажется еще одна бага: command=/sbin/poweroff. Это приведет к тому, что 
будет отключено питание у ATX материнки. Если у нее в BIOS стоит "запоминать 
последнее состояние", то после подачи питания с UPS системник не включится. Я 
думаю, что если идет отключение по power fail, то должно быть halt, а не 
poweroff. 
 
Comment 4 Sergey Y. Afonin 2005-04-14 15:42:56 MSD
Копирую из devel: 
----- 
я провел эксперименты с APC Smart UPS 700. Оказалось, что все еще хуже. 
В кратце, команда killpower должна даваться бесперебойнику в K00, а не 
в S01. Поясняю. Критерием для начала процесса shutdown у apcupsd служит  
параметр в EEPROM UPS, который в отчете apcupsd называется MINTIMEL. Этот 
же параметр является задержкой для отключения питания у самого UPS после 
получения команы killpower. В результате, в текущей ситуации с halt 
 
1. пока UPS отключит питание, успевает отработаться все. 
 
2. если poweroff не сможет отключить питание, есть риск, что UPS отключится 
   не по команде killpower, а просто потому, что батареи сели. 
----- 
 
Еще бы на чем проверить... 
 
 
 
Comment 5 Sergey Y. Afonin 2005-05-13 17:25:33 MSD
Created attachment 874 [details]
инитскрипт

инит-скрипт, проверяющий наличие UPS с отсрочкой отключения и передающий ему
команду killpower. Теоретически рассчитан на apcupcd и nut,
Comment 6 Sergey Y. Afonin 2005-05-13 17:28:49 MSD
Created attachment 875 [details]
скрипт для проверки UPS

а это скрипт со списком UPS, на которые должен реагировать инит-скрипт.
Это уже только для apcupsd. Для NUT надо написать соответствующий upscheck.
Comment 7 Sergey Y. Afonin 2005-05-13 17:36:50 MSD
Кстати, у меня есть жалоба человека, который уже "попал" с сервером на 
выходных. Его USB-шный Smart не поймал killpower, а питание восстановилось до 
того как батареи сели окончательно. В результате бесперебойник не выполнил 
цикл по питанию и сервер остался зашотдауненным. 
Comment 8 Dmitry V. Levin 2007-03-26 16:54:49 MSD
Начиная с 0.9.8.9-alt1, /proc больше не отмонтируется.
Comment 9 Sergey Y. Afonin 2007-03-27 11:34:08 MSD
Тоже вариант. 

Хотя, боюсь, как бы udev теперь на это не влиял...
Постараюсь проверить.