Wie genau entscheidet rsync, was synchronisiert werden soll?

13

Ich habe mehrere Antworten auf die Frage gefunden, also wollte ich die Leute fragen, die sie tatsächlich verwenden, anstatt einfach nur den größten Blog erstellen zu wollen, indem sie sich mit zufälligen semi-nutzlosen Informationen ausfüllen.

Szenario: Ich rsync -av --progress /dir/a /dir/b und es tut sein Ding.

Ich füge neue Dateien zu / dir / a hinzu und führe denselben Befehl erneut aus. Er weiß, was er getan hat, und kopiert nur die neuen Dateien.

Ich füge neue Dateien zu / dir / a hinzu und benenne einige Dateien in / dir / b um. Vielleicht lösche ich auch ein paar.

Wenn ich rsync -av --progress /dir/a /dir/b erneut starte, was wird kopiert? Nur die neuen Dateien, weil sie wissen, was zuvor kopiert wurde, oder die Dateien, die umbenannt oder gelöscht wurden, weil sie nicht mehr vorhanden sind.

Und als Bonus, wenn die zuvor kopierten Dateien erneut kopiert werden, gibt es eine Möglichkeit, dies zu verhindern, sodass nur neue Ergänzungen in / dir / a kopiert werden?

Im Moment bin ich glücklich, die Dinge manuell zu überprüfen, aber wenn die Daten größer werden, brauche ich mehr Automatisierung, um diese Aufgabe auszuführen.

    
SPooKYiNeSS 29.10.2017, 14:59
quelle

3 Antworten

17
  

Ich füge neue Dateien zu / dir / a hinzu und führe denselben Befehl erneut aus. Er weiß, was er getan hat, und kopiert nur die neuen Dateien.

Nein, es weiß nicht, was es in einem vorherigen Lauf getan hat. Er vergleicht die Daten auf der Empfängerseite mit den zu sendenden Daten. Bei ausreichend kleinen Daten ist dies nicht offensichtlich, aber wenn Sie über genügend Verzeichnisse verfügen, ist die Zeit, die Sie vergleichen müssen, bevor der Kopiervorgang tatsächlich beginnt, leicht zu spüren.

Die Standardüberprüfung betrifft die Änderungszeiten und -größen der Dateien. Über man rsync :

-c, --checksum
      This changes the way rsync checks if the files have been changed
      and  are in need of a transfer.  Without this option, rsync uses
      a "quick check" that (by default) checks if each file’s size and
      time of last modification match between the sender and receiver.
      This option changes this to compare a 128-bit checksum for  each
      file  that  has a matching size.  Generating the checksums means
      that both sides will expend a lot of disk I/O  reading  all  the
      data  in  the  files  in  the transfer (and this is prior to any
      reading that will be done to transfer changed  files),  so  this
      can slow things down significantly.

Und:

-u, --update
      This  forces  rsync  to  skip  any  files  which  exist  on  the
      destination  and  have  a  modified  time that is newer than the
      source  file.   (If  an  existing   destination   file   has   a
      modification time equal to the source file’s, it will be updated
      if the sizes are different.)

Beachten Sie, dass diese Optionen nicht von den verwendeten Optionen impliziert werden. -a lautet:

-a, --archive               archive mode; same as -rlptgoD (no -H)
-r, --recursive             recurse into directories
-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
    --devices               preserve device files (super-user only)
    --specials              preserve special files
-D                          same as --devices --specials
-t, --times                 preserve times
    
muru 29.10.2017, 15:40
quelle
4

Allgemeines

Wenn ich es richtig verstanden habe, hat rsync -av keinen Speicherplatz. Daher werden auch die umbenannten / gelöschten Dateien kopiert, da sie in der Quelle vorhanden sind, im Ziel jedoch nicht mehr vorhanden sind.

Tipps

  • Verwenden Sie die Option -n , 'dry run', um zu prüfen, was passiert, bevor Sie die Befehlszeile von rsync ausführen.

  • Beachten Sie die besondere Bedeutung eines abschließenden Schrägstrichs nach dem Quellverzeichnis und den Unterschied zwischen

    rsync -av --progress dir/a/ dir/b
    

    und

    rsync -av --progress dir/a dir/b
    

    was im Handbuch man rsync beschrieben wird.

Beispiel

Ihr Spezialfall (Hinzufügen einer Datei zum Quellverzeichnis 'a' und Entfernen einer Datei aus dem Zielverzeichnis 'b') fügt sowohl die hinzugefügte Datei als auch die zuvor kopierte Datei hinzu, da sich diese noch im Quellverzeichnis befindet. Dies geschieht sowohl mit als auch ohne die Option -u und ich kenne keine Option in rsync , um das Problem zu beheben, wenn Sie es im Quellverzeichnis behalten möchten.

Sie können es jedoch aus dem Quellverzeichnis entfernen oder den Dateinamen in die Datei excluded einfügen und die Option --exclude-from=excluded (für viele Dateien) oder einfach --exclude=PATTERN für eine oder einige Dateien verwenden.

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2

sent 103 bytes  received 25 bytes  256.00 bytes/sec
total size is 13  speedup is 0.10 (DRY RUN)

$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
              6 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
file-2
              7 100%    6.84kB/s    0:00:00 (xfr#2, to-chk=0/3)

sent 196 bytes  received 57 bytes  506.00 bytes/sec
total size is 13  speedup is 0.05

$ echo textx-3>./dir/a/file-3

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 121 bytes  received 22 bytes  286.00 bytes/sec
total size is 21  speedup is 0.15 (DRY RUN)

$ rm dir/b/file-1 
rm: ta bort normal fil 'dir/b/file-1'? y

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 104 bytes  received 22 bytes  252.00 bytes/sec
total size is 15  speedup is 0.12 (DRY RUN)

Alternative: unison

Möglicherweise möchten Sie das Tool unison testen. Hierbei handelt es sich um ein Synchronisierungswerkzeug . Es bietet eine visuelle Methode, um Sonderfälle zu identifizieren und zu entscheiden, was zu tun ist. Es gibt eine GUI-Version ( unison-gtk ).

    
sudodus 29.10.2017 15:57
quelle
1

Es kopiert nur die neuen Dateien in / dir / a. Alles, was Sie in / dir / b tun, wird ignoriert, es sei denn, Sie verwenden die Option --delete. In diesem Fall werden umbenannte Dateien in / dir / b gelöscht. Es wird erzwingen, dass / dir / b genau wie / dir / a wird.

Meinen Sie den Bonus, wenn Sie Dateien in / dir / a umbenennen und dann nach / dir / b rsyncing? Ich glaube nicht, dass es eine Möglichkeit gibt, zu verhindern, dass rsync die Dateien in diesem Fall erneut kopiert.

    
Hermann Ingjaldsson 29.10.2017 15:24
quelle

Tags und Links