Automatisiertes Backup

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:

  • Kopiere Inhalt des Scripts nach: /var/scripts/symcon-backup.sh
  • Berechtigungen setzen:
    chmod +x /var/scripts/symcon-backup.sh

Crontab Einträge:

  • crontab -e
#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
  • Falls 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
1 „Gefällt mir“

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

Soweit ich gelesen habe, sind diverse Aggregationswerte nicht immer aktuell auf der Platte. Von daher ist es eigentlich egal, ob da was fehlt oder nicht. Und auch die Konfiguration dürfte bei Änderungen nicht gleich in der aktuellen Datei vorhanden sein.

Die Konfig wird alle 10 Minuten geschrieben und die Aggregationswerte sind egal, da diese beim starten automatisch korrigiert werden.

Ich habe tägliche Snapshots vom gesamten System, das muss reichen.
Mehr Aufwand für, die nicht relevanten, Daten bin ich nicht bereit zu betreiben.
Michael

Sehe ich jetzt auch so. Wichtig ist die Konfig. Ob die historischen Werte da sind oder nicht, ist mir dann egal.

Moin,
(betrifft Win)
der Ansatz mit den VSS ist gut, werde mal einen Server-Kollegen zu einem Script nötigen :rolleyes:
Hier mal ein fertiger Ansatz zum testen (werde ich auch mal testen):
Backup von geöffneten Dateien. | krausens-online.de
und

VG
kea

Moin kea,

wichtig dabei ist, dass der Start der Batchdatei auf jeden Fall mit Admin Rechten erfolgt, da ansonsten vshadow nicht ausgeführt wird. D. h. ein direkter Aufruf aus IPS funktioniert nicht. Ich habe mir damit geholfen, dass ich eine Startdatei mit AutoIt gemacht habe - diese wird als Admin gestartet - und startet dann wiederum die eigentliche Batchdatei.

Wenn du hier im Forum nach AutoIt suchst wirst du weitere Hinweise finden :wink:

Gruß
Hans

Hallo Hans,

bei läuft IPS unter Windows-Server 2019, würde das dann über den Task-Manager laufen lassen.

Dank und Gruß

kea