RSYNC soll Log-Datei mit Info über geänderte Dateien erstellen,aber wie mach ich das?

Status
Für weitere Antworten geschlossen.

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
Hallo zusammen,

ich synchronisiere div. Ordner zwischen zwei unterschiedlichen NAS mittels RSYNC. Ich würde gerne eine LOG-Datei schreiben lassen, in der nur die mittels RSYNC geänderten Dateien aufgeführt sind. Leider schaffe ich es nicht diese LOG-Datei erstellen zu lassen, weil ich nicht herausfinden kann, welche Parameter ich dafür nutzen muss.

Kann mir da jemand behilflich sein.

Danke und viele Grüße
Fraubi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.158
Punkte
754
Benutzt Du eigene Shellskripte? Wenn ja, dann findest Du Beispielskripte von mir für ein rsync-Backup mit Logging hier im Forum über die Suche.
 

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
Meinst Du dieses :
#!/bin/sh

export DATE="/bin/date"
export ECHO="/bin/echo"
export RSYNC="/usr/syno/bin/rsync"
export TEE="/usr/bin/tee"
export LOG="/volume1/net/backup/PC/bin/rsync-Backup.log"
export SOURCE="/volume1"
export DEST="/volumeSATA/satashare"

$ECHO "Start des rsync-Laufs Backup" 2>&1 | $TEE $LOG

echo "-----" 2>&1 | $TEE -a $LOG
$DATE 2>&1 | $TEE -a $LOG
$ECHO "Foto" 2>&1 | $TEE -a $LOG
$RSYNC -avh --delete $SOURCE/bilder/ $DEST/bilder 2>&1 | $TEE -a $LOG
$ECHO "-----" 2>&1 | $TEE -a $LOG
$DATE 2>&1 | $TEE -a $LOG
$ECHO "music" 2>&1 | $TEE -a $LOG
$RSYNC -avh --delete $SOURCE/audio/ $DEST/audio 2>&1 | $TEE -a $LOG
$ECHO "-----" 2>&1 | $TEE -a $LOG
$DATE 2>&1 | $TEE -a $LOG
$ECHO "net" 2>&1 | $TEE -a $LOG
$RSYNC -avh --delete $SOURCE/net/ $DEST/net 2>&1 | $TEE -a $LOG
$ECHO "-----" 2>&1 | $TEE -a $LOG
$DATE 2>&1 | $TEE -a $LOG
$ECHO "Backup video" 2>&1 | $TEE -a $LOG
$RSYNC -avh --delete $SOURCE/tv/ $DEST/tv 2>&1 | $TEE -a $LOG

$ECHO "-----" 2>&1 | $TEE -a $LOG
$DATE 2>&1 | $TEE -a $LOG
$ECHO "Ende des rsync-Laufs Backup" 2>&1 | $TEE -a $LOG

chown user:group $LOG
chmod 644 $LOG

Könntest Du dazu in dem folgenden Bereich noch ein wenig kommentieren, damit es evtl. etwas deutlicher wird was da abläuft.

echo "-----" 2>&1 | $TEE -a $LOG
$DATE 2>&1 | $TEE -a $LOG
$ECHO "Foto" 2>&1 | $TEE -a $LOG

Was bedeutet $TEE -a $LOG und was bewirkt ECHO "Foto" 2>&1 | $TEE -a $LOG?

Den Rest verstehe ich.....

Danke vorab für Deine Mühe
Gruß
Fraubi
 
