Automatisiertes Backup

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