IPS erstellt selbst ein Backup von sich und versendet es per ftp

Hallo Leute,

ich möchte Euch heute mal mein Backupsystem vorstellen, welches bei mir das komplette IPS aus IPS selbst heraus sichert.
Das Ganze funktioniert z.Zt. nur auf dem Raspi. Windows ist leider so im Moment nicht möglich.

Funktionsweise:

[ol]
[li]Am 1. jeden Monats wird ein Vollbackup von /var/lib/symcon erstellt und per ftp gesichert. (dauert bei mir ca. 5 Minuten für 180MB zip-Datei)
[/li][li]Jeden Tag wird ein Backup aller Änderungen von /var/lib/symcon seit dem 1. Tag des Vormonats erstellt und per ftp gesichert. Die backupDatei wird so benannt, dass sie genau nach einem Monat wieder überschrieben wird. Das dauert bei mir etwa 1 Minute für 60MB zipDatei)
[/li][/ol]
Auf diese Weise ist es jederzeit möglich, auf jeden Stand innerhalb des letzten Monats zurückzusetzen.

Damit der komplette Pfad beim Vollbackup gesichert werden kann, ohne das Dateien gesperrt sind, wird IPS automatisch heruntergefahren und anschließend wieder automatisch hochgefahren. Das Ganze sollte also zu einer Zeit gemacht werden, wo man mal 5-10 Minuten auf IPS verzichten kann :smiley:

Das inkrementelle Backup wird dagegen während des Betriebes ohne Shutdown von IPS abgearbeitet.

BackupScript-Funktionsweise:

Am besten ihr schaut Euch die Scripte im Detail mal an. Im Wesentlichen funktioniert das so, dass ein aktuelles bash-Scriptfile _symcon_backup.sh erzeugt wird.Dieses Script wird anschließend mit Rootrechten per „at“ um 1 Minute zeitverzögert gestartet.
Es ist wichtig, dass das Script mit „at“ gestartet wird, nur somit ist es möglich, dass symcon gestoppt und wieder gestartet werden kann. :slight_smile:

Bevor Ihr die Scripte das erste mal startet, bitte noch die Pakete zip, at und ftp auf dem Raspi installieren via

sudo apt-get install ftp 
sudo apt-get install zip
sudo apt-get install at

und die Verzeichnis und ftp Parameter einstellen:


$RasPisymconpfad		 ="/var/lib/symcon/";
$RasPisymconbackuppfad		 ="/home/pi/";
$RasPisymconbackupdateiname ="_full_symconbackup_".$datum.".zip";

$scriptdatei_name = $RasPisymconpfad."_symcon_backup.sh";   

$ftpserver		="192.168.x.x";
$ftpuser		="xxx";
$ftppasswd		="xxx";

$ftpbackupdir	="/RaspPis/01IPSymcon_backup/symcon_backup/";

Ja und der Rest ist kein Hexenwerk, zuerst wird ein script erstellt, dass startet nach 1 Minute , erstellt ein zip, welches dann auf den ftp-Server geschoben und wieder vom Raspi gelöscht wird.

Viel Spass damit.

Grüße
Tom

[HR][/HR]
Scriptdatei „FullBackup_IPS_Restart“

<?

 //bash Scriptfile erzeugen
 
/* Dieses bash-Script wird auf dem Raspberry ausgeführt
!  Vorsicht mit Änderungen!
!  auf der Linuxmaschine müssen folgende Pakete installiert sein:
- zip
- ftp
- at
--> sudo apt-get install ftp 
--> sudo apt-get install zip
--> sudo apt-get install at
*/

$datum = date("ymd_His", time());


$RasPisymconpfad		 ="/var/lib/symcon/";
$RasPisymconbackuppfad		 ="/home/pi/";
$RasPisymconbackupdateiname ="_full_symconbackup_".$datum.".zip";

$scriptdatei_name = $RasPisymconpfad."_symcon_backup.sh";   

$ftpserver		="192.168.x.x";
$ftpuser		="xxx";
$ftppasswd		="xxx";

$ftpbackupdir	="/RaspPis/01IPSymcon_backup/symcon_backup/";

