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 "PASSWORD" \ -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