Un gruppo di continuità da solo non protegge i dati: compra soltanto qualche minuto. Se nessuno spegne le macchine prima che la batteria si esaurisca, il server si spegne di colpo esattamente come senza UPS, solo un po' più tardi. Il pezzo mancante è il software che riceve lo stato dell'UPS e avvia uno spegnimento ordinato. Nel mondo Linux lo standard di fatto è NUT, Network UPS Tools.
Come è fatto NUT
NUT è composto da tre parti che possono stare sulla stessa macchina o su macchine diverse:
- driver: parla con l'UPS, di solito via USB, a volte via porta seriale o rete; per la maggior parte dei modelli USB si usa il driver
usbhid-ups; - upsd: il server che rende disponibili in rete i dati letti dal driver;
- upsmon: il client che sorveglia lo stato e decide quando spegnere la macchina su cui gira.
In un homelab tipico l'UPS è collegato via USB a un solo dispositivo, che fa da server NUT. Tutte le altre macchine alimentate dallo stesso UPS eseguono solo upsmon in modalità secondaria e ascoltano il server in rete.
Scegliere chi fa da server
Il server NUT dovrebbe essere la macchina che si spegne per ultima, perché deve continuare a informare le altre. Opzioni comuni:
- l'host di virtualizzazione, se è uno solo;
- un piccolo computer a basso consumo, come un single-board computer, dedicato a questo e pochi altri compiti;
- il NAS, molti dei quali integrano già un server NUT attivabile dall'interfaccia.
Evita di usare come server una macchina virtuale: se l'host si ferma per un problema, il server scompare e i client non ricevono più informazioni.
Configurazione essenziale
I file principali si trovano di norma in /etc/nut/. Un esempio ridotto all'osso.
In ups.conf si dichiara l'UPS:
[casa]
driver = usbhid-ups
port = auto
desc = "UPS rack"
In nut.conf si imposta la modalità: MODE=netserver sul server, MODE=netclient sui client.
In upsd.users si crea un utente per i client, con una password robusta. In upsd.conf si indica su quale indirizzo ascoltare, limitandolo alla rete interna.
Sul client, in upsmon.conf, una riga collega la macchina all'UPS remoto:
MONITOR casa@192.168.10.5 1 utente-nut passwordlunga secondary
Il comando upsc casa mostra tutte le variabili esposte dall'UPS: carica della batteria, autonomia stimata, stato della rete elettrica, carico. È il primo test da fare.
Quando spegnere: le soglie
Per impostazione predefinita upsmon avvia lo spegnimento quando l'UPS segnala batteria scarica (stato LB). La soglia di batteria scarica è decisa dall'UPS, e su alcuni modelli può essere modificata tramite NUT. Il problema è che, con batterie invecchiate, l'autonomia residua a quel punto può essere più breve del tempo necessario a spegnere tutto.
Strategie più prudenti:
- usare
upsschedper avviare lo spegnimento dopo un certo numero di minuti di funzionamento a batteria, ad esempio cinque, indipendentemente dalla carica; - spegnere prima le macchine meno importanti, così da allungare l'autonomia di quelle essenziali;
- considerare l'ordine: prima le macchine virtuali, poi i client fisici, infine l'host e il server NUT.
Sull'host di virtualizzazione lo spegnimento di sistema arresta in modo ordinato le macchine virtuali, a patto che abbiano l'agente guest installato o rispondano al segnale ACPI. Vale la pena controllare i tempi di timeout: una VM con un database può richiedere più tempo del previsto.
Il dettaglio spesso dimenticato: lo spegnimento dell'UPS
Dopo che i server si sono fermati, il server NUT può inviare all'UPS il comando di spegnersi a sua volta. Serve a una cosa precisa: se la corrente torna mentre le macchine sono già spente ma l'UPS è ancora acceso, i server non ricevono nessuna interruzione e restano spenti. Spegnendo e riaccendendo l'uscita dell'UPS, invece, le macchine configurate nel BIOS per accendersi al ritorno dell'alimentazione ripartono da sole.
Per questo occorre:
- impostare nel BIOS di ogni macchina l'opzione di riaccensione al ritorno della corrente;
- verificare che il server NUT esegua il comando di spegnimento dell'UPS come ultimo passo.
Provare davvero
Una configurazione mai testata non è affidabile. Nel mio lavoro faccio così:
- con tutto acceso, simulo l'evento con
upsmon -c fsd, che forza lo spegnimento come se la batteria fosse scarica, e osservo l'ordine con cui si fermano le macchine; - in un momento tranquillo, stacco davvero la spina dell'UPS e cronometro l'autonomia reale e il tempo di spegnimento;
- riattacco la spina e controllo che tutto riparta senza intervento.
La prova reale va ripetuta periodicamente, perché le batterie perdono capacità con gli anni.
Notifiche
upsmon può eseguire uno script a ogni evento: passaggio a batteria, ritorno della rete, batteria da sostituire. Collegarlo a email o a un servizio di notifica permette di sapere che c'è stato un blackout anche quando non si è in casa.
In sintesi
- L'UPS compra tempo; NUT trasforma quel tempo in uno spegnimento ordinato.
- Un solo server NUT collegato via USB, gli altri dispositivi come client in rete.
- Meglio spegnere dopo pochi minuti a batteria che aspettare la soglia di batteria scarica.
- Riaccensione automatica nel BIOS e spegnimento finale dell'UPS fanno ripartire tutto da solo.
- La configurazione va provata staccando davvero la spina, e ripetuta nel tempo.