Automatisiertes Backup

Da es von Seiten IPS kein vollständiges Backup gibt, hab ich mir das was zusammengebastelt. Funktioniert allerdings nur für Windows
Ist auch nicht wirklich aufwendig, aber wenns wer brauchen kann.
Das BAT-File hab ich mir auf C:\ProgramData abgelegt. Gesicher wird auf eine SSD (Laufwerk D). Täglich wird ein Ordner erstellt. Eine Überprüfung ob genug Platz ist habe ich mir gespart. Der Platz sollte für einige Backups ausreichen und man könnte auch immer überschreiben.

@echo off
echo Start Symcon Backup %date% %time% >>C:\ProgramData\symcon\logs\SymconBackup.log
echo Dienst wird beendet >>C:\ProgramData\symcon\logs\SymconBackup.log
net stop IPSServer >>C:\ProgramData\symcon\logs\SymconBackup.log
echo Backup wird erstellt >>C:\ProgramData\symcon\logs\SymconBackup.log
echo Verzeichnis erstellen >>C:\ProgramData\symcon\logs\SymconBackup.log
md d:\symconbackup%date% >>C:\ProgramData\symcon\logs\SymconBackup.log
echo Daten kopieren >>C:\ProgramData\symcon\logs\SymconBackup.log
robocopy C:\ProgramData\symcon d:\symconbackup%date% /E /V /TS /FP /NP >>C:\ProgramData\symcon\logs\SymconBackup.log
echo Dienst wird gestartet >>C:\ProgramData\symcon\logs\SymconBackup.log
net start IPSServer >>C:\ProgramData\symcon\logs\SymconBackup.log
echo Ende Symcon Backup %date% %time% >>C:\ProgramData\symcon\logs\SymconBackup.log

Das ganze dann im Aufgabenplaner für die tägliche Ausführung eingetragen. Wichtig ist, mit „höchsten Berechtigungen ausführen“ zu setzen, sonst kann er die Dienste nicht beenden. Und auch „Unabhängig von der Benutzernameldung ausführen“. Zum Test muss es als Administrator gestartet werden.

…schade das es nichts für Raspberry gibt :mad:

Es gibt diverse Lösungen und Beispiele im Forum ;), vom sync bis zum kompletten SD Backup.

Coole Sache, vielen Dank. Dieses Thema stand schon lange auf meiner ToDo-Liste. Und jedes Mal, wenn ich das Backup manuell durchgeführt habe, dachte ich wieder daran das endlich einmal zu automatisieren. Funktioniert einwandfrei.

Ja, ist schon net so schön, dass es da nix ordentliches von Symcon gibt. Die Symbox hat vielleicht was aber die will ich nicht.
Aber HEY - dafür gibts die Pro-Konsole :smiley:

Grüße
Stefan

Man könnte sowas ins Traysymbol einbauen, dort wo man den dienst starten kann. braucht ja nur

  • Wann es laufen soll
  • Wohin es gesichert werden soll
  • ob es überschrieben oder pro Tag erhalten werden soll
    Ich denke das solls gewesen sein. den rest erledigt der Taskplaner von Windows. Aber mit der Lösung bin ich eigentlich recht zufrieden. Weil zur not könnte ich auch aufs NAS sichern und das wird dann noch einmal gesichert und geht noch zusätzlich in die Cloud. Damit sollt dann hoffentlich nix passieren :smiley:

Könntest du kurz erläutern wie das mit dem BAT-File von Beitrag 1 genau funktioniert?:confused:

Gruß
Thomas

auf die schnelle ein bash Script für Linux/Raspberry (ohne es selbst getestet zu haben, da ich dafür rsnapshot verwende)

  • Das Script setzt User „root“ voraus (ansonsten müsste vor jedem tar und systemctl Befehl sudo eintragen werden)
  • Backuppfad einfach anpassen, der Pfad muss jedoch existieren (bzw. davor erstellt werden)
#!/bin/bash
# symcon-backup.sh - Vers. 1.1 / Autor: SimonS
# *********************************************************************************************************************
#
# Kleines Bash Backup Script zum sichern von ip-Symcon am Linuxsystem
# Pfad-Variablen ohne abschliessenden "/" Slash !
#
# *********************************************************************************************************************

# Parameter required
[[ -z $1 ]] && echo "Parameter 1: online/offline" && exit 1

