[gelöst] RSync --include / --exclude selektives Backup

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
exxecc
Beiträge: 30
Registriert: 24.07.2010 12:32:29
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] RSync --include / --exclude selektives Backup

Beitrag von exxecc » 22.09.2013 23:26:59

Hallo zusammen!

Momentan quält mich ein --include / --exclude Problem mit RSync ...
Mein rsync Befehl schaut folgendermaßen aus:

Code: Alles auswählen

rsync -rtvz --dry-run --delete --include '*/' --include '/var/opt/' --include '/var/opt/dir1' --include '/var/opt/dir1/file1.fl' --include '/var/opt/dir2' --include '/var/opt/dir2/file1.fl' --include '/etc/hosts' --include '/etc/dnsmasq.conf' --exclude '*' root@server.own:/ /var/backups/server
Ich habe gelesen das "--include '*/'" benötigt wird damit rsync in allen Verzeichnissen und Subverzeichnissen sucht
Weiterhin habe ich gelesen das "--exclude '*'" zuletzt zum negieren aller anderen Includes gebraucht wird.
Und zwischendrin immer "--include '/pfad/zur/datei.dat'" um die gewünschte Datei, oder zB. "--include '/pfad/zur/*'" um den gewünschten Pfad rekursiv zu includieren.

Leider bekomme ich bei meinem obigen Beispielbefehl immer den kompletten Server von rSync durchgerattert..
Hab alles mögliche probiert hin und her und umzustellen, gegoogelt und gelesen, aber scheinbar verstehe ich irgendwas nicht richtig...

Ich würde mich freuen wenn mich jemand aufklären könnte :hail:

MfG exxecc
Zuletzt geändert von exxecc am 23.09.2013 17:14:16, insgesamt 2-mal geändert.

Benutzeravatar
Dogge
Beiträge: 1899
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: RSync Backup Script

Beitrag von Dogge » 22.09.2013 23:36:07

Ich bin mir bei der Syntax nicht ganz sicher, ob das so richtig ist. Ich habe --exclude immer so benutzt: --exclude=/pfad/zum/ordner. Das funktioniert, aber ob das = nötig ist weiß ich nicht. Probiers doch mal damit.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

exxecc
Beiträge: 30
Registriert: 24.07.2010 12:32:29
Lizenz eigener Beiträge: MIT Lizenz

Re: RSync Backup Script

Beitrag von exxecc » 23.09.2013 08:46:46

Hoi

Leider nimmt sich die Syntax Änderung nichts :-(

Auch bei folgendem Befehl bekomme ich den kompletten Server durchgerattert in rSync:

Code: Alles auswählen

rsync -rtvz --dry-run --delete --include=*/  --include=/var/opt/* --include=/etc/hosts --include=/etc/dnsmasq.conf --exclude=* root@server.own:/ /var/backups/server
Egal wie ich es anstelle, mit den includes/excludes bekomme ich es nicht wie gewünscht hin, selektiv zu backuppen.
Entweder der komplette Server wird gelistet, oder gar nichts...

Vlt hilf es wenn ich mein komplettes Vorhaben erläutere:
Ich bin dabei ein BashScriptzu erstellen wo vordefinierte Backups nach Aufruf ablaufen:

Code: Alles auswählen

#!/bin/bash
# backuper - automated predefined backups
########################################## START #

##################################################
# MAIN CONFIGURATION #############################
##################################################
sRootPathBackup='/var/backups'

##################################################
sPathBackup="$sRootPathBackup/server"
aInclude=()
aInclude[${#aInclude[*]}]='/var/opt/'
aInclude[${#aInclude[*]}]='/etc/hosts'
aInclude[${#aInclude[*]}]='/etc/dnsmasq.conf'
sInclude=''
sFindPaths=''

# create folder if not exists
if [ ! -d "$sPathBackup" ]; then
    mkdir $sPathBackup
fi

for iIndex in ${!aInclude[*]}; do
    sFindPaths="$sFindPaths ${aInclude[$iIndex]}"
done

sFileList=`ssh root@server.own "find $sFindPaths"`

for sPath in $sFileList; do
    sInclude="$sInclude --include '${sPath}'"
done

rsync -rtvz --dry-run --delete --include '*/'$sInclude --exclude '*' root@server.own:/ $sPathBackup
Verwende ich "--include '*/'" werden alle Ordner des Servers von rSync bearbeitet.
Verwende ich es nicht beendet rSync sein Dienst ohne einen Ordner / einer Datei.
Meine definierten Includes werden auch bei anderer Syntax (ersten Slash und/oder letzten Slash entfernen) nie angezeigt :?

MfG exxecc

exxecc
Beiträge: 30
Registriert: 24.07.2010 12:32:29
Lizenz eigener Beiträge: MIT Lizenz

Re: RSync --include / --exclude selektives Backup

Beitrag von exxecc » 23.09.2013 17:14:02

Scheinbar hat es doch mit der Syntax zu tun gehabt. Weiteres "rumspielen/testen" hat das zumindest gezeigt..
"--include=/pfad/zur/datei" ist die einzigste synatx die bei mir erkannt wird.
Warum zur Hölle wird in so vielen anderen Foren die andere Syntax (auch wegen evtl Leerzeichen in den Ordnern/Dateien) angepriesen? :evil:

Funktioierendes Produkt meiner spielerrei:

Code: Alles auswählen

#!/bin/bash
# backuper - automated predefined backups
########################################## START #

##################################################
# MAIN CONFIGURATION #############################
##################################################
sRootPathBackup='/var/backups'

##################################################
sPathBackup="$sRootPathBackup/server"
aInclude=()
aInclude[${#aInclude[*]}]='/var/opt/**'
aInclude[${#aInclude[*]}]='/etc/hosts'
aInclude[${#aInclude[*]}]='/etc/dnsmasq.conf'
sFindPaths=''
sInclude=' '
if [ ! -d "$sPathBackup" ]; then
    mkdir $sPathBackup
fi
for iIndex in ${!aInclude[*]}; do
    sDirComplete=${aInclude[$iIndex]%\*\*}
    aPathDirs=`echo "$sDirComplete" | tr "/" " "`
    sPathDirs='/'
    for sDirPartial in $aPathDirs; do
        sEqual="$sPathDirs$sDirPartial"
        if [ $sEqual != ${aInclude[$iIndex]} ]; then
            sPathDirs="$sPathDirs$sDirPartial/"
            sInclude="$sInclude--include=$sPathDirs "
        fi        
    done
    sInclude="$sInclude--include=${aInclude[$iIndex]} "
done
rsync -rtvz --dry-run --delete $sInclude --exclude=* root@server.own:/ $sPathBackup
Die Ausführung könnte man in dem Script natürlich beliebig oft (für jeden weiteren Server) kopieren / wiederholen.
Oder jemand macht sich die Mühe und definiert ein Masterarray mit BackupNamen um dann mittels variablen Variablen das ganze automatisch ablaufen zu lassen :lol:

Die in "aInclude" angegebenen Pfade/Dateien werden in den unteren Schleifen aufgelöst und deren Vor-Ordner einzeln als include bei rSync als Parameter hinzugefügt - andernfalls (und das war auch ne Nuß die ich erstmal finden musste bevor ich die knacken konnte...) würden diese Pfade / Dateien von rSync nicht beachtet.

MfG exxecc

Antworten