This is an old revision of the document!
Synology Storage Backup Skript
Skript, welches vom mir erstellt wurde, um automatisiert wichtige Daten von meinem Synology NAS, auf eine externe Harddisk welche an meinem Backup-Server angeschlossen ist zu sichern! (Die HDD wird nur aktiv für die Zeit der Sicherung!)
Skript Sourcecode
Filename: blackserv_backup_script.sh
#!/bin/bash ############################################################################################# #******************* Backup blackSERV Script by Michael Reber - v 1.3 **********************# ############################################################################################# ############################################################################################# ## Variable Definition & System Vorbereitungen: today=`date +"%Y-%m-%d"` OLDBACKUP=`date -d "7 days ago" +"%Y-%m-%d"` ## System dependency Check: if [ -n "$(command -v apt-get)" ]; then if [ $(dpkg-query -W -f='${Status}' nfs-common 2>/dev/null | grep -c "ok installed") -eq 0 ]; then apt-get install nfs-common -y; fi else if [ $(yum -q list installed nfs-utils &>/dev/null && echo "1" || echo "0") -eq 0 ]; then yum install nfs-utils -y; systemctl start rpcbind && systemctl enable rpcbind; fi fi if [ ! -d "/mnt/backup-disk" ]; then mkdir /mnt/backup-disk fi if [ ! -d "/mnt/blackSERV" ]; then mkdir /mnt/blackSERV fi ################################################################################################ ## Aktivieren des Stroms der Backup-Festplatte und bereitstellen des Mounts: uhubctl -a on -p 3 && mount /dev/sda1 /mnt/backup-disk # Überprüfen, ob die für das Backup benötigte Disk (sda1) noch mindestens 50GB freien Speicher hat. if [ "$(df | grep -oP '/sda1.* \K\d+(?=\s+\d+%)')" -lt "50000000" ] # 50000000 = 50GB then echo "ERROR: Disk has less than 50GB free space!" df -h > /tmp/dfInfo sendemail -f "mail.blackgate@gmail.com" \ -u "ERROR: Disk on `hostname` has less than 50GB free space!" \ -t "michael.r467@gmail.com" \ -s "smtp.gmail.com:587" \ -o tls=yes \ -xu "mail.blackgate@gmail.com" \ -xp "PW" \ -o message-file="/tmp/dfInfo" umount /mnt/backup-disk && uhubctl -a off -p 3 exit 1 else # Überprüfen, ob die für das Backup benötigten Ordner vorhanden sind; anderfalls sollen sie erstellt werden: if [ ! -d "/mnt/backup-disk/daten_michael" ]; then mkdir /mnt/backup-disk/daten_michael echo "$today - Creating new backup-topdir: 'daten_michael'.." >> /var/log/blackSERV-backup.log fi if [ ! -d "/mnt/backup-disk/server_backups" ]; then mkdir /mnt/backup-disk/server_backups echo "$today - Creating new backup-topdir: 'server_backups'.." >> /var/log/blackSERV-backup.log fi if [ ! -d "/mnt/backup-disk/web" ]; then mkdir /mnt/backup-disk/web echo "$today - Creating new backup-topdir: 'web'.." >> /var/log/blackSERV-backup.log fi if [ ! -d "/mnt/backup-disk/znextCloud" ]; then mkdir /mnt/backup-disk/znextCloud echo "$today - Creating new backup-topdir: 'znextCloud'.." >> /var/log/blackSERV-backup.log fi ################################################################################################ ## Start des täglichen blackSERV-Backups: #Create Backup of daten_michael: #**************************************************************** mount -t nfs -o ro,hard 192.168.1.21:/volume1/daten_michael /mnt/blackSERV 2>> /var/log/blackSERV-backup.log rsync -av --exclude '*@SynoResource' --exclude '@eaDir' \ --exclude '*.vsmeta' --exclude '.DS_Store' --exclude 'Thumbs.db' --exclude 'Video2Brain_' \ /mnt/blackSERV/3_Dokumente /mnt/blackSERV/4_Medien /mnt/blackSERV/5_Development /mnt/blackSERV/6_KnowHow \ /mnt/backup-disk/daten_michael/ umount /mnt/blackSERV #Create Backup of server_backups: #**************************************************************** mount -t nfs -o ro,hard 192.168.1.21:/volume1/server-backups /mnt/blackSERV 2>> /var/log/blackSERV-backup.log ## Dinamic backup for all Server Systems in path: for serverBackupPath in `find /mnt/blackSERV/* -prune -type d` do serverBackupFolder=$(echo $serverBackupPath | cut -d '/' -f4) rsync -av --exclude '*@SynoResource' --exclude '@eaDir' \ --exclude '*.vsmeta' --exclude '.DS_Store' --exclude 'Thumbs.db' \ $serverBackupPath/$today/ \ /mnt/backup-disk/server_backups/$serverBackupFolder/ done umount /mnt/blackSERV #Create Backup of web: #**************************************************************** mount -t nfs -o ro,hard 192.168.1.21:/volume1/web /mnt/blackSERV 2>> /var/log/blackSERV-backup.log rsync -av --exclude '*@SynoResource' --exclude '@eaDir' \ --exclude '*.vsmeta' --exclude '.DS_Store' --exclude 'Thumbs.db' \ /mnt/blackSERV/ \ /mnt/backup-disk/web/ umount /mnt/blackSERV #Create Backup of znextCloud: #**************************************************************** mount -t nfs -o ro,hard 192.168.1.21:/volume1/znextCloud /mnt/blackSERV 2>> /var/log/blackSERV-backup.log rsync -av --exclude '*@SynoResource' --exclude '@eaDir' \ --exclude '*.vsmeta' --exclude '.DS_Store' --exclude 'Thumbs.db' \ /mnt/blackSERV/ \ /mnt/backup-disk/znextCloud/ umount /mnt/blackSERV echo "$today -> Tägliche Sicherung erfolgreich abgeschlossen!" >> /var/log/blackSERV-backup.log fi umount /mnt/backup-disk && uhubctl -a off -p 3