Ich habe eine große Datei (2-3 GB, binäres, undokumentiertes Format), die ich auf zwei verschiedenen Computern verwende (normalerweise verwende ich sie auf einem Desktop-System, aber auf Reisen lege ich sie auf meinen Laptop). Ich benutze rsync, um diese Datei hin und her zu übertragen.
Ich mache von Zeit zu Zeit kleine Aktualisierungen an dieser Datei und ändere weniger als 100 kB. Dies geschieht auf beiden Systemen.
Das Problem mit rsync ist meines Wissens, dass, wenn es glaubt, dass sich eine Datei zwischen Quelle und Ziel geändert hat, die gesamte Datei übertragen wird. In meiner Situation fühlt es sich wie eine große Zeitverschwendung an, wenn sich nur ein kleiner Teil einer Datei ändert. Ich stelle mir ein Protokoll vor, bei dem die Übertragungsagenten auf Quelle und Ziel zuerst die gesamte Datei prüfen und dann das Ergebnis vergleichen. Wenn sie feststellen, dass die Prüfsumme für die gesamte Datei unterschiedlich ist, teilen sie die Datei in zwei Teile, A und B, auf und prüfen sie separat.
Aha, B ist auf beiden Maschinen identisch, ignorieren wir diese Hälfte. Jetzt teilt es A in A1 und A2. Ok, nur A2 hat sich geändert. Teilen Sie A2 in A2I und A2II auf und vergleichen Sie usw. Führen Sie dies rekursiv durch, bis z. B. drei Teile mit jeweils 1 MB gefunden wurden, die sich zwischen Quelle und Ziel unterscheiden. Übertragen Sie dann nur diese Teile und fügen Sie sie an der richtigen Position in die Zieldatei ein. Bei schnellen SSDs und Multicore-CPUs sollte eine solche Parallelisierung heute sehr effizient sein.
Meine Frage ist also, ob es heute Tools gibt, die so funktionieren (oder auf eine andere Art und Weise, die ich mir nicht vorstellen kann, aber mit einem ähnlichen Ergebnis).
Eine Bitte um Klarstellung wurde veröffentlicht. Ich benutze meistens Mac, daher ist das Dateisystem HFS +. Normalerweise starte ich rsync so
rsync -av --delete --progress --stats
- In diesen Fällen verwende ich manchmal SSH und manchmal rsyncd. Wenn ich rsyncd benutze, starte ich es so rsync --daemon --verbose --no-detach
.
Zweite Klarstellung: Ich frage entweder nach einem Tool, das nur das Delta für eine Datei überträgt, die an zwei Speicherorten mit kleinen Änderungen vorhanden ist, und / oder ob rsync dies wirklich bietet. Meine Erfahrung mit rsync ist, dass es die Dateien vollständig überträgt (aber jetzt gibt es eine Antwort, die dies erklärt: rsync benötigt einen rsync-Server, um nur die Deltas übertragen zu können, andernfalls (z. B. mit ssh-shell) überträgt es das Ganze Datei hat sich jedoch viel geändert).
rsync -av --delete --progress --stats
. Manchmal benutze ich einen Rsync-Server rsync --daemon --verbose --no-detach
. Das Ergebnis ist aber immer das gleiche.
rsync
ist , dass es nur die Teile findet, die sich geändert haben , und sendet sie nur.
rsync
Vielleicht ist dies das, was bereits getan wird, vielleicht ist dies die Antwort)