Przyspiesz / unikaj obliczania list plików rsync

12

Używam rsync 3.1.1, aby zsynchronizować dwa dyski, z których jeden jest w sieci i jest zamontowany jako udział samby /mnt/ROUTER_WD_2TB/. Jest to źródło o prędkości 30–40 MB / s ze względu na ograniczenia sieci. Drugi, miejsce docelowe, jest montowany lokalnie (szczyt 110 MB / s) i jest /mnt/BACKUP_HITACHI_2TB/.

Używam następującego polecenia rsync:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Dyski zawierają wiele plików, w większości małych.

Problem polega na tym, że rsync zajmuje dość dużo czasu (10-20 m), zanim zacznie przenosić jakiekolwiek pliki, chyba dlatego, że musi obliczyć listy plików dla bardzo dużej liczby małych plików. W tym okresie wykorzystanie nowej pracy wynosi 200-500 KB / s, a podczas przesyłania plików prędkość wynosi około 40 MB / s.

Zwykle zdarza się, że rsync potrzebuje około 15 m, aby w końcu znaleźć coś do skopiowania, a następnie zajmuje 5 sekund, aby je skopiować, a następnie kontynuuje sprawdzanie innych plików do skopiowania przez kolejne 5 minut. Podsumowując, 5-sekundowa kopia pliku kończy się na 20 minut!

Czy mogę podjąć jakieś środki, aby uniknąć tego długiego okresu przed kopiowaniem plików, poza wykluczeniem folderów? Jakikolwiek „bufor”, który mogę wdrożyć, aby rsync nie musiał odbudowywać całej listy plików od zera?

AF7
źródło
1
Czy próbowałeś rozwiązania z tego wątku? unix.stackexchange.com/questions/189878/…
UVV
@UVV Nie zrobiłem tego. mogę to zrobić, jednak 1) rsync już nie wydaje się używać pełnego rdzenia w moim przypadku z jakiegoś powodu (= nie jestem pewien, czy jestem ograniczony procesorem lub czy ograniczenie leży gdzie indziej) i 2) To jest tylko na dwurdzeniowym procesorze, więc nawet gdyby poprawa była 2X, nadal istniałby duży margines poprawy.
AF7
Tak, to wydaje mi się szalone, dlaczego rsync jest w tym tak wolny? Nawet z „--size-only” rsync wydaje się, że tworzenie listy przyrostowych plików trwa wieczność. Dlaczego? Mogę ręcznie sprawdzić rozmiary plików i ustalić, które zmieniły się znacznie szybciej! Co marnuje tyle czasu i jak mogę wyłączyć te fantazyjne funkcje? EDYCJA: Ach, nieważne, przypadkowo ustawiłem flagę „c”. Bez sum kontrolnych jest to bardzo szybkie.
Ben Farmer

Odpowiedzi:

5

Jeśli chodzi rsynco ciebie, kopiujesz między dwoma lokalnymi drzewami plików, więc wyłącza większość jego optymalizacji (w tym algorytm delta, z którego jest znany). Jeśli możesz uruchomić rsyncna zdalnym serwerze (dzięki czemu uzyskasz prawdziwy scenariusz klient-serwer w całej sieci), zyskasz znaczną przyczepność.

Niemniej jednak istnieją inne opcje do rozważenia

  1. Kopiowanie bez obawy o usunięcie starych plików. Może to pozwolić na częstsze wykonywanie szybszego transferu i spowolnienie wolniejszego czyszczenia, mówiąc tylko raz dziennie:

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. Użyj odmiany rsyncdomyślnego algorytmu usuwania, aby uniknąć tworzenia pełnej listy plików przed przesłaniem:

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. Podziel katalogi najwyższego poziomu na osobne zadania i uruchom je równolegle. Może się okazać, że jeśli jesteś związany dyskowym We / Wy, to to naprawdę nie pomoże, a dla obracających się talerzy prawie na pewno pogorszy to sytuację.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

Jeśli żadna z tych sugestii pomaga wówczas warto byłoby dodanie innego --verbosecelu rsync, aby zobaczyć, co robi. Podejrzewam, że grzechotają wszystkie niezmienione pliki, a jeśli masz wystarczająco dużo plików, zajmuje to dużo czasu.

roaima
źródło
--delete --delete-duringnie zrobiłem tego dla mnie - nadal wysłałem przyrostową listę plików - ale od --delete --delete-beforerazu przeszedłem do:, building file listco wydaje się dużym postępem. Myślę.
mlissner,
Nie, obawiam się, że to wstecz. Jeśli używasz --delete-before, rsyncwykonuje dwa przejścia przez drzewo plików: jedno do usuwania, a drugie do kopiowania.
roaima,
Dzięki. W takim razie ... w jakikolwiek sposób, aby uniknąć budowania przyrostowej listy plików?
mlissner,
@mlissner zależy to od kilku różnych czynników. Zdecydowanie największe jest to, czy wykonujesz kopiowanie lokalne na lokalne, czy lokalne na zdalne.
roaima,
Dla mnie to wszystko od lokalnego do lokalnego, chociaż jeden z mieszkańców to dysk USB?
mlissner,
-2

możesz użyć, -vvaby zobaczyć cały dziennik rsync.

namaiiee
źródło
2
Jak to odpowiedzieć na pytanie, tj. Jak to przyspieszy?
Kusalananda
Można było zobaczyć dzienniki, co pokazuje, dlaczego uruchomienie rsync zajęło tyle czasu, być może istnieją pliki, które można pominąć od rsync, aby skrócić czas.
namaiiee