Homeserver 33: Unterbrechungsfreie Stromversorgung

So, jetzt reicht’s mir! Das war jetzt der dritte Stromausfall innerhalb der letzten paar Monate. Und jedes Mal muss ich den Server überprüfen, ob das Dateisystem Schaden genommen hat, ob das RAID noch funktioniert, ob Daten verloren sind… All das steht in absolut keinem Verhältnis zu einer 60 € USV. Zwar dauern diese Stromausfälle nie lange, meistens zwischen 1 und 5 Minuten, aber das ist ja letztlich auch egal. Der Server ist dennoch ausgegangen, und zwar ohne seine Daten korrekt abzulegen. Jedenfalls im schlimmsten Fall.

Hinzu kommt, dass ich hier öfter mal Spannungsschwankungen habe. Die sind auch nicht wirklich schlimm, können aber zur Folge haben, dass eine Festplatte sich aus dem RAID abmeldet, wieder eingetragen werden muss und Stunden braucht, bis das RAID wieder synchronisiert ist und fehlerfrei läuft.

Also finde ich, ist jetzt der richtige Zeitpunkt gekommen, eine unterbrechungsfreie Stromversorgung anzuschaffen. Die soll gar nicht so sehr den Server im Betrieb halten. Wenn aber der Netzstrom ausfällt, soll der Server kontrolliert und vernünftig heruntergefahren werden. Und am besten wäre das, wenn dies auch noch automatisch gehen würde! Und diese USV soll, nach Möglichkeit, Spannungsschwankungen ausgleichen und auch als Überspannungsschutz dienen.

Diese Wünsche klingen echt teuer, oder? Habe ich auch gedacht, aber ist es zum Glück nicht. Ich habe mich selbst gewundert, aber man kann all dies tatsächlich schon für weit unter 100 € haben. Und zwar bietet APC ein paar USVs an, die für diesen Zweck geradezu ideal sind.

Ich habe mich für eine APC Backups BX700UI entschieden. Zum Zeitpunkt des Kaufs kostete sie 62,99 € bei Amazon. Die hat 390 Watt Ausgangsleistung und soll bei halber Last 9 Minuten überbrücken können. Für meine Zwecke reicht das Dicke, weil mein Server niemals so viel braucht. Selbst wenn, reicht die Zeit locker, um sauber herunterzufahren.

So eine USV hat durchaus Vor-, aber auch Nachteile. Daher werde ich mal ein Paar davon aufzählen.

Vorteile

Diese dürften auf der Hand liegen:

  • Bei Stromausfall sauberes Runterfahren
  • Automatische Spannungsregulierung und Überspannungsschutz
  • Bis zu 4 Geräte können hier angeschlossen werden
  • Gerät ist per PC steuerbar, geht mit Linux genau so gut wie mit Windows

Nachteile

Ja, so ein Teil hat leider auch Nachteile. Aber man muss halt abwägen, ob man sich damit zufrieden geben kann, oder ob die Nachteile die Vorteile überwiegen. Ich persönlich kann mit den Nachteilen leben.

  • Alle Geräte kleiner als 700VA sind nicht steuerbar. Das Modell BX500UI hätte mir auch gereicht, ist aber halt nicht von Linux steuerbar und kann nicht den PC runterfahren.
  • Ich habe das Modell mit 4 Kaltgeräteanschlüssen gewählt. Es gibt das ganze auch mit 4 Schuko-Steckern, das ist aber teurer.
  • Die USV verbraucht selbst ebenfalls Strom. In den Rezensionen gehen die Meinungen aber auseinander, wie hoch der Verbrauch tatsächlich ist, auch wenn die Akkus voll sind.
  • Akkus sind nicht durch den Anwender austauschbar. Das muss der Service tun. Die Kosten für das Hin- und Herschicken, Akku, Arbeit, … So ein Akku soll zwischen 3 und 5 Jahren halten. Wäre zu überlegen, ob eine neue USV dann nicht evtl. billiger ist.
  • USB-Kabel nicht im Lieferumfang. OK, kein Beinbruch, aber wissen sollte man das schon. 🙂 Falls man also kein USB A-B-Kabel hat, sollte man sich noch eines besorgen.

Vorbereitungen

OK, dann mal los! Ein etwas gewichtiges Paket ist bei mir eingetroffen. Ich habe aber, um schon mal vorbereitet zu sein, das PDF-Handbuch zu dem BX700UI gelesen. Danach ist es sogar ziemlich einfach, das Gerät in Betrieb zu nehmen, weil es so viel gar nicht dran einzustellen gibt.