symconpath="var/lib/symcon"
backuppath="/mnt/autofs/symcon"
timestamp=`date +"%Y%m%d_%H%M"`
backupname="symcon_backup_$timestamp.tar.gz"
oldbackups=14                                      # Lösche Backups älter X Tage, 0=deaktiviert
daemonstop=0                                       # 1=Offlinebackup, 0=Onlinebackup, nicht anpassen wird per Parameter gesteuert!
[[ $1 == "offline" ]] && daemonstop=1
# *********************************************************************************************************************
echo "Symcon Backup"
(($daemonstop)) && echo " Symcon wird beendet.." && systemctl stop symcon.service
echo -n " Backup laeuft.." && cd / && tar -zcpf $backuppath/$backupname $symconpath/
echo " ---> $backuppath/$backupname"
(($daemonstop)) && echo " Symcon wird gestartet.." && systemctl start symcon.service
(($oldbackups)) && find $backuppath/symcon*.tar.gz -type f -mtime +$oldbackups -delete &> /dev/null
exit 0

Installation:

[ol]
[li]Kopiere Inhalt des Scripts nach /var/scripts/symcon-backup.sh[/li][li]chmod +x /var/scripts/symcon-backup.sh[/li][li]crontab -e[/li][/ol]

Crontab Einträge:

#Symcon Backup am Montag (Offline, Symcon wird zuvor beendet!)
3 3 * * 1 /var/scripts/symcon-backup.sh offline > /dev/null 2>&1

#Symcon Backup Dienstag bis Samstag (Online, also ohne Symcon zu beenden)
3 3 * * 2,3,4,5,6 /var/scripts/symcon-backup.sh online > /dev/null 2>&1

Sichert dann täglich um 03:33 Uhr…

Backup entpacken: (tar.gz im /tmp Ordner entpacken, um einzelne Dateien manuell zurück kopieren zu können)
Wenn kein root User, natürlich ein sudo davor setzen…

tar -xvf /path/myBackup/{name}.tar.gz -C /tmp

Backup, komplett wiederherstellen:
Wenn kein root User, natürlich ein sudo davor setzen…

systemctl stop symcon.service
cd /
tar -xvf /path/myBackup/symcon_backup_20200829_0303.tar.gz -C /
systemctl start symcon.service

Vielen Dank!

Kann man den Backuppfad einfach ändern? Oder muss das dort sein?

Kann man das auf einmal pro Woche ändern?

lg

Ich versuche zu erklären. Du erstellst in einem beliebigen Verzeichnis eine Datei - BackupIPS.bat -, kopierst die paar Zeilen aus meinem ersten Post rein und passt es an deine Gegebenheiten an.
Im Taskplaner von Windows erstellst du einen neuen Eintrag. Ebenfalls nach deinen Vorstellungen, wann gesichert werden soll. Wichtig ist eben mit höheren rechten und starten auch wenn kein Benutzer angemeldet ist.

Ja klar, den Crontab anpassen (zB. am Sonntag):

33 3 * * 7 /var/scripts/symcon-backup.sh

Crontab Hilfe

Natürlich kann der Backuppfad nach belieben angepasst werden, am besten auf ein gemountetes Verzeichnis (also weg vom lokalen System).
Ausserdem muss der Backuppfad existieren, also per [md -p /mnt/meinpfad] manuell erzeugt werden.
Das Script hat selbst keine Fehlerprüfung dafür eingebaut, könnte man natürlich noch ausschmücken mit Errorlevel abfragen und Mailbenachrichtigung usw… da ich es jedoch selbst nicht benötige… :stuck_out_tongue: :smiley:

Hallo,
ich mache das am Raspi4 wie folgt:

1x täglich wird ein Script vom Scheduler gestartet, welches die Daten in ein temporäres Verzeichnis kopiert und die Daten
zippt (1x nur die Daten und 1x eine Komplettsicherung).
Diese ZIPs werden dann auf den Fileserver (NAS) verschoben.
Die Komplettsicherung wird täglich überschrieben, die Daten werden archiviert und mit einem Zeitstempel versehen.

Script-Datei anlegen mit:


sudo nano /home/pi/backup_ip_symcon.sh

Inhalt der Datei:


#!/bin/bash

SEPARATOR1="================================================"
SEPARATOR2="------------------------------------------------"