$scripttext = '#!/bin/bash
echo . > scriptausgabe.log
echo SYMCON-STOP ============= >> scriptausgabe.log
sudo /etc/init.d/symcon stop >> scriptausgabe.log
echo ====================== >> scriptausgabe.log
#
echo backup ausfuehren >> scriptausgabe.log
sudo zip -r '.$RasPisymconbackuppfad.$RasPisymconbackupdateiname.' '.$RasPisymconpfad.' >> scriptausgabe.log
#
echo SYMCON-START====================== >> scriptausgabe.log
sudo /etc/init.d/symcon start >> scriptausgabe.log
echo ====================== >> scriptausgabe.log
#
echo FTP-BACKUP ====================== >> scriptausgabe.log
#
ftp -n -v '.$ftpserver.' << EOT
user '.$ftpuser.' '.$ftppasswd.'
cd '.$ftpbackupdir.'
put '.$RasPisymconbackuppfad.$RasPisymconbackupdateiname.'  '.$RasPisymconbackupdateiname.' 
EOT
#
echo FTP-BACKUP ENDE ====================== >> scriptausgabe.log
#
echo Dateilöschen ====================== >> scriptausgabe.log
sudo rm '.$RasPisymconbackuppfad.$RasPisymconbackupdateiname.'  >> scriptausgabe.log
echo Dateilöschen ENDE====================== >> scriptausgabe.log
';  
$textdatei = fopen ($scriptdatei_name, "w+");				//neue Datei anlegen   
fwrite($textdatei, $scripttext);  					//Scripttext darin abspeichern
fclose($textdatei);									//und schließen

exec("sudo chmod +x ".$scriptdatei_name.""); 					//Script ausführbar machen
exec("sudo at now + 1 minute < ".$scriptdatei_name.""); 	//den Script zur nächsten vollen Minute in einem neuen Prozess ausführen 

//$msg->LogInfo("Backup wird gestartet, Symcon wird gleich beendet."); //internes Loggingsystem

?>

Scriptdatei „QuickBackup_IPS“

<?

 //bash Scriptfile erzeugen
 
/* Dieses bash-Script wird auf dem Raspberry ausgeführt
!  Vorsicht mit Änderungen!
!  auf der Linuxmaschine müssen folgende Pakete installiert sein:
- zip
- ftp
- at
--> sudo apt-get install ftp 
--> sudo apt-get install zip
--> sudo apt-get install at
*/

$datumerw = date("d", time());
$zipdatum = date("Y-m-01", strtotime('-1 month')); //ab dem 1. des Vor-Monats

$RasPisymconpfad		 ="/var/lib/symcon/";
$RasPisymconbackuppfad		 ="/home/pi/";
$RasPisymconbackupdateiname ="_short_symconbackup_".$datumerw.".zip";

$scriptdatei_name = $RasPisymconpfad."_symcon_backup.sh";   

$ftpserver		="192.168.x.x";
$ftpuser		="xxx";
$ftppasswd		="xxx";

$ftpbackupdir	="/RaspPis/01IPSymcon_backup/symcon_backup/";

$scripttext = '#!/bin/bash
echo . > scriptausgabe.log
echo backup ausfuehren >> scriptausgabe.log
sudo zip -rt '.$zipdatum.' '.$RasPisymconbackuppfad.$RasPisymconbackupdateiname.' '.$RasPisymconpfad.' >> scriptausgabe.log
#
echo FTP-BACKUP ====================== >> scriptausgabe.log
#
ftp -n -v '.$ftpserver.' << EOT
user '.$ftpuser.' '.$ftppasswd.'
cd '.$ftpbackupdir.'
put '.$RasPisymconbackuppfad.$RasPisymconbackupdateiname.'  '.$RasPisymconbackupdateiname.' 
EOT
#
echo FTP-BACKUP ENDE ====================== >> scriptausgabe.log
#
echo Dateilöschen ====================== >> scriptausgabe.log
sudo rm '.$RasPisymconbackuppfad.$RasPisymconbackupdateiname.'  >> scriptausgabe.log
echo Dateilöschen ENDE====================== >> scriptausgabe.log
';  
 $textdatei = fopen ($scriptdatei_name, "w+");				//neue Datei anlegen   
fwrite($textdatei, $scripttext);  					//Scripttext darin abspeichern
fclose($textdatei);									//und schließen

exec("sudo chmod +x ".$scriptdatei_name.""); 					//Script ausführbar machen
exec("sudo at now + 1 minute < ".$scriptdatei_name.""); 	//den Script zur nächsten vollen Minute in einem neuen Prozess ausführen 



?>

Hallo Tom,

wenn ich dein Konzept richtig verstanden habe, baust du mit einem IPS-Script während der Laufzeit ein bash-script dynamisch zusammen. Klingt zwar etwas anrüchig nach selbst modifizierendem Code (für akademische Informatiker), aber ich finde den Ansatz trotzdem cool.

Bei mir hat auch gleich alles bis auf den ftp/CD Befehl im bash-script geklappt. Mein QNAP ftp Server ist da sehr eigen.

Beim Stoppen und Starten des IPS service habe ich noch ein wenig Bauchschmerzen. Zum einen sollte der Zeitraum dazwischen nicht zu lange sein, zum anderen habe ich schon öfters erlebt, dass nach dem Stoppen ein anschließendes Starten nicht mehr möglich war und nur ein Restart geholfen hat.