Zuletzt bearbeitet:

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.158
Punkte
754
"tee" splittet den Output auf, so dass man etwas beispielsweise auf der Konsole (stdout) mitlesen und gleichzeitig in eine Logdatei schreiben kann. Die Option -a sorgt dafür, dass beim Schreiben an die Logdatei - falls verfügbar - angehängt wird statt sie zu überschreiben. "echo" schreibt seine Option einfach auf stdout. "2&>1" lenkt den Output von stdout und stderr um - in diesem Falle auf tee. Ich habe im Skript noch ein paar Unschönheiten korrigiert, einen Test ergänzt, ob das Ziel ("$DEST", bei mir ein externes eSATA-Laufwerk) vorhanden ist, und das Auswerfen der externen Platte nach Abschluss des Backup hinzugefügt (für Netzwerksicherungen muss man das 'rauslöschen bzw. durch etwas Passendes ersetzen). Deshalb hier nochmal ein Update:

Rich (BBCode):
#!/bin/sh

export CHMOD="/bin/chmod"
export CHOWN="/bin/chown"
export DATE="/bin/date"
export ECHO="/bin/echo"
export RSYNC="/usr/syno/bin/rsync"
export TEE="/usr/bin/tee"
export UMOUNT="/bin/umount"

export LOG="/volume1/net/backup/PC/bin/rsync-Backup.log"
export SOURCE="/volume1"
export DEST="/volumeSATA/satashare"

if [ -d $DEST/'$RECYCLE.BIN' ]; then
  $ECHO "Start des rsync-Laufs Backup" 2>&1 | $TEE $LOG

  $ECHO "-----" 2>&1 | $TEE -a $LOG
  $DATE 2>&1 | $TEE -a $LOG
  $ECHO "Bilder" 2>&1 | $TEE -a $LOG
  $RSYNC -avh --delete $SOURCE/bilder/ $DEST/bilder 2>&1 | $TEE -a $LOG
  $ECHO "-----" 2>&1 | $TEE -a $LOG
  $DATE 2>&1 | $TEE -a $LOG
  $ECHO "Audio" 2>&1 | $TEE -a $LOG
  $RSYNC -avh --delete $SOURCE/audio/ $DEST/audio 2>&1 | $TEE -a $LOG
  $ECHO "-----" 2>&1 | $TEE -a $LOG
  $DATE 2>&1 | $TEE -a $LOG
  $ECHO "Netz" 2>&1 | $TEE -a $LOG
  $RSYNC -avh --delete $SOURCE/net/ $DEST/netz 2>&1 | $TEE -a $LOG
  $ECHO "-----" 2>&1 | $TEE -a $LOG
  $DATE 2>&1 | $TEE -a $LOG
  $ECHO "TV" 2>&1 | $TEE -a $LOG
  $RSYNC -avh --delete $SOURCE/tv/ $DEST/tv 2>&1 | $TEE -a $LOG

  $ECHO "-----" 2>&1 | $TEE -a $LOG
  $DATE 2>&1 | $TEE -a $LOG
  $ECHO "Ende des rsync-Laufs Backup" 2>&1 | $TEE -a $LOG

  $CHOWN user:group $LOG
  $CHMOD 644 $LOG

  # eSATA Platte unmounten und auswerfen
  $UMOUNT /dev/sdc1
  $ECHO 1 > /sys/block/sdc/device/delete
else
  $ECHO "eSATA unavailable"
fi

Dann noch ein Beispieloutput:

Rich (BBCode):
Start des rsync-Laufs Backup
-----
Thr Jun 26 23:49:01 CEST 2014
Bilder
sending incremental file list
2013/
2013/tmp/
deleting 2013/tmp/2731.JPG
deleting 2013/tmp/
2013/neu/
2013/neu/2731.JPG

sent 1.21M bytes  received 1.56K bytes  15.81K bytes/sec
total size is 384.25G  speedup is 317600.51
-----
Thr Jun 26 23:50:18 CEST 2014
Audio
sending incremental file list

sent 309.06K bytes  received 960 bytes  32.63K bytes/sec
total size is 36.54G  speedup is 117851.43
-----
Thr Jun 26 23:50:27 CEST 2014
Netz
sending incremental file list

sent 273.36K bytes  received 939 bytes  16.62K bytes/sec
total size is 37.19G  speedup is 135586.34
-----
Thr Jun 26 23:50:43 CEST 2014
TV
sending incremental file list

sent 69.80K bytes  received 72 bytes  15.53K bytes/sec
total size is 875.55G  speedup is 12531431.62
-----
Thr Jun 26 23:50:47 CEST 2014
Ende des rsync-Laufs Backup

Edit: Ein allgemeiner Hinweis noch: Meine externe Platte ist NTFS-formatiert, so dass ich die Linux-Eigentümer und -Rechte nicht abbilden kann. Dafür verwende ich andere rsync Optionen (-rltvh statt -avh).
 
Zuletzt bearbeitet:

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
Super genial, vielen Dank für Deine Bemühungen und Erläuterungen.

Was mir jetzt noch fehlt ist die Möglichkeit, den Inhalt der LOG-Datei so erstellen zu lassen, dass im LOG nur die geänderten Dateien / Ordner auftauchen ? So wie es bei mir jetzt läuft werden alle Verzeichnisse aufgelistet, auch wenn es gar keine Änderung an / in dem Verzeichnis gab. Daher hab ich eine Unmenge an Angaben im LOG stehen, die das ganze sehr unübersichtlich machen.

Wenn da nur Verzeichnisse und Dateien stehen würden, die geändert wurden, dann wäre es TOP.

Wie machst Du das, wenn Das Skript bei Dir läuft. Hast Du dazu evtl. einen Tipp für mich, der mich der Lösung ein wenig näher bringt ?

Viele Grüße und nochmals danke für Deine Hilfe
Fraubi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.158
Punkte
754
Genau das Verhalten hatte ich bei der Sicherung auf meine externe NTFS-Platte mit den Optionen -avh auch. Könnte aber auch bei einer Netzsicherung ein Problem sein. Probiere bitte einmal die alternativen rsync-Optionen -rltvh statt -avh. Das sollte das Problem lösen.
 

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
Da meine Sicherung von einer NAS auf eine andere läuft (also eine Netzwerksicherung) erhalten ich immer nur eine LOG-Datei, in der alles drin steht. Eine Reduzierung der angezeigten Ordner / Dateien dahingehend, dass nur die Änderungen angezeigt werden, konnte ich leider trotz diversen Versuchen nicht hinbekommen.

Viele Grüße
Fraubi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.158
Punkte
754
Das liegt nicht an der Logdatei, es wird schlichtweg alles gesichert. Da ist noch irgendetwas, was dafür sorgt, dass rsync bei allen Dateien davon ausgeht, dass sie sich verändert haben. Ich hatte das bei mir wg. der beschriebenen NTFS-Problematik nur bei den Verzeichnissen. In Deinem anderen Thread findet sich ein rsync-Aufruf. Verwendest Du den? Wenn ja, dann könnte es an der Option -a liegen. Möglicherweise müssen in dem Fall die Eigentümer und Gruppen auf beiden Maschinen gleich sein - eventuell sogar nicht nur ihre Namen sondern die UID und die GID. Ich habe bisher immer ein anderes Verfahren verwendet, nämlich nicht auf einen rsync-Server zu sichern, sondern Netzlaufwerke zu mounten und rsync lokal laufen zu lassen. Könnte eine Alternative sein, die Du nochmal ausprobieren könntest. Und noch ein Ansatz: Du könntest es mit --modify-window=2 probieren, wobei die 2 nur der Wert ist, mit dem ich gute Erfahrungen gemacht habe.
 

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
Wenn ich mir den Ablauf meines Skriptes über Putty anschaue, dann geht das Skript nur die einzelnen Verzeichnisse durch, kopiert aber keine Dateien / Ordner. Nur wenn wirklich eine geänderte Datei / Ordner dabei ist, dann wird das beim RSYNC kopiert. Das sehe ich dann auch in Putty.

Der RSYNC-Parameter -a ist seit DSM5 wohl mir Vorsicht zu geniessen. Ab DSM5 läuft es ja alles mit ACL, so dass ich als aktuelle Parameter

rsync -av --syno-acl

verwende. --syno-acl soll die Berechtigungen der Quelle mit übernehmen (so hab ich das verstanden)

Wenn Du mit RSYNC lokal laufen meinst, dass ich es über den PC mit gemounteten Netzlaufwerken laufen lassen soll, so ist das bei mir keine Alternative. Ich lasse mittels Aufgabenplaner nachts meine DS3612 auf die DS713 sichern. Wenn der Sync läuft, dann schlafe ich :cool: und der PC ist aus.

Was genau macht --modify-window=2 ?

Viele Grüße
Fraubi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.158
Punkte
754
Nein, das meine ich nicht mit "lokal laufen lassen". Damit meine ich, dass Du auf einer der beiden DS (bevorzugt auf der leistungsstärkeren, also der 3612) die Laufwerke der anderen DS mountest und dann dort rsync insofern lokal laufen lässt, als auf dieser einen DS die Synchronisation abläuft. Die zweite DS ist nicht als rsync-Server beteiligt sondern liefert die Daten lediglich über Samba aus. "--modify-window" sorgt dafür, dass die Daten auch dann als gleich akzeptiert werden, wenn die mtime-Timestamps nicht ganz identisch sind. Wird das Fenster z.B. auf 2 gesetzt, bedeutet dies, dass eine Abweichung bis zu zwei Sekunden akzeptiert wird.

Hast Du denn einmal mit rsync -rltvh statt rsync -avh getestet?
 

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
Ok, das klingt logisch und würde wohl auch Sinn machen.

Kannst Du mir kurz nen Tipp geben, wie ich die Laufwerke mounte ? Bin nicht so der Profi und suche mir daher alles so stückchenweise zusammen...

Danke für Deine Hilfe
Fraubi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.158
Punkte
754
Eine Möglichkeit könnte sein, die Verzechnisse in der FileStation als Remote-Ordner zu mounten. Habe ich aber noch nicht gemacht. Alternative wäre, die Laufwerke im Skript direkt zu mounten:

Rich (BBCode):
/bin/mount -t cifs -o vers=2.0,username=otto,password=geheim //192.168.1.100/Tausch /mnt/austausch

Die Verzeichnisse unter /mnt, auf die Du die Netzlaufwerke mounten willst, musst Du vorher mit mkdir anlegen (hier im Beispiel also mkdir /mnt/austausch). Usernamen, Passwort, Host-IP und -Verzeichnisse musst Du natürlich ebenfalls anpassen.

Am Ende des Skripts nach Abschluss des Backups solltest Du die Netzlaufwerke dann wieder unmounten. Beispiel:

Rich (BBCode):
/bin/umount /mnt/austausch
 

fraubi

Benutzer
Mitglied seit
25. Nov 2011
Beiträge
605
Punkte für Reaktionen
0
Punkte
42
OK, danke erstmal für die Infos und Deine Hilfe. Damit muss ich mich erstmal ein wenig beschäftigen.

Viele Grüße
Fraubi
 
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