function _________Separator {
    echo $SEPARATOR1  
    echo " "          
    echo $1           
    echo $SEPARATOR2  
}

_________Separator "Backup Server - create Directories" 

TempBackupDir="/tmp/IPSymconBackup"

# Verzeichnisinfo:
#    /usr/bin/symcon    -->  $TempBackupDir/usr_bin          - Executable
#    /usr/share/symcon/  -->  $TempBackupDir/usr_share        - Static Data (IP-Symcon Installation)
#    /var/lib/symcon/    -->  $TempBackupDir/var_lib          - Variable Data (Settings, Skripte, Medien...)
#    /var/log/symcon/    -->  $TempBackupDir/var_log          - Log Files (Logfiles...)

TempBackupDir_usr_bin="${TempBackupDir}/usr_bin/"  
TempBackupDir_usr_share="${TempBackupDir}/usr_share/"
TempBackupDir_var_lib="${TempBackupDir}/var_lib/"  
TempBackupDir_var_log="${TempBackupDir}/var_log/" 

#create Directories (-p --> ignore existing Directories)
mkdir -p "$TempBackupDir"
mkdir -p "$TempBackupDir_usr_bin"
mkdir -p "$TempBackupDir_usr_share"
mkdir -p "$TempBackupDir_var_lib"
mkdir -p "$TempBackupDir_var_log"


_________Separator "Backup Server - STOP PLS Server" 
sudo /etc/init.d/symcon stop


_________Separator "Backup Server - Backup Data to Temp Folder" 

#Die wichtigsten Schalter von rsync
#Schalter      	Funktion
#-a				Archive-Modus, äquivalent zu -rlptgoD
#-r				rekursiv, alle Unterverzeichnisse
#-l				kopiert symbolische Links als symbolische Links und nicht als Datei
#-p				bewahrt die Berechtigungen der Dateien
#-t				bewahrt die Zeitstempel der Dateien
#-g				bewahrt die Gruppenberechtigungen der Dateien
#-o				bewahrt den Besitzer der Datei (nur root)
#-D				bewahrt Devices
#-v				mehr Ausgabetext auf dem Bildschirm
#-q				weniger Ausgabetext auf dem Bildschirm
#-u				nur Updates; überschreibt keine neueren Dateien
#-W				kopiert die gesamte Datei, nicht nur das Delta
#-n				Trockenlauf, zeigt nur an, was gemacht werden würde
#--delete		alle Dateien, die im Ziel, aber nicht in der Quelle vorhanden sind, werden gelöscht
#--checksum     Checksumme statt Timestamps verwenden
#--stats        Statistik ausgeben
#--ignore-times Checksum statt timestamp verwenden
#--progress     Vorgangsdaten anzeigen

rsyncopt="-a --delete --checksum --ignore-times -v" 

_________Separator $TempBackupDir_usr_bin 
sudo rsync $rsyncopt   "/usr/bin/symcon"      $TempBackupDir_usr_bin  

_________Separator $TempBackupDir_usr_share 
sudo rsync $rsyncopt   "/usr/share/symcon/"   $TempBackupDir_usr_share

_________Separator $TempBackupDir_var_lib 
sudo rsync $rsyncopt   "/var/lib/symcon/"     $TempBackupDir_var_lib  

_________Separator $TempBackupDir_var_log 
sudo rsync $rsyncopt   "/var/log/symcon/"     $TempBackupDir_var_log  

_________Separator "Backup Server - START PLS Server" 
sudo /etc/init.d/symcon start

_________Separator "Backup Server - ZIP Data" 
cd $TempBackupDir
now=`date +%Y_%m_%d__%H_%M_%S`  
backupfile="PS_Symcon_Backup_All.zip"
backupfile2="PS_Symcon_Backup_Data_${now}.zip"

#zipoptionen: 
#	-r rekursiv
#	-9 besser komprimieren 
#	-q quiet 
#   -v mehr output
zipoptions="-r -9 -q"

_________Separator "ZIP ALL" 
sudo zip $zipoptions "./$backupfile" * 

_________Separator "ZIP DATA ONLY" 
cd "$TempBackupDir_var_lib"
sudo zip $zipoptions "../$backupfile2" *

cd $TempBackupDir