Eine Verbesserung könnte daher sein, zuvor einen CIFS- oder NFS-Share zu mounten und direkt dorthin zu zippen oder einfach /var/lib/symcon dahin zu kopieren. Was wirklich schneller ist, kann ich gerade auch nicht sagen.

Für ein nicht mehr startendes IP Symcon wäre wohl ein Watchdog Script auf dem PI notwendig. Hatten wir ja schon für Windows (lange ist´s her).

Gruss
Bernd

P.S. ich bin an dem Thema sehr interessiert, weil mir gestern Morgen um fünf (kein Stromausfall, sonst auch nichts) eine 9 Monate alte Toshiba Exceria (angeblich besonders robust) im PI gestorben ist und trotz regelmäßigem Backup fehlen einem immer die letzten Tage. Jetzt habe ich sie durch ein Sandisk EDGE ersetzt (setzt ELV auch in der CCU3 ein). Mal schauen wie lange die lebt :mad:

Schau dir mal lsyncd an, damit spiegele ich im laufenden Betrieb jede Änderung nahezu sofort auf einen NFS Share auf meiner QNAP.

Ersetzt natürlich kein Backup, aber mein QNAP kann auch Snapshots. Somit habe ich dann auch stündlich Backups, die den PI nicht belasten.

Hallo Bernd,

Mein Ziel war, ein System zu bauen, was komplett mit Standard Bordmitteln auskommt.
Ja zum Starten und Stoppen war Anfangs etwas Überwindung nötig. Das System funktioniert bei mir jetzt seit Februar 18, also etwa seit 10 Monaten ohne ein Problem. Symcon startete bisher immer wieder tadellos.

Ich habe mir zur Sicherheit noch ein Meldesystem mit Telegram gebaut, welches mir beim Herunterfahren eine Warning-Nachricht sendet und diese nach dem Hochfahren wieder auflöst (mit einer zweiten Nachricht). So habe ich etwas mehr Kontrolle darüber. Und: Ich starte das Vollbackup (1x pro Monat) früh, falls es fehl schlagen sollte, komme ich schlimmstenfalls ein paar Minuten später auf Arbeit :rolleyes:
Aber wie gesagt, bisher lief es ohne Probleme.

Kannst Du mir sagen, wie Du das gelöst hast? Auf meiner Synology läuft’s zwar so, aber vielleicht gibt es da ja eine allgemein gültige Lösung, die könnte ich dann im Script ergänzen (falls noch jemand Interesse hat).

Viele Grüße
Tom

Hallo Tom,

besten Dank. Habe jetzt meinen IPS Server auch auf deine Backuproutine umgestellt.
Funktioniert perfekt.

Wie hast du das Meldesystem mit Telegram gebaut, welches beim Herunterfahren eine Warning-Nachricht sendet und diese nach dem Hochfahren wieder auflöst (mit einer zweiten Nachricht)?

Hast du das auch in IPS realisiert?

Gruß Tobias

Hallo in die Runde,

habe die Idee ebenfalls übernommen.

Gestern 1 Uhr war es dann das erste Mal soweit, dass ein Full Backup startet. Wegen Silvester war ich verreist und promt kam es zu Problemen beim Neustart. Aus einem mir unbekannten Grund (leider ist die Doku für IPS da auch echt schlecht) kam es beim Neustart dazu, dass die __generated.inc.php wohl fehlerhaft war und IPS Server zwar wieder lief aber diverse Module nicht funktionierten was auch die meisten Skripte an der Ausführung hinderte.

Da ich ja ohnehin auf dem Raspi den Raspi-Hardware Watchdog nutze (alle 5 Sekunden von IPS aus --> shell_exec ( „echo . > /dev/watchdog“ ), diese aber mit shell_exec ( „echo V > /dev/watchdog“ ) vor dem Back-Up abschalten muss, erkennt diese das Fehlverhalten nach Neustart des Dienstes nicht.

Ich starte den HW-WD jetzt direkt aus der Batch Datei heraus (10s nach Löschen des lokalen Backup-Zip-Files, wenn es auf den FTP-Server kopiert wurde). Somit hat IPS genügend Zeit, wieder hochzufahren. Sollte es jedoch beim Start von IPS und damit der Ausführung von Skripten wieder Probleme geben, erfolgt der 5s Touch nicht und somit startet der Raspi nach 15s neu.

Das also als Work Around / Hosenträger für Diejenigen, welche (zurecht, ich hatte sofort den Fall) Angst haben, dass das System nicht korrekt neu startet.

Mfg

Eric