Używam rsync
skryptu 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 rsync
polecenia 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 rsync
procesów równolegle (z użyciem &
, xargs
albo parallel
), byłoby zaoszczędzić swój czas.
Próbowałem z poniższym poleceniem z parallel
(po cd
przejś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 rsync
procesów, aby skrócić czas wykonywania?
rsync
s jest naszym priorytetem.
rsync
równoległych jest teraz głównym celem.