_________Separator "Backup Server - Fileserver Backup Laufwerk mounten" 
MountDir="/home/pi/BACKUP_SYMCON"
sudo mkdir -p "${MountDir}"
sudo setfacl -R -m u:pi:rwx "${MountDir}"
sudo mount -t cifs -o username=pi,password=mypassword "//Fileserver/Freigabe" "${MountDir}"

_________Separator "Backup Server - move zip to Server" 
echo "${backupfile}"
echo "${backupfile2}"
# --force --> overwrite
sudo mv --force "./${backupfile}" "${MountDir}/${backupfile}" 
sudo mv --force "./${backupfile2}" "${MountDir}/${backupfile2}" 

_________Separator "Backup Server - unmount Fileserver Backup Laufwerk" 
sudo umount "$MountDir"


Script ausführbar machen:


sudo chmod +x /home/pi/backup_ip_symcon.sh

in Scheduler eintragen (startzeit: 6:16):


    sudo crontab -u pi -e    

Inhalt der Datei: (bei eingerichtetem E-Mailserver (z.B. EXIM4) wird das Ausgabe-Log an die Benachrichtigungsadresse versandt)


         MAILTO="yourEmail@yourServer"             
        16 6 * * * /bin/bash /home/pi/backup_ip_symcon.sh

Das Ergebnis schaut dann so aus:

lg
Wolfgang

Ich habe meines etwas umbauen müssen. Beim letzten Backup hat der Dienst länger zum Beenden gebraucht. Das wäre ja ansich jetzt kein Beinbruch, aber die Sicherung war schneller als das Beenden. Somit hat er am Ende versucht, einen Dienst, der sich im „STOP_PENDING“ Modus befindet, zu starten. Was natürlich nicht funktioniert. Der Dienst wurde aber ordnungsgemäß beendet, aber von keinem mehr gestartet. Somit wars das mit IPS :wink:
Mein Skript ist nicht wunderschön, mir gefällt es auch nicht. Vorallem diese Goto’s. Ich hab aber sehr lange gebraucht, bis ich drauf gekommen bin, dass sich die beiden For-Schleifen in die Quere kommen. Das ganze in Dos ist nicht wirklich programmieren. Das ist ein Sauhaufen. Aber es tut. Auch habe ich ein paar mehr Variablen eingebaut, um es anpassbarer zu machen.
Aber seht sehlbst. Ich bin für jede Kritik dankbar, die es besser machen könnte.

@echo off
rem Variablendefinition
rem Wo das Backup gespeichert werden soll
set IPSBackup=D:\symconbackup
rem Pfad für das Logfile vom Backup
set IPSLOG=C:\ProgramData\symcon\logs\SymconBackup.log
rem Wartezeit zwischen zwei Prüfungen des Dienststatus
set IPSTimeout=10
rem Dienstname
set IPSServicename=IPSServer
rem Anzahl der Versuche
set IPSCounts=5

echo Start Symcon Backup %date% %time% >>%IPSLOG%
echo Dienst wird beendet >>%IPSLOG%
net stop %IPSServicename% >>%IPSLOG%
rem Nur damit %Status% einen Wert hat, da es sein kann, dass Leer zurückkommt.
set Status=Fehler

for /L %%N IN (1,1,%IPSCounts%) do (
	echo Durchlauf %%N >>%IPSLOG%
	rem x Sekunden warten da der Dienst länger brauchen kann
	timeout /T %IPSTimeout% /NOBREAK >>%IPSLOG%
	rem Überprüfen ob Dienst noch immer läuft
	ECHO %IPSServicename% Dienst pruefen >>%IPSLOG%
 	goto Check
 	:Weiter
	echo Dienststatus Status: %Status% >>%IPSLOG%
	IF /i "%Status%" == "STOPPED" (
		echo Dienst ist beendet!>>%IPSLOG%
		Goto Ok
	)
	if /i "%Status%" == "Fehler" echo Fehler bei Dienstabfrage Status: %Status%>>%IPSLOG% )
goto EndeCheck

rem Beginn der Statusüberprüfung vom Dienst
:Check
for /f "tokens=4"  %%b in ('sc query %IPSServicename% ^|find "STATE "') do set Status=%%b
goto Weiter
rem Ende der Statusüberprüfung vom Dienst und wieder zurück in die For-Schleife

rem Überprüfung nach x Durchläufen zu Ende. Wenn dann noch immer ein Fehler vorhanden ist, dann hilft nichts.
:EndeCheck
if /i not "%Status%" == "STOPPED" Goto Fehler

