Mein BTRFS snapshot Backup script

Status
Für weitere Antworten geschlossen.

gerhardschr

Benutzer
Mitglied seit
28. Feb 2017
Beiträge
13
Punkte für Reaktionen
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:

gerhardschr

Benutzer
Mitglied seit
28. Feb 2017
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
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 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!