skripting-section:bash:synology-backup-skript

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!)

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

  • skripting-section/bash/synology-backup-skript.txt
  • Last modified: 2018/09/25 11:15
  • by michael