community italiana di domotica personale
 
Effettuare il backup (ed eventuale ripristino) di Home Assistant Core su Raspberry Pi OS

Effettuare il backup (ed eventuale ripristino) di Home Assistant Core su Raspberry Pi OS

Scopi della guida:
  • Effettuare un backup completo della propria installazione Home Assistant Core su Raspberry Pi OS di Raspberry Pi – ed eventualmente provvedere a un ripristino
  • Livello di difficoltà: medio/bassa
Concetti affrontati:
  • Configurazione software
Componenti software utilizzate:
Prerequisiti:
Dispositivi fisici utilizzati:
GUIDA INDICATA A UTENTI CON ISTALLAZIONE:
Ambiente Home Assistant Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 1.2

Abstract

Può capitare anche una volta sola nella vita, ma quella singola volta ci se la ricorda sempre molto bene: quella della perdita improvvisa di dati. Moltissimi imparano l’importanza di avere un backup (quale sia il dato in questione) solo dopo aver perso dei dati; va da sé che la lezione, una volta imparata, non si la scordi più.

Home Assistant non fa differenza: la possibilità di effettuare un backup è essenziale; fortunatamente, questo tipo di distribuzione è dotata di un sistema facilitato che permette anche all’utente più inesperto di effettuarlo e, in caso di guai, ripristinarlo. A differenza dell’installazione Home Assistant OS che prevede l’uso dei backup (una volta chiamati “snapshot”), su Raspberry Pi OS dobbiamo attrezzarci in modo da salvare i percorsi che contengono le configurazione, i file storage nonché eventuali path importanti per l’utente.

Questa guida illustra quindi come effettuare tali backup, i quali verranno eseguiti localmente – ovviamente, sebbene non oggetto della presente guida, nulla vieta di introdurre una pianificazione che provveda non solo ad eseguire tale backup, ma successivamente a copiarlo in cloud o comunque in qualche location remota per maggiore sicurezza.

La tecnica qui spiegata è comunque piuttosto primitiva; se si cerca un ambiente per gestire i backup in modo più strutturato, la risposta può essere questa.

N.b. Ricordiamo a tutti, come buona abitudine, quella di ridurre il numero di scritture sulle microSD per evitare che si danneggino, come spiegato per esempio in questa guida.

Si parte

Creazione script

Per far sì che il backup sia del tutto automatico e pianificato utilizzeremo uno script scritto ad hoc tale che, quando evocato, provveda semplicemente ad effettuare il backup in base ai parametri che gli vengono passati.

Una volta collegati via SSH al Raspberry Pi tramite utenza “pi“, provvedere a creare a cartella di destinazione dei backup:

mkdir ~/backups

Provvediamo ora a creare lo script col comando:

nano ha_backup.sh

apertosi l’editor di testo, copia-incollare il seguente testo:

#!/bin/bash
DATE=$(date +%Y-%m-%d-%H%M)
BACKUP_DIR="~/backups"
SOURCE="/home/homeassistant/.homeassistant"
sudo tar -czpf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE
find $BACKUP_DIR -type f -mtime +30 -delete 

Vediamo in dettaglio i parametri da passare allo script in fase di esecuzione:

DATE La data di esecuzione del backup (vedremo a breve perché). Nel nostro esempio proponiamo il formato ANNO-MESE-GIORNO-ORA-MINUTI (eg. 1980-01-01-0000)
BACKUP_DIR Il percorso in cui verrà creato il file di backup.
SOURCE Quali siano le cartelle sottoposte a backup. 

Dato che, oltre all’ovvia cartella /home/homeassistant/.homeassistant (contenente la configurazione di Home Assistant) oggetto di sicuro backup potrebbero essercene altre (per esempio la configurazione di ZigBee2MQTT, sotto /opt/zigbee2mqtt/data), è sufficiente indicare nel campo SOURCE tale elenco, semplicemente suddividendo i percorsi con uno spazio, eg:

SOURCE=”/home/homeassistant/.homeassistant /opt/zigbee2mqtt/data”

All’interno dello script, il comando:

sudo tar -czpf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE

è quello che de facto provvede all’effettuazione del backup, utilizzando i seguenti parametri:

  • -czpf:
    • crea un archivio (-c);
    • viene compresso con gzip (-z);
    • i permessi di accesso rimangono invariati (-p);
    • tutto viene riprodotto nel seguente file (-f);
  • $BACKUP_DIR/backup-$DATE.tar.gz indica il path stabilito nei passaggi precedenti ($BACKUP_DIR) e il file dove deve essere salvato il backup;
  • Infine con la variabile $SOURCE richiamiamo il path da sottoporre a backup.
