Portál AbcLinuxu, 25. května 2025 23:54
Zlepšete odolnost svých uložených dat proti výpadkům proudu.
Jelikož Linux používá část RAM jako diskovou cache, může při výpadku napájení nastat nekonzistence dat na disku. Pokud se jedná o pracovní stanici doma, není to tak tragické, ale když stavíte firemní fileserver, jde o vážný problém (mimochodem, tento problém se netýká jen Linuxu). Řešením je záložní zdroj napájení neboli UPS (Uninterruptible Power Supply). Jedná se vlastně o průběžně dobíjený akumulátor (obvykle průmyslový Pb 12V), ochranu proti napájecím špičkám a hlavně komunikační část, která dokáže říci PC: "Došlo k výpadku - máš X minut na korektní vypnutí".
UPS se vyrábí buď ve standalone provedení (bedna, která se postaví vedle case počítače) nebo pro montáž do 19" racku (výška obvykle 2U,3U,5U). Výdrž akumulátoru běžné (kancelářské) UPS je zhruba 5-10 minut a výrazně závisí na tom, jestli je k UPS připojen monitor (uvažovaný odběr do 200W, typ UPS 350-500VA). Komunikace s PC probíhá pomocí sériového kabelu (speciální zapojení - obvykle alespoň RxD, TxD, GND + ev. pár pasivních součástek kvůli open-collector výstupu, CANNON 9pin) nebo u nejnovějších modelů pomocí USB. Kabel lze vyrobit svépomocí, schémata jsou k dispozici na internetu.
Existují dvě kategorie UPS - dumb a smart, které se liší v míře konfigurovatelnosti přes komunikační kabel. Základní funkčnost, tj. indikaci výpadku napájení, ztráty komunikace nebo vybití akumulátoru, zvládají obě kategorie. Smart UPS jsou zpětně kompabilní a je možné s nimi komunikovat v dumb režimu, což využívají GPL ovladače (ne všichni výrobci jsou ochotni zveřejňovat detaily smart komunikace).
Ovladače k UPS lze buď získat od výrobce (nejznámější jsou firmy APC, BEST
a TrippLite) ve formě předkompilovaných rpm nebo lze použít GPL ovladače
(tarball/rpm). Nejznámější komunikační balíky jsou PowerChute
(APC),
powerd
(GPL) a apcupsd
(GPL). K jedné UPS lze připojit více počítačů, kde
jeden počítač komunikuje s UPS a při výpadku přepošle upozornění ostatním.
Je také možné sledovat stav napájení pomocí webového rozhraní (cgi scripty).
Osobně bych doporučil spíše GPL ovladače, protože se nemusíte vázat na
konkrétní distribuce či verze jiných programů. Pokud zvolíte rpm balíček,
je instalace pod Linuxem jednoduchá, před kompilací tarballu doporučuji
pročíst alespoň INSTALL_HOWTO
. Pokud hodláte komunikovat pomocí USB, bude
to pro vás znamenat stejnou funkčnost za cenu trochu složitější konfigurace
a zřejmě budete muset použít tarball.
Moje volba padla na apcupsd ve formě rpm balíčku. Po nainstalování balíčku
je nutné ručně upravit soubor /etc/apcupsd/apcupsd.conf
. Vyberte druh
kabelu: standardní APC kabel je ve verzi pro Linux označován jako
940-0023A
, pro NT jako 940-0020B
, (použitelné by měly být oba, vyzkoušel
jsem jen Linux verzi, kterou prodejce označoval jako AP9823
)
typ UPS: backups
, smartups
apod. a sériový port: zřejmě /dev/ttyS1
.
Chování UPS při výpadku lze ovlivnit pomocí voleb BATTERYLEVEL
(min. % zbývající kapacity akumulátoru), MINUTES
(min. odhadované výdrže
akumulátoru), TIMEOUT
(max. doba běhu na akumulátor). Výdrž akumulátoru si
odhaduje sama UPS z napětí na akumulátoru a odebíraného proudu a je jen
orientační! Pokud hodláte UPS sdílet mezi více počítači, použijete ještě
volby UPSCLASS
, UPSMODE
a NETACCESS
.
Jako lahůdku si můžete nastavit
BATTDATE
- expiraci akumulátoru. Po jejím uplynutí vám přijde upozornění
mailem, abyste akumulátor vyměnili. Konfigurační soubor je hojně
komentován včetně příkladů nastavení, takže konfigurace by měla být snadná.
Fri Feb 21 17:21:01 CET 2002 apcupsd 3.8.5 (4 January 2002) redhat startup succeeded
Fri Feb 21 17:25:01 CET 2002 Power failure.
Fri Feb 21 17:25:06 CET 2002 Power is back. UPS running on mains.
Fri Feb 21 17:25:26 CET 2002 Power failure.
Fri Feb 21 17:25:31 CET 2002 Running on UPS batteries.
Fri Feb 21 17:25:36 CET 2002 Reached run time limit on batteries.
Fri Feb 21 17:25:36 CET 2002 Initiating system shutdown!
Fri Feb 21 17:25:36 CET 2002 User logins prohibited
Fri Feb 21 17:25:44 CET 2002 apcupsd exiting, signal 15
Fri Feb 21 17:25:44 CET 2002 apcupsd shutdown succeeded
UPSCABLE 940-0023A
UPSTYPE backups
DEVICE /dev/ttyS0
LOCKFILE /var/lock
BATTERYLEVEL 10
MINUTES 3
TIMEOUT 300
ANNOY 0
ANNOYDELAY 15
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISPORT 7000
EVENTSFILE /var/log/apcupsd.events
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0
UPSNAME Back400
UPSCLASS standalone
UPSMODE disable
NETACCESS true
TIMEOUT
není plýtvání.
Navíc pokud pracovní stanice nedisponují UPS, je jim k ničemu, když server
při výpadku poběží o pár minut déle.
/etc/apcupsd
obsahuje užitečné scripty commfailure
, commok
,
changeme
, mainsback
a onbattery
, které se spouští vždy, když dojde na UPS
k nějaké události. Sem je vhodné doplňovat notifikaci pomocí SMS apod.
(pozor, aby se SMS stihla odeslat ještě před shutdownem, jinak vám přijde
až společně s hláškou o startupu).
sync
(raději dvakrát za sebou), abyste
při eventuelním fsck nepřišli o data v cache.
Komunikační SW balíky
Oficiální UPS-HOWTO
Přehled typů UPS od APC
Dokumentace k Powerchute (bohužel DOC)
Zapojení komunikačního kabelu
Záznamy o UPS na ABC Linuxu
Hodně štěstí při zprovozňování
Příspěvky do diskuze, zejména zkušenosti se sdílením UPS a konfigurací, jiných SW balíků jsou vítány!
Jiří Bajer
Este by som podotkol, ze existuje aj verzia apcupsd pod windows a pre ludi pouzivajucich heterogenne siete je jednoduchsie pracovat s jednym softom. Tiez mi v clanku chybala ukazka nastavenia apcupsd pre pracu s viacerymi ups, ci s viacerymi strojmi.
Mohl byste zverejnit ty vase skripty pro kresleni grafu? :)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.