:Ok
echo Backup wird erstellt >>%IPSLOG%
if not exist %IPSBackup%%date% (
	echo Verzeichnis erstellen >>%IPSLOG%
	md %IPSBackup%%date% >>%IPSLOG%)
echo Daten kopieren >>%IPSLOG%
robocopy C:\ProgramData\symcon %IPSBackup%%date% /E /V /TS /FP /NP >>%IPSLOG%
echo Dienst wird gestartet >>%IPSLOG%
net start %IPSServicename% >>%IPSLOG%
goto Ende

:Fehler
echo Fehler beim Beenden des Dienstes >>%IPSLOG%
echo Es wurde kein Backup durchgefuehrt >>%IPSLOG%
:Ende
echo Ende Symcon Backup %date% %time% >>%IPSLOG%
rem Variablen löschen
set Status=
set IPSBackup=
set IPSLOG=
set IPSTimeout=
set IPSServicename=

Vielleicht mache ich daraus mal ein Powershell. Ich denke da geht das ganze eleganter.

Danke für deine Erklärung.:wink:

Gruß
Thomas

Moin,
vielen Dank für das Backup-Script (unter Win).
Dazu eine Frage:
Könnte das nicht auch mit den Shadow-Dateien funktionieren, dann bräuchte der Dienst nicht gestoppt zu werden?
Bin allerdings kein Server-Mensch, sondern Paketschubser … :rolleyes:
Viele Grüße
kea

Mit VSS könnte es gehen ja, aber da brauchts dann wieder eine entsprechende Backupsoftware. Und, so tief bin ich da auch nicht, weiß ich nicht ob man selektiv Dateien und nicht das ganze Volume sichern kann.
Man könnte es mit dem Shadow probieren (oder wie das heißt). Stellt sich dann allerdings die Frage, wie man an die Daten kommt. Ist aber sicher eine Überlegung wert.

Moin,

letztendlich kann man das auch mit shadow copy machen. Hier regelmäßige Datensicherung des ip-symcon Ordners finden sich weitere Infos. Das Problem ist aber aufgrund der Berechtigungen aus IPS heraus nicht ganz trivial :wink:

Gruß
Hans

Das Stichwort dazu wäre vshadow64.exe oder vshadow.exe, damit könnte ein Snapshot eines Volumes erstellt werden, der dann gemapped werden kann. Von dem Laufwerk könnte dann der Symcon Datenpfad gesichert werden.

Details auch im von Hans angegeben Link.

Fakt ist aber, dass dir der Shadow nicht viel bringt, da IPS ja auch einiges im RAM hält was erst beim beenden des Dienstes oder eben regelmäßig durch IPS auf den Datenträger geschrieben wird. Robocopy funktioniert auch mit gestartetem Dienst und es wird auch keine geöffnete Datei bemeckert. Aber eben den RAM bekommst nicht. Wobei du schön mächtig viel Pech haben musst, wenn genau das, was im RAM steht so wichtig ist, dass ein Restore unvollständig ist.
Ich lehne mich da ma weit heraus, aber könnte man IPS nicht zwingen die Daten zu einem von mir defnierten Zeitpunkt zu schreiben? Über eine Funktion in einem Skript. Dann soll er meinetwegen in der Nacht alles schreiben und dann wird gesichert. Ich denke darauf sollte es hinauslaufen. Oder begehe ich hier einen Denkfehler?

Wenn man sich ansieht, was der ips.exe Dienst im Zugriff hat, ist das bis auf das aktuelle Logfile nichts. Das ist natürlich eine Momentaufnahme und lesend wird sicher die eine oder andere Datei geöffnet. Schon alleine die Skripts. Und ob das Log aktuell im Backup verfügbar ist, ist mir relativ. Es sollte also reichen, IPS anzuweisen, die Daten zu schreiben. Dann hat man so ziemlich alles. Vielicht gehen die einen oder anderen Werte ab, was aber im Falle des Falles verschmerzbar sein sollte.
Zumindest meine Meinung.

Was bitte soll wichtiges im RAM liegen?
Es ist gut das es z.b. den Mediacache gibt um SD Karten zu schonen, das kannst du aber im ImageGrabber und auch bei anderen Medien abschalten. Dann sind die Daten auch aktuell auf der Platte.
Michael