Używam rsyncskryptu do synchronizacji danych na jednym hoście z danymi na innym hoście. Dane zawierają wiele małych plików, które przyczyniają się do prawie 1,2 TB.
Aby zsynchronizować te pliki, użyłem rsyncpolecenia w następujący sposób:
rsync -avzm --stats --human-readable --include-from proj.lst /data/projects REMOTEHOST:/data/
Zawartość proj.lst jest następująca:
+ proj1
+ proj1/*
+ proj1/*/*
+ proj1/*/*/*.tar
+ proj1/*/*/*.pdf
+ proj2
+ proj2/*
+ proj2/*/*
+ proj2/*/*/*.tar
+ proj2/*/*/*.pdf
...
...
...
- *
Jako test wybrałem dwa z tych projektów (8,5 GB danych) i wykonałem powyższe polecenie. Jest to proces sekwencyjny, którego ukończenie zajmuje 14 minut 58 sekund. Tak więc dla 1,2 TB danych zajmie to kilka godzin.
Jeśli bym mógł wiele rsyncprocesów równolegle (z użyciem &, xargsalbo parallel), byłoby zaoszczędzić swój czas.
Próbowałem z poniższym poleceniem z parallel(po cdprzejściu do katalogu źródłowego) i wykonanie go zajęło 12 minut 37 sekund:
parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ ::: .
Powinno to zająć 5 razy mniej czasu, ale tak nie było. Myślę, że gdzieś się mylę.
Jak mogę uruchomić wiele rsyncprocesów, aby skrócić czas wykonywania?
rsyncs jest naszym priorytetem.
rsyncrównoległych jest teraz głównym celem.