Lediglich 2 Punkte in der Anleitung stören mich: Die Signaltöne und LED-Signale sind in einer Tabelle in der PDF beschrieben, die nur schwer zu lesen ist. Eine andere Tabelle beschreibt die Möglichkeiten, das Verhalten der USV bei Stromschwankungen und dergleichen einzustellen. Auch diese ist mit Jaws nicht gut zu lesen. Da muss ich mir mal helfen lassen, aber abgesehen davon sehe ich keine Probleme.

Der Inhalt des Kartons ist relativ unspektakulär. Ein Handbuch, ein Kaltgerätekabel zum Verbinden der USV mit einem PC, und die USV selbst. Puh, das Teil müffelt! 🙁 Hoffentlich geht das bald weg!

An der Front der USV ist nur der Power-Knopf. An der Rückseite gibt es 4 Kaltgeräteanschlüsse, ein Netzanschluss, eine Unterbrechertaste – so etwas wie eine Sicherung, RJ-11-Anschlüsse zum durchschleifen und den Batteriekonnektor. Und natürlich ist dort auch der USB-Anschluss für die Steuerung.

Die Batterie ist zwar fest eingebaut, aber noch nicht angeschlossen. Hat also keinen physischen Kontakt zum Gerät. Hierfür gibt es hinten eine Art Griff, genau befindet der sich hinten oben. Dieser muss rausgezogen, nach unten geklappt und in das Gerät reingeschoben und fest reingedrückt werden. Sollte man, warum auch immer, die USV länger mal wegpacken wollen, kann man mit einem Schlitzschraubendreher den Griff wieder rausziehen, um die Batterie wieder vom Gerät zu trennen.

Das wär’s eigentlich schon, die USV ist bereits einsatzbereit.

Installation

Die Installation geht in 2 Schritten. Zunächst muss die USV angeschlossen und mit dem Server verbunden werden. Das betrifft die Stromversorgung, aber auch ein USB-Kabel für das Monitoring. Als nächstes muss auf dem Server das Paket für das Strom-Management installiert und konfiguriert werden.

Hardware-Installation

Zunächst fahre ich den Server herunter und trenne ihn vom Strom. Das Netzkabel, welches von der Wandsteckdose in den Server ging, wird jetzt in die USV gesteckt. Sobald die USV Strom aus der Wand bekommt, beginnt sie bereits, ihre Batterien aufzuladen.

Das Kaltgerätekabel wird in einen der 4 hinteren Anschlüsse an der USV eingesteckt, das andere Ende kommt in das Netzteil des Servers.

Und zu guter Letzt kommt ein USB-Kabel an die USV, das andere Ende natürlich in den Server, damit wir die USV steuern, bzw. die USV den Server herunterfahren kann. Ich sagte ja bereits, dass kein USB-Kabel im Lieferumfang der USV war. Nun, in meiner PC-Grabbelkiste findet sich derlei Zeugs zu Hauf. Wer keines hat, sollte beim Kauf der USV dran denken. Ihr braucht eines mit einem A-Stecker an dem einen, und einem B-Stecker am anderen Ende.

Natürlich fährt nicht die USV den Server runter. Das tut die Software, die ich nachher installiere. Die USV meldet über das USB-Kabel nur ihren Zustand, also wie viel Strom noch auf der Batterie ist, ob Strom aus der Wand kommt und mit welcher Spannung usw. Die Software, die auf dem Server läuft entscheidet dann anhand dieser Angaben, ob und was sie dann tut.

Damit der Server aber jetzt hochgefahren werden kann, muss die USV mit dem Power-Knopf an der Front eingeschaltet werden. Es ertönt ein kurzer Ton, man kann noch ein paar mal das Knacken von Relais hören, dann ist das Gerät an. Nun kann man den Server einschalten und hochfahren.

Software-Installation

Nun muss noch die Software installiert werden, damit der Server mit der USV überhaupt etwas anfangen kann. Hierzu logge ich mich wieder über eine SSH-Verbindung auf meinem Server ein.

Um zu sehen, ob die unterbrechungsfreie Stromversorgung überhaupt vom Server erkannt wurde, gebe ich ein mal den Befehl lsusb ein. Nun wird mir eine Liste der USB-Geräte angezeigt, welche auf meinem Server vorhanden sind. Die interessante Zeile ist die hier:

Bus 003 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

Das zeigt mir, dass die USV erkannt wurde und wir damit auch was anfangen können.

Nun muss das Software-Paket installiert werden, mit dem man die USV steuert:

sudo apt-get install apcupsd

Hiermit wird das Programm und dessen Dokumentation installiert.

