Mein BTRFS snapshot Backup script

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

gerhardschr

Benutzer
Registriert
28. Feb. 2017
Beiträge
13
Reaktionspunkte
0
Punkte
0
hi,
ich benutzte meine DS2415+ unteranderem als Lagerort für Backups von anderen NAS Systemen (z.B. Qnaps)

Auf den Qnaps läuft ein rsync server.
Der Rsync lässt nur die IP der Synology zu....

Mein Plan:
tag.0 bis tag.6 sind btrfs subvols, diese werden rotiert.

Gleiches mit woche.0 bis woche.3 und in meinem fall monat.0 bis monat.1


Die rotation würde ich mittels mv (umbenenen) erreichen.
rsync sync würde immer auf $backupname.0 laufen....

Beim Wochen und Monat Backup wird ein snapshot von tag.0 auf woche.0 oder monat.0 erstellt.


Spricht etwas dageben manuell subvols und snapshots zu erstellen?
Stört das DSM von synology?


PS.: Wenn das script fertig ist, dann würde ich es hier posten :)


Danke!

//edit: soweit bin ich mit dem script gekommen (quick and dirty)

Das Script wird über die Aufgabenverwaltung im DSM gestartet:


Rich (BBCode):
tägliches backup : /volume1/backups/backup_rsync_btrfs.sh --quell-dir dateien --quell-host HostToBackup --ziel-dir /volume1/backups/HostToBackup/tag --backup-name tag --anzahl 7

wöchentliches backup: /volume1/backups/backup_rsync_btrfs.sh --quell-dir dateien --quell-host HostToBackup --ziel-dir /volume1/backups/HostToBackup/woche --backup-name woche --anzahl 4 --link-dir /volume1/backups/HostToBackup/tag/tag.0

monatliches backup: /volume1/backups/backup_rsync_btrfs.sh --quell-dir dateien --quell-host HostToBackup --ziel-dir /volume1/backups/HostToBackup/monat --backup-name monat --anzahl 2 --link-dir /volume1/backups/HostToBackup/tag/tag.0





Rich (BBCode):
#! /bin/bash

quelldir=""
quellhost=""
zieldir=""
backupname=""
anzahl=""
linkdir=""
username=""
password=""


while [ ! -z "$1" ]; do
		case $1 in
				--quell-dir)
						quelldir=$2
						shift
						;;
				--quell-host)
						quellhost=$2
						shift
						;;
				--ziel-dir)
						zieldir=$2
						shift
						;;

				--backup-name)
						backupname=$2
						shift
						;;

				--anzahl)
						anzahl=$2
						shift
						;;

				--link-dir)
						linkdir=$2
						shift
						;;
				*)
						echo "$1 $2 ist kein gueltiger Parameter!"
						shift
						;;
		esac
	shift
done



mailsplit=$(cat /volume1/backups/mails.txt | tr ";" "\n")


#Wenn basedir nicht existiert, dann subvolume anlegen
if [ ! -d "$zieldir" ]; then
	basedir=$(dirname "$zieldir")
	
	if [ ! -d "$basedir" ]; then
		echo "btrfs subvol create "$basedir""
		btrfs subvol create "$basedir"
		sleep 2
	fi
fi




logdir=$zieldir/logs
logfile="$logdir/$(date '+%Y-%m-%d_%H_%M_%S').log"

#Wenn logdir nicht angelegt werden kann, dann exit
if [ ! -d "$logdir" ]; then
		echo "mkdir -p $logdir"
		
		if [ `mkdir -p "$logdir"` ]; then
			echo "Kann Logverzeichnis nicht anlegen $zieldir nicht anlegen. "
			exit
		fi
fi




#Wenn zieldir nicht angelegt werden kann, dann exit
if [ ! -d "$zieldir" ]; then
		echo "btrfs subvol create "$zieldir""
		btrfs subvol create "$zieldir"
		sleep 2
fi






#Jedes Snapshot durchgehen
item=$(( anzahl - 1 ))

while [ $item -ge 0 ]; do
		#Backupsubvols anlegen, wenn sie nicht existieren
		if [ ! -d "$zieldir/$backupname.$item" ]; then
			echo "btrfs subvol create "$zieldir/$backupname.$item""
			btrfs subvol create "$zieldir/$backupname.$item"
			sleep 2
		fi




		#Wenn das letzte erreicht ist, subvol löschen
		if [ $item -eq $(( anzahl - 1 )) ]; then
			echo "btrfs subvol del "$zieldir/$backupname.$item""
			btrfs subvol del "$zieldir/$backupname.$item"
			sleep 2

			item=$(( item - 1 ))
			continue
		fi


        #Wenn das neueste erreicht ist (backup.0) dann nach oben verschieben (backup.1)
		if [ $item -eq 0 ]; then
			echo "$zieldir/$backupname.$item --> $zieldir/$backupname.$(($item + 1))"
			mv "$zieldir/$backupname.$item" "$zieldir/$backupname.$(($item + 1))"
			sleep 2


			item=$(( item - 1 ))
			continue
		fi

		#Die normalen Snapshots rotieren lassen
		echo "$zieldir/$backupname.$item --> $zieldir/$backupname.$(($item + 1))"
		mv "$zieldir/$backupname.$item" "$zieldir/$backupname.$(($item + 1))"
		sleep 2

		#Nächstes BackupItem
		item=$(( item - 1 ))
