PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rsync über ssh remotehost löscht nicht



blubbersuelze
11.08.18, 14:13
Hallo,
ich möchte ein Backup via rsync durchführen lassen. Zum Remotehost wird via SSH verbunden.
Das Commandline sieht wie folgt aus:


/usr/bin/rsync -e "/usr/bin/ssh -2 -v -i $IDENTITYFILE -p $SSHPORT" --archive --verbose --relative --progress --inplace --delete --delete-excluded --exclude-from=$EXCLUDEFILE --include-from=$INCLUDEFILE $REMOTEUSER@$REMOTEHOST:$REMOTEPATH

Leider wird auf der Remoteseite das löschen nicht ausgeführt was bei rsync durch die "delete" Option aktiviert wird.

Verbose Mode von SSH und RSYNC bringen mich auch nicht weiter bei der Suche nach der Ursache warum remoteseitig nichts gelöscht wird was gelöscht werden sollte.

sieht jemand den Grund den ich übersehe?

mfg.
blubbersuelze :p

drcux
11.08.18, 15:05
Wo ist deine Quelle? Übersehe ich da etwas, oder hat du nur include und exclude?

blubbersuelze
11.08.18, 16:43
ich habe --include-from und --exclude-from.
include-from definiert die Datei in welchem die Pattern der zu syncronisierenden Quellen aufgelistet sind
exclude-from definiert die Datei in der die Exclude Pattern der zu syncronisierenden Quellen aufgelistet sind

wenn in der/n Quelle/n neue Dateien hinzu kommen, oder geändert werden funktioniert das auch.
Wenn aber an der Quelle eine Datei gelöscht wurde, so wird sie am Ziel nicht gelöscht, das sollte aber durch "--delete" geschehen.

hier nochmal der Command mit jeder Option in einer Zeile:


/usr/bin/rsync
-e "/usr/bin/ssh -2 -v -i $IDENTITYFILE -p $SSHPORT"
--archive
--verbose
--relative
--progress
--inplace
--delete
--delete-excluded
--exclude-from=$EXCLUDEFILE
--include-from=$INCLUDEFILE
$REMOTEUSER@$REMOTEHOST:$REMOTEPATH


Inhalt eines Includefiles:


/some/absolute/path
/some/absolute/path2/*
/some/absolute/path3*


Inhalt des Excludeefiles:


/some/specific/path
/some/specific/path2/*
/some/specific/path3*




Wo ist deine Quelle? Übersehe ich da etwas, oder hat du nur include und exclude?
Ich hoffe das durch die andere Darstellung der Command klarer wird ...

drcux
12.08.18, 05:24
Da fehlt die Quelle, mit "include" gibst du keine an, sondern definierst Dateien/Verzeichnisse die nicht excludiert werden sollen. Mit deinem Befehl synchronisierst du nicht, sondern kopierst nur...

rsync --exclude="*.txt" --include="briefe*.txt" /pfad/quelle /pfad/ziel

Synchroniesiere alles aus "quelle" nach "ziel" außer alle txt-Dateien. Nur briefe*.txt sollen nicht excludiert werden.
Das "include" bezieht sich immer auf "exclude"!



--include=PATTERN don't exclude files matching PATTERN

blubbersuelze
12.08.18, 12:48
ok .. habe den Command geändert ...

er sieht nun wie folgt aus:


/usr/bin/rsync
-e "/usr/bin/ssh -2 -v -i $IDENTITYFILE -p $SSHPORT"
--archive
--verbose
--relative
--progress
--inplace
--delete
--delete-excluded
--exclude-from=$EXCLUDEFILE
$SOURCEDIRECTORY
$REMOTEUSER@$REMOTEHOST:$REMOTEPATH


Mit einem Sourcedirectory funktioniert das nun.

Jetzt ist die Frage wie ich das mache das ich mehrere verschiedene Sourcen angebe.
Sie sollen alle an das selbe Ziel synchronisiert werden.
Die Sourcen können absolute Pfade, oder absolute Pfade zu speziellen Dateien sein. Beides wahlweise mit Wildcards.

Gehe ich mit mehreren rsync Commands an das gleiche Ziel wird das Ergebnis vom vorherigen rsync entfernt, was nicht das Ziel ist.
Also muss das alles in einem einzigen Command passieren.

ich habe schon folgendes probiert:


... --exclude="*" --include-from=/patternfile/to/include / $DESTINATION


das Includefile sah wie folgt aus:


/some/absolute/path
/some/absolute/path2/*
/some/absolute/path3/*.conf
/some/absolute/path4*


leider wird hier nichts gesynct, obwohl die Sourcen existent sind.

drcux
12.08.18, 16:56
Du kannst mehrere Quellen angeben:

rsync ordner1 ordner2 ordner3 zielordner

blubbersuelze
12.08.18, 17:44
ja nett, aber löst nicht mein Problem ...

ich suche eine Lösung bei der ich eine Liste angebe bestehend aus absoluten Pfaden zu beliebigen Ordnern und Dateien inklusive Wildcards
und das wird alles zum Ziel synchronisiert.
Nicht mehr existierende Dateien/Ordner sollen am Ziel dann gelöscht werden.

Eigentlich ist für sowas rsync perfekt, aber irgendwie passt das bisher alles nicht so ganz.

snowcrash23
13.08.18, 01:14
Moin

mit -vv spuckt rsnyc zusätzlich noch Informationen zum pattern-matching aus, sehr praktisch um dem Fehler evtl. auf die Schliche zu kommen.

Hier ein Beispiel wie es klappen sollte.


rsync --dry-run --include-from=include_file --delete-excluded --delete --recursive / /dest

include_file:

+ /some/
+ /some/absolute/
- /some/absolute/path/excludeme
+ /some/absolute/path/***
+ /some/absolute/path2/***
+ /some/absolute/path3/
+ /some/absolute/path3/*.conf
- *

MfG
snowcrash23

blubbersuelze
13.08.18, 10:16
hätte funktionieren können.

Leider sorgt


- *
dafür das alles ignoriert wird.
Ohne dieses Pattern versucht rsync alles zu syncen was auch nicht das Ziel ist.

snowcrash23
13.08.18, 13:07
Leider sorgt


- *
dafür das alles ignoriert wird.
Ohne dieses Pattern versucht rsync alles zu syncen was auch nicht das Ziel ist.
Aber du möchtest doch nur explizit genannte Pfade syncen, ergo muss alles andere ja verboten sein. Bei mir funktioniert es ja...
Wirf nochmal einen Blick in die manpage von rsync, dort steht unter INCLUDE/EXCLUDE PATTERN RULES:
For instance, to include "/foo/bar/baz", the directories "/foo" and "/foo/bar" must not be excluded

Ansonsten kannst du ja mal die Ausgabe von rsync .... -vv posten.

MfG
snowcrash23

blubbersuelze
13.08.18, 14:20
Aber du möchtest doch nur explizit genannte Pfade syncen, ergo muss alles andere ja verboten sein.

Exakt, aber es klappt nicht.
Hier mal mein Includefile und der Command samt Ausgabe:

das Includefile "/root/backup_sources" wie folgt aus:


+ /root/backup_sources
+ /TEST/test_*
+ /TEST/gitlab*
- *


Command mit Ausgabe:


rsync --dry-run -vv --archive --include-from=/root/backup_sources --delete-excluded --delete / /home/backuptest/backup_test_target/
sending incremental file list
[sender] hiding directory media because of pattern *
[sender] hiding directory dev because of pattern *
[sender] hiding file vmlinuz.old because of pattern *
[sender] hiding directory etc because of pattern *
[sender] hiding directory bin because of pattern *
[sender] hiding directory TEST because of pattern *
[sender] hiding directory run because of pattern *
[sender] hiding directory var because of pattern *
[sender] hiding directory home because of pattern *
[sender] hiding file initrd.img because of pattern *
[sender] hiding directory srv because of pattern *
[sender] hiding directory proc because of pattern *
[sender] hiding directory sbin because of pattern *
[sender] hiding directory opt because of pattern *
[sender] hiding file initrd.img.old because of pattern *
[sender] hiding directory sys because of pattern *
[sender] hiding directory lib64 because of pattern *
[sender] hiding directory root because of pattern *
[sender] hiding directory usr because of pattern *
[sender] hiding directory lib because of pattern *
[sender] hiding file vmlinuz because of pattern *
[sender] hiding directory tmp because of pattern *
[sender] hiding directory lost+found because of pattern *
[sender] hiding directory mnt because of pattern *
[sender] hiding directory boot because of pattern *
delta-transmission disabled for local transfer or --whole-file
total: matches=0 hash_hits=0 false_alarms=0 data=0

sent 46 bytes received 102 bytes 296.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

snowcrash23
13.08.18, 14:50
Es scheiter wieder an deinem Include-file!


+ /root/backup_sources # kann nicht gefunden werden. /root/ ist nicht includiert.
+ /TEST/test_* # kann nicht gefunden werden. /TEST/ ist nicht includiert.
+ /TEST/gitlab* # kann nicht gefunden werden. /TEST/ ist nicht includiert.
- *

sollte so aussehen:

+ /root/
+ /root/backup_sourcen
+ /TEST/
+ /TEST/test_* # wenn es Dateien sind
+ /TEST/gitlab*/*** # wenn es Ordner mit Unterordnern sind
- *

Quelle:

/TEST
├── excluded_file1
├── excluded_file2
├── gitlab1
│ └── included_file
├── gitlab2
│ └── included_file
├── test_1
└── test_2


Ziel:

.
└── TEST
├── gitlab1
│ └── included_file
├── gitlab2
│ └── included_file
├── test_1
└── test_2


MfG
snowcrash23

blubbersuelze
13.08.18, 17:56
@snowcrash23 danke das war es. Funktioniert nun wie gedacht!