Nun muss der Dienst aber noch konfiguriert und gestartet werden. Dazu muss zunächst die Datei /etc/apcupsd/apcupsd.conf editiert werden:

sudo nano /etc/apcupsd/apcupsd.conf

Folgende Werte habe ich geändert. Alle nicht erwähnten Felder sind so, wie sie standardmäßig waren.

  • UPSCABLE: Standardmäßig steht hier „smart“, ich habe es zu „usb“ geändert.
  • UPSTYPE: Standardmäßig steht hier „apcsmart“, ich ändere das auf „usb“.
  • DEVICE: Diese Zeile muss auskommentiert werden, also ein Nummernzeichen „#“ muss vor die Zeile gesetzt werden.
  • POLLTIME: Gibt den Wert in Sekunden an, nach denen die USV nach ihrem Status befragt wird. Die Zeile ist auskommentiert und auf 60 Sekunden eingestellt. Hier das Nummernzeichen entfernen und den Wert auf 15 setzen. Ich erkläre später, warum.

Diese Werte sind wichtig, da die USV sonst vom Dienst nicht erkannt wird. Natürlich werden die Werte ohne Anführungsstriche eingegeben.

Nun muss noch konfiguriert werden, wann der Server heruntergefahren wird. Hier bedurfte es einiger Experimente, weil ich nicht wusste, wie schnell der Server die Akkus der USV verbraucht.

  • BATTERYLEVEL: Wenn dieser Wert in Prozent erreicht ist, wird der Server heruntergefahren. Er steht auf 5 %, das ändere ich auf 15.
  • MINUTES: Wenn die Batterielaufzeit in Minuten diesen Wert erreicht, wird der Server heruntergefahren. Hier ist bereits eingestellt, dass der Server abgeschaltet wird, wenn nur noch 3 Minuten Restlaufzeit auf der Batterie verfügbar sind.
  • NISIP: Hier ist 127.0.0.1 voreingestellt, ändert das auf 0.0.0.0. Sonst funktioniert einiges nicht richtig. Zum Beispiel funktioniert dann die Statusabfrage in einer SSH-Sitzung nicht mehr.

Bei voller Akkuladung kann die USV meinen Server etwa 30 Minuten betreiben. Das ist schon eine Menge, finde ich. Damit aber der Server rechtzeitig heruntergefahren werden kann, muss der Befehl zum Runterfahren kommen, wenn noch Genug Kapazität auf dem Akku ist. Rein rechnerisch würde also 1 Minute Laufzeit etwas um die 3 % Akkukapazität verbrauchen. Um also eine Reserve zu haben, falls die Last doch mal höher ist, habe ich die Schwelle, bei der der Befehl kommt, auf 15 % gesetzt, oder wenn der Akku früher durch hohe CPU-Last nur noch 3 Minuten Laufzeit hat.

Nun kommt noch die Polltime dazu. Die voreingestellten 60 Sekunden sind viel zu viel! Im schlimmsten Fall könnte der Befehl zu spät kommen, und der Saft ist alle, bevor alle Prozesse ordentlich beendet sind. Also stelle ich die Polltime auf 15 Sekunden ein, so dass alle 15 Sekunden der Status der USV-Akkus abgefragt wird. So stelle ich sicher, dass der Befehl kommt, wenn noch 4 bis 5 Minuten Leistung auf dem Akku sind, und nicht erst, wenn nur noch 2 Minuten Restlaufzeit da sind. Das ist mir nämlich in den ersten Tests so passiert.

Das war es für diese Datei, mit Ctrl+X speichern, fertig.

Der Dienst kann aber noch nicht gestartet werden, da er sich erst starten lässt, nachdem er konfiguriert wurde. Also müssen wir dem Dienst noch erklären, dass er nun konfiguriert ist… 🙂 Ich weiß, kompliziert, aber ist halt so. Also müssen wir noch folgende Datei editieren:

sudo nano /etc/default/apcupsd

Hier gibt es ganz unten einen Wert „ISCONFIGURED=no“. Diesen Wert müssen wir auf „yes“ setzen, so dass die Zeile so aussieht:

ISCONFIGURED=yes

Nun wieder mit Ctrl+X speichern, auch hier, fertig!

Der Dienst wird jetzt mit folgendem Befehl gestartet:

sudo service apcupsd start

Benutzung

Viel kann man jetzt gar nicht mehr machen. Der Dienst wird jetzt im Hintergrund arbeiten und schauen, was die USV meldet. Meldet sie, dass sie auf Batterie läuft, wird der Dienst das erkennen. Meldet die USV, dass nur noch 15 % oder nur noch 3 Minuten Restlaufzeit auf der Batterie sind, wird der Server heruntergefahren.