done




#Wenn linkdir Parameter gesetzt wurde (für wochen und monat backups), dann $linkdir subvol nach $zieldir/$backupname.0 via snapshot kopieren --> fertig, sonst rsync für $zieldir/$backupname.0 verwenden (tag backup)
if [ $linkdir ]; then
	#Wenn linkdir existiert, dann $linkdir als $backupname.1 nutzen ohne rsync
	if [ -d "$linkdir" ]; then
		#$linkdir (tag.0) auf $backupname.0 via btrfs subvol snapshot kopieren
		echo "btrfs subvol ($linkdir) nach $zieldir/$backupname.0 via snapshot kopieren"
		echo "btrfs subvol snap "$linkdir" "$zieldir/$backupname.0""
		btrfs subvol snap "$linkdir" "$zieldir/$backupname.0"
		sleep 2
	else	
		#Wenn linkdir nicht existiert, dann $zieldir/$backupname.1 nach $zieldir/$backupname.0 via btrfs snapshot kopieren
		echo "btrfs subvol snap "$zieldir/$backupname.1" "$zieldir/$backupname.0""
		btrfs subvol snap "$zieldir/$backupname.1" "$zieldir/$backupname.0"
		sleep 2
		
		
		#Rsync für tag backup auf $zieldir/$backupname.0
		echo 'rsync -av --itemize-changes --stats --progress --human-readable --human-readable --no-owner --no-group --chmod=ugo=rwx --log-file-format="%n --> %b bytes" --log-file=$logfile --delete $quellhost::$quelldir $zieldir/$backupname.0'
		rsync -av --itemize-changes --stats --progress --human-readable --human-readable --no-owner --no-group --chmod=ugo=rwx --log-file-format="%n --> %b bytes" --log-file=$logfile --delete $quellhost::$quelldir $zieldir/$backupname.0
		
		
		#Rsync Rueckgabewert pruefen
		if ! [ $? = 24 -o $? = 0 ] ; then
			for mailadresse in $mailsplit
			do

				ssmtp $mailadresse <<-EOF
				From: $HOSTNAME@abc.de
				Subject: RsyncSicherung $quellhost $backupname fehlerhaft vom $(date '+%Y-%m-%d_%H_%M_%S')

				$(tail -n 15 $logfile)
				EOF

			done
						
		else

			for mailadresse in $mailsplit
			do

				ssmtp $mailadresse <<-EOF
				From: $HOSTNAME@abc.de
				Subject: RsyncSicherung $quellhost $backupname fertig vom $(date '+%Y-%m-%d_%H_%M_%S')

				$(tail -n 15 $logfile)
				EOF

			done
		fi
	

	fi
else
	#Wenn linkdir nicht angegeben ist, dann $zieldir/$backupname.1 nach $zieldir/$backupname.0 via btrfs snapshot kopieren
	echo "btrfs subvol snap "$zieldir/$backupname.1" "$zieldir/$backupname.0""
	btrfs subvol snap "$zieldir/$backupname.1" "$zieldir/$backupname.0"
	sleep 2
	
	
	#Rsync für tag backup auf $zieldir/$backupname.0
	echo 'rsync -av --itemize-changes --stats --progress --human-readable --human-readable --no-owner --no-group --chmod=ugo=rwx --log-file-format="%n --> %b bytes" --log-file=$logfile --delete $quellhost::$quelldir $zieldir/$backupname.0'
	rsync -av --itemize-changes --stats --progress --human-readable --human-readable --no-owner --no-group --chmod=ugo=rwx --log-file-format="%n --> %b bytes" --log-file=$logfile --delete $quellhost::$quelldir $zieldir/$backupname.0
	
	
	#Rsync Rueckgabewert pruefen
	if ! [ $? = 24 -o $? = 0 ] ; then
		for mailadresse in $mailsplit
		do

			ssmtp $mailadresse <<-EOF
			From: $HOSTNAME@abc.de
			Subject: RsyncSicherung $quellhost $backupname fehlerhaft vom $(date '+%Y-%m-%d_%H_%M_%S')

			$(tail -n 15 $logfile)
			EOF

		done
					
	else

		for mailadresse in $mailsplit
		do

			ssmtp $mailadresse <<-EOF
			From: $HOSTNAME@abc-bau.de
			Subject: RsyncSicherung $quellhost $backupname fertig vom $(date '+%Y-%m-%d_%H_%M_%S')

			$(tail -n 15 $logfile)
			EOF

		done
	fi

fi
 
Zuletzt bearbeitet:
keiner eine idee, ob das Anlegen von Subvols/Snapshots die Synology Verwaltungssoftware stört?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat