Krzysztof K.

Krzysztof K. Administrator
systemów IT i sieci
- otwarty na
propozycje...

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Witam

Mam problem z programem rsync pod windowsem.
Rsync przesyła cały plik zamiast przesłać wyłącznie zmiany jakie zaszły w pliku

"C:\Program Files (x86)\DeltaCopy"\rsync.exe -avu --progress --delete-after "/cygdrive/e/Backup" "/cygdrive/y"

Plik nie mały bo 130GB (dysk vhd backup serwera). Dodam, że nie ma wielkich zmian w obrazie dysku vhd bo serwer służy jako system narzędziowy (brak sql, serwera plików).

Czy jest możliwe, że rsync pod windowsem za dobrze nie działa?

Sprawdziłem na testowym pliku sql.7z, który jest spakowany (zawierał kilka plików). Wystarczy zmienić w archiwum nazwę jednego z tych plików spakowanych a rsync i tak prześle cały plik.

C:\Windows\system32>"X:\Programy\rsync"\rsync.exe -avu --progress --delete-after
"/cygdrive/e/Backup" "/cygdrive/y"
building file list ...
74739 files to consider
Backup/SQL/SQL-Dump/
Backup/SQL/SQL-Dump/sql 2012-05-08 16;30;56.7z
1058472598 100% 9.95MB/s 0:01:41 (xfer#1, to-check=62512/74739)

sent 1059779931 bytes received 36 bytes 8311999.74 bytes/sec
total size is 2669577011630 speedup is 2518.99

C:\Windows\system32>"X:\Programy\rsync"\rsync.exe -avu --stats --progress --dele
te-after "/cygdrive/e/Backup" "/cygdrive/y"
building file list ...
74739 files to consider

Number of files: 74739
Number of files transferred: 0
Total file size: 2669577011630 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 1178070
File list generation time: 12.074 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1178077
Total bytes received: 12

sent 1178077 bytes received 12 bytes 35166.84 bytes/sec
total size is 2669577011630 speedup is 2266023.21

C:\Windows\system32>"X:\Programy\rsync"\rsync.exe -avu --stats --progress --dele
te-after "/cygdrive/e/Backup" "/cygdrive/y"
building file list ...
74739 files to consider
Backup/SQL/SQL-Dump/
Backup/SQL/SQL-Dump/sql 2012-05-04 16;31;01.7z
528398462 100% 9.49MB/s 0:00:53 (xfer#1, to-check=62514/74739)

Number of files: 74739
Number of files transferred: 1
Total file size: 2669577011632 bytes
Total transferred file size: 528398462 bytes
Literal data: 528398462 bytes
Matched data: 0 bytes
File list size: 1178077
File list generation time: 10.265 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 529641094
Total bytes received: 36

sent 529641094 bytes received 36 bytes 7305394.90 bytes/sec
total size is 2669577011632 speedup is 5040.35

C:\Windows\system32>
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

a to rsync ma w ogole przesylac kawalki pliku? na jakiej podstawie mialby wykryc ktory fragment pliku zostal zmieniony i jak zmiane dolaczyc do pliku docelowego?
Krzysztof K.

Krzysztof K. Administrator
systemów IT i sieci
- otwarty na
propozycje...

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Łukasz C.:
a to rsync ma w ogole przesylac kawalki pliku? na jakiej podstawie mialby wykryc ktory fragment pliku zostal zmieniony i jak zmiane dolaczyc do pliku docelowego?
chodzi mi o przesyłanie wyłącznie różnic miedzy plikami a nie cały plik.
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Krzysztof R.:
chodzi mi o przesyłanie wyłącznie różnic miedzy plikami a nie cały plik.

Sam chciałbym mieć narzędzie które to realizuje, niestety z algorytmicznego punktu widzenia, musiałby to być program, który znajdzie tzw: najdłuższe wspolne podciągi a jest to czasochłonne (klasa O(n*m)), tym bardziej problem jeżeli ma się to dziać po sieci. Przykładowo masz plik foo.mkv który ma 10GB, i nadpiszesz jego treść, wtedy aby przesłać fragmenty trzeba najpierw znaleść w pliku orginalnym i docelowym te fragmenty które są wspolne i to własnie jest problemem. Nie wydaje mi się, abyś znalazł soft który to realizuje i działa podobnie do rsync.

konto usunięte

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Krzysztof R.:
...
chodzi mi o przesyłanie wyłącznie różnic miedzy plikami a nie cały plik.

Chodzi Tobie o przesłanie tej części pliku, która jest zmieniona/dopisna ?

konto usunięte

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Łukasz C.:
... wtedy aby przesłać fragmenty trzeba najpierw znaleść w pliku orginalnym i docelowym te fragmenty które są wspolne

By znaleźć (porównać) należy przesłać. Skoro już są przesłane to po co teraz szukać co się zmieniło ?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Robert B.:
By znaleźć (porównać) należy przesłać. Skoro już są przesłane to po co teraz szukać co się zmieniło ?
dokładnie :)

konto usunięte

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Robert B.:
Łukasz C.:
... wtedy aby przesłać fragmenty trzeba najpierw znaleść w pliku orginalnym i docelowym te fragmenty które są wspolne

By znaleźć (porównać) należy przesłać. Skoro już są przesłane to po co teraz szukać co się zmieniło ?

Przecież możesz policzyć checksumy np. dla 1MB bloków pliku, wysłać listę checksum (będzie to zdecydowanie mniej danych niż cały plik) i na drugim serwerze przeliczyć bloki tamtejszego pliku oraz sprawdzić czy wszystkie checksumy się zgadzają, jak nie dosyłasz zmienione bloki.
Dam sobie głowę urwać, że są do tego narzędzia, tyle że nie pamiętam jakie. Chociaż wydawało mi się, że rsync sam właśnie coś takiego potrafi zrobić.
Jak nie to mają na jednym serwerze plik przed zmianą i po (np. nowa i stara wersja czegoś dużego) to można użyć http://xdelta.org/, takich diff&patch ale dla plików binarnych.

konto usunięte

Temat: rsunc - przesyła cały plik zamiast częśc pliku, która się...

Łukasz M.:
Robert B.:
Łukasz C.:
... wtedy aby przesłać fragmenty trzeba najpierw znaleść w pliku orginalnym i docelowym te fragmenty które są wspolne

By znaleźć (porównać) należy przesłać. Skoro już są przesłane to po co teraz szukać co się zmieniło ?

Przecież możesz policzyć checksumy np. dla 1MB bloków pliku, wysłać listę checksum (będzie to zdecydowanie mniej danych niż cały plik) i na drugim serwerze przeliczyć bloki tamtejszego pliku oraz sprawdzić czy wszystkie checksumy się zgadzają, jak nie dosyłasz zmienione bloki.
Dam sobie głowę urwać, że są do tego narzędzia, tyle że nie pamiętam jakie. Chociaż wydawało mi się, że rsync sam właśnie coś takiego potrafi zrobić.
Oczywiście że tak, ograniczeniem jest local to local (wtedy nie potrafi). Deltra transfer tylko przez sieć.

Następna dyskusja:

Ktos tu się zna na RPC?




Wyślij zaproszenie do