Man kann jetzt aber mal den Status abfragen. Die Ausgabe ist echt umfangreich, daher beschreibe ich mal die wichtigsten Parameter. Man ruft den Status mit:

sudo apcaccess

auf. Die Ausgabe ist, wie ich sagte, umfangreich. Daher hier mal die wichtigsten Werte. Ganz oben kommen ein paar generelle Infos über den Rechner, die Softwareversion und die Konfigurationseinstellungen, die wir früher schon gemacht haben.

  • MODEL: Back-UPS XS 700U: Nun, sagt ja schon, was es ist.
  • STATUS: ONLINE: OK, ist auch recht aussagekräftig.
  • LINEV: 238.0 Volts: Das zeigt die derzeit tatsächliche Spannung an. Das stand vorhin mal bei 232.
  • LOADPCT: 18.0 Percent: Das ist die Auslastung der USV. Da geht noch was… 🙂
  • BCHARGE: 100.0 Percent: OK, die Batterien sind voll!
  • TIMELEFT: 31.1 Minutes: So lange könnte die USV den Server betreiben.

Dann kommen viele Angaben über Firmware, Batteriedatum, Seriennummer usw. Aber das sind die paar wirklich interessanten Infos.

Benachrichtigung per Mail

Man mag sich fragen, wie die Mail gesendet werden soll, wenn doch der Strom ausgefallen ist? Tja, da mag was dran sein. 🙂 Aber für die Zukunft plane ich, auch die Fritz!Box an die USV zu hängen. Dann hätte sich dieses Problem erledigt. 🙂

Aber warum will ich überhaupt eine Mail? Naja, das ist eigentlich ganz einfach: Die USV kann den Server bei Stromausfall kontrolliert herunterfahren. Sie kann ihn aber nicht wieder starten. Wenn ich also eine Mail bekomme, vorausgesetzt, ich kriege das hin, dass die Mail auch noch rausgeht, dann weiß ich wenigstens, dass der Server runtergefahren ist. Nun kann ich später mal versuchen, mich per VPN mit meinem Heimnetz zu verbinden und per Wake on LAN den Server wieder aufzuwecken.

Der Dienst für die USV kann über 5 Zustände eine Meldung verschicken. Dies wird in 5 Skripten eingestellt, demzufolge müssen auch 5 Skripte editiert werden. Ihr könnt zwar auch den versendeten Text anpassen, wenn ihr aber mit dem Standardtext zufrieden seid wie ich, so sind es nur 2 kleine Änderungen in den Skripten, damit die Mailbenachrichtigungen funktionieren.

  • changeme: Dieses Skript informiert darüber, dass die Akkus erledigt sind und gewechselt werden möchten.
  • commfailure: Dieses Skript informiert darüber, dass die USV nicht mehr ansprechbar ist. Vielleicht ist das USB-Kabel defekt, rausgerutscht oder an der USV selbst stimmt was nicht. Das kann man dann prüfen.
  • commok: Das Skript meldet, wenn wieder alles in Ordnung mit der Kommunikation zwischen USV und Server ist. Das USB-Kabel könnte wieder eingesteckt sein? 🙂
  • onbattery und offbattery: Diese Skripte informieren darüber, wenn die USV auf Batteriebetrieb schaltet, und wenn der Strom wieder da ist, bevor die Batterie leer war.

Diese Skripte befinden sich alle in /etc/apcupsd, und können dort editiert werden. Beispielsweise könnte so ein Befehl so aussehen:

sudo nano /etc/apcupsd/onbattery

Diese Skripte sind alle gleich aufgebaut, so dass die Änderungen an allen 5 Skripten gleich sind.

Ganz oben kommen ein paar auskommentierte Zeilen. Die erste aktive Zeile ist:

HOSTNAME=`hostname`

Darunter müsst ihr die Variable SYSADMIN definieren, damit dem Skript eure Mailadresse bekannt ist.

SYSADMIN=mailadresse@beispiel.de

Die vorletzte Zeile im Skript lautet:

) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN

Ändert diese Zeile, und zwar ersetzt $APCUPSD_MAIL durch mail, so dass die Zeile so aussieht:

) | mail -s "$MSG" $SYSADMIN

Fertig! Macht das mit allen 5 Skripten, und die Mailbenachrichtigungen funktionieren.

Abfrage des USV-Status per Webbrowser

Nun, wenn man nicht zu Hause ist, ist es schwierig, zu gucken, was die USV gerade macht. Ich kann sowieso viele Statusmeldungen des Servers per Webbrowser sehen, warum also nicht auch noch die der USV? Und das ist einfacher, als ich dachte!

