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
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.
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
?>