N.b. Il comando viene eseguito utilizzando sudo perché alcuni file nelle sottocartelle nascoste di HA non verrebbero altrimenti copiati.

Infine, lo script termina col comando:

find $BACKUP_DIR -type f -mtime +30 -delete 

Il quale comanda al sistema di trovare eventuali file più vecchi di 30 giorni ed eventuamente rimuoverli. Tale valore è ovviamente configurabile a piacimento.

Infine, usciamo dall’editor salvando il file (CTRL+x, y, invio) ed eseguiamo il seguente comando utile a rendere lo script eseguibile:

chmod +x ha_backup.sh

Creazione alias

La creazione di un alias ci permetterà di richiamare lo script definito nel passaggio precedente semplicemente digitando, da terminale, una keyword da noi preimpostata. Questa procedura può tornarci estremamente comoda per eseguire un backup “al volo” al termine di una sessione di configurazione, senza dover necessariamente attendere un backup programmato.

Procediamo quindi alla creazione dell’alias eseguendo il seguente comando:

nano ~/.bashrc

posizioniamoci in fondo al file e incolliamo il seguente testo:

alias ha_backup="~/ha_backup.sh"

Salviamo e chiudiamo  il file (CTRL+x, y, invio) e rendiamo disponibile il nuovo alias digitando:

source ~/.bashrc

A questo punto avremo la possibilità di avviare lo script di backup semplicemente digitando, da terminale, il comando (ovvero l’alias appena creato):

ha_backup

Avvio script senza password

Dato che il comando di compressione in archivio tar viene eseguito utilizzando sudo, all’esecuzione della procedura è normale che venga richiesta la password del superuser. Per ovviare a questa incombenza andiamo quindi a impostare l’esecuzione dei comandi come superuser senza che ci venga richiesta la password ad ogni esecuzione.

Impersoniamo temporaneamente l’utente root tramite il comando:

sudo -i
cd /etc/sudoers.d
sudo visudo

posizioniamoci alla fine del file e indichiamo:

nome_utente ALL=(ALL) NOPASSWD:ALL

dove ovviamente nome_utente sarà il nostro utente regolare pi.
Salviamo e usciamo dall’editor (CTRL+x, y, invio) e torniamo all’utente pi (al momento siamo root) utilizzando il comando:

exit

terminiamo la sessione SSH tramite il comando:

exit

Terminata la sessione SSH, ripristiniamola subito dopo e ri-testiamo il nostro alias/script, verificando che non ci venga richiesta la password di superuser. Testiamo dunque il comando:

ha_backup

e appena la procedura (questa volta senza richiesta di password) si sarà conclusa rechiamoci nella cartella contenete i backup:

cd ~/backups

dove troveremo il nostro archivio compresso (in formato .tar) contenente la configurazione di Home Assistant. L’elenco come sempre si visualizza con un banale:

ls -l

Vetrina - Offerte del giorno

Pianificare il backup automatico

Per impostare l’esecuzione automatica del backup, avviamo l’editor delle pianificazioni tramite il comando:

export VISUAL=nano; crontab -e

se viene richiesto quale editor utilizzare, si consiglia di utilizzare “nano“.
Aggiungere dunque alla configurazione la seguente voce:

0 2 * * * ~/ha_backup.sh

Salviamo e usciamo dall’editor (CTRL+x, y, invio).

Questa configurazione farà sì che ogni giorno alle due di notte venga effettuato un backup secondo quanto riportato nello script. Va da sé che se volendo includere ulteriori cartelle o modificare alcuni parametri di nomenclatura del file di backup sarà necessario modificare lo script definito nel primo passaggio della presente guida.

Ripristinare il/i backup

Nella malaugurata occasione di dover ripristinare tutto sarà sufficiente in primis reinstallare Home Assistant Core su Raspberry Pi OS (come applicativo venv o come container Docker), avere a disposizione almeno un vecchio backup e poi, da terminale, eseguire una serie di semplici comandi.

Innanzitutto, entrare nel percorso contenete in backup (quello proposto dalla guida, o quello in cui l’utente ha saggiamente deciso di conservare i backup, possibilmente non sullo stesso media contenente Raspberry Pi OS, Home Assistant e il resto):

cd ~/backups

elencare i backup disponibili:

ls -l

eseguire la decompressione dell’archivio:

tar -zxvf nomefile.tar.gz

dopodiché sarà sufficiente:

ls -l

per visualizzare la cartella contenente il backup appena aperto, per provvedere infine a spostarlo/i tramite il comando:

mv cartella_di_origine /path/di/destinazione

ripristinando nella sua posizione di origine il backup contenente i nostri file.

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.