Man braucht eigentlich nur das Paket apcupsd-cgi zu installieren.

sudo apt-get install apcupsd-cgi

Und schon kann man per Webbrowser drauf zugreifen. In meinem Falle lautet die Adresse:

https://server01/cgi-bin/apcupsd/multimon.cgi

Das funktioniert natürlich nur aus dem lokalen Netz. Zwar ist mein Webzugriff passwortgesichert, aber sicher ist sicher, die öffentliche Adresse behalte ich mal für mich… 🙂

Ich habe mir ja eine index.html-Datei in mein WWW-Verzeichnis gelegt, wo ich diese einzelnen Programme verlinke. So brauche ich mir diese Adressen nicht alle merken. Und hier trage ich natürlich auch den Link zu dieser Applikation ein.

Zum Beispiel würde das so aussehen:

<p><a href="/cgi-bin/apcupsd/multimon.cgi">Unterbrechungsfreie Stromversorgung</a></p>

Nun kann ich diese Seite über meine Index-Seite aus aufrufen.

Hier gibt es einen Überblick über die USV. Man könnte, wenn man denn hätte, auch mehrere USVs damit überwachen, aber ich habe ja mal nur eine. In einer Tabelle sind die Geräte nun mit ihren grundlegenden Parametern aufgelistet.

Will ich jetzt also alles über die USV wissen, die an „Local Host“ angeschlossen ist, klicke ich den Link und bekomme alle Daten, die ich auch mit apcaccess bekommen würde, und noch die paar letzten Ereignisse die die USV betreffen angezeigt.

Zumindest mal mit Jaws ist das alles ziemlich gut bedienbar!

Kleiner Test

So, wollen wir mal sehen, ob das Teil auch funktioniert? Ich ziehe jetzt einfach mal den Stecker der USV aus der Wand. Damit simuliere ich einen Stromausfall!

Die USV gibt jetzt in regelmäßigen Abständen 4 Pieptöne von sich. Der Server läuft noch, aber eben auf Akku. Die USV hat dabei ein leichtes Brummen.

Nun kann ich mit apcaccess immer wieder schauen, wie der Status ist. Momentan ist der Status „ONBATT“, also auf Akku, BCharge ist bei um die 80 % und angeblich kann der Server noch 28 Minuten laufen. Nun, warten wir mal ab… 🙂

Irgendwann beginnt die USV damit, ständig kurze Pieptöne von sich zu geben, ich kann hören, dass Linux die Festplatten des RAID einzeln abschaltet und der Server geht aus.

Das ist mir bei Linux schon früher aufgefallen, dass die Festplatten nicht einfach alle gleichzeitig abgeschaltet werden, wenn die Prozesse runtergefahren sind, Linux schaltet die Platten einzeln und nacheinander ab. Daran höre ich aber, dass das Herunterfahren einwandfrei geklappt hat.

Nachdem ich den Stecker zurück in die Wand gesteckt und den Server wieder hochgefahren habe, prüfe ich den Status der USV. Da wären noch 9 % Akkukapazität übrig gewesen, also genug Luft, auch wenn das Runterfahren mal länger gedauert hätte. So etwas passiert leider gelegentlich.

Fazit

Puh, das Teil müffelt immer noch! Mit was für einer Chemikalie hat APC das Teil denn eingenebelt? Aber das geht in den nächsten Tagen hoffentlich wieder weg.

Abgesehen vom etwas strengen Geruch finde ich, tut das Teil absolut, was es soll. Überspannungsschutz, geordnetes Herunterfahren und das bitteschön ohne mein Zutun. Nur um das Wiederaufwecken muss ich mich dann kümmern. Aber das ist OK, Hauptsache es sind erst mal keine Datenverluste passiert.

Später will ich noch die Fritz!Box an die USV hängen, damit der Server im Notfall wenigstens Mails schicken kann. Vorausgesetzt natürlich, dass die Vermittlungsstelle, an der mein DSL-Anschluss hängt, nicht auch vom Stromausfall betroffen ist… 🙁 In den letzten paar Fällen war es aber immer ein hausinterner Stromausfall, wahrscheinlich wird am Stromnetz gearbeitet, ich weiß es nicht. Es war jedenfalls kein Stromausfall vom Versorger.

Für diesen doch guten Preis finde ich, sollte man sich so ein Teil gönnen, wenn man einen Server betreibt. Der Aufwand der Dateisystemreparatur, Datenintegritätsprüfung und Backupwiederherstellung steht jedenfalls in keinem Verhältnis zu einer einmaligen Ausgabe von knapp 60 €.