Autor Thema: Frage zu rsync  (Gelesen 4182 mal)

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Frage zu rsync
« am: 15. Mai 2012, 08:20:48 »
Hi,

ich synce mit rsync verschiedene suns untereinander.

Bei symlinks treibt mich rsync gerade aber in den Wahnsinn.

Ich änder auf Maschine A einen Symlink. Der Symlink selber sowie das File dahinter haben einen aktuelle timestamp. Nun läuft das syncscript mit -u und holt Daten von Maschine B wo dieser Symlink auch existiert (halt mit einem älteren timestamp). Trotzdem ändert rsync den Symlink auf Maschine A wieder auf den alten Zustand.

Hier ein bsp.

Maschine A mit neuem Symlink:

May 15 08:16 LINK -> FILE_NEW

Der gleiche Link aktuell auf Maschine B (älterer Timestamp):

May 15 07:22 LINK -> FILE_OLD

nun synce ich auf A von B mit:

rsync -u --exclude=.* --exclude=var/ --exclude=log/ -az -e ssh user@IP:/home/user/ /home/user/   

Danach auf A:

May 15 08:18 LINK -> FILE_OLD

-u macht laut --help:

--update                skip files that are newer on the receiver

Versteh ich also nicht. Der Link sowie das File dahinter sind auf dem Empfänger doch neuer. Wieso ändert er es also?

Mach ich hier was falsch, verstehe ich was falsch oder ist das einfach nur ein Bug?

Danke und Gruß
Sebastian

sonnenblen.de - Das unabhängige Sun User Forum

Frage zu rsync
« am: 15. Mai 2012, 08:20:48 »

Offline vab

  • Global Moderator
  • Sobl Master
  • *****
  • Beiträge: 488
Re: Frage zu rsync
« Antwort #1 am: 05. Juni 2012, 12:12:20 »
So wie Du es beschreibst, könnte es tatsächlich ein bug sein.  Hast Du mal auf rsync@lists.samba.org gefragt?


Gruß -- Volker
Diese Nachricht enthält ausschließlich meine persönliche private Meinung....

Offline escimo

  • Sobl Guru
  • *****
  • Beiträge: 1635
  • eiskaltes Unwissen
    • Youtube-Kanal opensparcbox.org
Re: Frage zu rsync
« Antwort #2 am: 07. Juni 2012, 16:22:21 »
Einige Fragen zur Klarstellung:
1. Welche Version von rsync wird auf beiden Systemen benutzt ($ rsync --version)?
2. Welche Art von Link wird benutzt (symbolischer Link oder Hard-Link?)
3. Welchen Timestamp hat FILE_NEW auf <A> und FILE_OLD auf <B> (bei deiner Angabe sehe ich nur den Timestamp der Links)?

Gegeben: Die Transferart ist eine GET-Operation mittels rsync von Host <B> (Quelle) auf Host <A> (Ziel und Working Env).

Fassen wir die von dir genutzten Parameter nochmal zusammen mit Angabe deren Bedeutung aus der man page:
-u   #update; skip files that are newer on the receiver

--exclude   #exclude files matching PATTERN (--exclude=PATTERN)

-a   #archive; equals to -rlptgoD (no -H,-A,-X)
  -r   #recurse into directories
  -l   #copy symlinks as symlinks
  -p   #preserve permissions
  -t   #preserve modification times
  -g   #preserve group
  -o   #preserve owner (super-user only)
  -D   #same as --devices --specials
    --devices   #preserve device files (super-user only)
    --specials   #preserve special files

-z   #compress file data during the transfer

-e   #choose an alternative remote shell program to use for communication between the local and remote copies of rsync

----------------------------
-l, --links
              When  symlinks are encountered, recreate the symlink on the destination.
Scheint eindeutig und klar zu sein. Stellt sich die Frage, ob der Schalter "-a" korrekt ist.

Beispiel 1: Nachstellung
$ #Ausgangsbasis
$ ls -l A B
A:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:52 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:52 link1 -> file1
B:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:28 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1

$ #Inhalt A/file1
$ cat A/file1
A

$ #Inhalt B/file1
$ cat B/file1
B

$ #Synchronisiere B (Quelle) auf/nach A (Ziel)
$ rsync -u -az B/ A/

$ #Ergebnis des rsync
$ ls -l A B
A:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:52 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1

B:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:51 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1

$ cat A/file1
A
$ cat B/file1
B
Du kannst sehen, das Ergebnis ist nicht ganz wie von dir beschrieben. Der Link A/link1 wurde ersetzt, die vom Link A/link1 referenzierte Datei mit aktuellerem Timestamp und Inhalt wurde beibehalten, da die Datei einen neueren Timestamp besitzt (Inhalt immer noch wie in Ausgangsbasis).

Fragen:
1. Könnte es sein, dass durch Verwendung von Schalter "-a" (implizit "-l") der Link kopiert wurde und der Schalter "-u" auf Links nicht anwendbar ist, da es sich bei Links nicht um reguläre Dateien handelt?
2. Wurde die vom Link referenzierte Datei FILE_NEW auf <A> nicht mit FILE_OLD von <B> überschieben, was zeigen würde, dass der Schalter "-u" greift?

Beispiel 2: Korrektur des rsync-Aufrufes; Ersetzung des Schalter "-a" gegen "-rptgoD", ohne "-l":
$ rsync -uzrptgoD B/ A/
skipping non-regular file "link1"
$ ls -l A B
A:
total 4
-rw-r--r-- 1 sx sx2 2012-06-07 15:52 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 16:04 link1 -> file1

B:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:51 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1

$ cat A/file1
A
$ cat B/file1
B
Wenn B/file1 neuer ist, dann würde A/file1 auch ersetzt werden (konnte ich ebenso nachstellen).

Fazit: Es ist im einzelnen zu prüfen, ob Links kopiert werden sollen oder nicht. Sollte man sich mit Angabe des Schalters "-a", implizit "-l", für das Kopieren von Links entscheiden, scheint der Schalter "-u" nicht auf (symbolischen) Links anwendbar zu sein. Andernfalls kann man sich in diesem Beispiel anstelle des Schalters "-a" für "-rptgoD" entscheiden.

Gruß,
escimo
« Letzte Änderung: 07. Juni 2012, 16:23:57 von escimo »