Jak przyspieszyć rsync dla małych plików

15

Próbuję przenieść tysiące małych plików z jednego serwera na drugi za pomocą następującego polecenia:

rsync -zr --delete /home/user/ [email protected]::backup

Obecnie transfer zajmuje dużo czasu (nie miałem tego czasu). Czy istnieje sposób, aby to przyspieszyć? Czy powinienem używać innego narzędzia? Czy powinienem używać rsync zamiast ssh zamiast protokołu rsync?

Makaron
źródło
Czy to naprawdę tylko setki? Jak za mniej niż kilka tysięcy?
Zoredache
Kilka więcej ... 475 576 o łącznej wartości 9,3 GB
makaron
To będzie do bani przy użyciu prawie dowolnego narzędzia, które działa na poziomie systemu plików. Podejrzewam, że jeśli zrobiłeś jakieś profilowanie, zobaczyłbyś, że spędzanie znacznej ilości czasu na telefonowaniu stat().
Zoredache
Dlaczego nie -aale -r?
kamae

Odpowiedzi:

13

Musisz określić wąskie gardło. To nie jest rsync. Prawdopodobnie nie jest to przepustowość sieci. Jak sugerował @Zoredache , najprawdopodobniej jest to ogromna liczba IOP generowanych przez wszystkie stat()połączenia. Każde narzędzie do synchronizacji będzie musiało statystyki plików. Podczas synchronizacji uruchom, iostataby zweryfikować.

Tak więc powstaje pytanie; jak zoptymalizować statystyki? Dwie proste odpowiedzi:

  1. uzyskać szybszy podsystem dyskowy (w razie potrzeby na obu hostach) i
  2. dostrój swój system plików (np. dla zamontowania ext3 noatimei dodaj a dir_index).

Jeśli przez przypadek nie jest to limit na dysku, to możesz eksperymentować z podzieleniem drzewa katalogów na wiele różnych drzew i uruchomić wiele rsync.

Mark Wagner
źródło
1
Dzięki, zajrzę do dir_index i zobaczę, jak sobie radzę (już używamy noatime). Wygląda na to, że dyskiem io jest wąskie gardło, ale już obsługujemy 15k dysków SAS w RAID 5. Kolejnym krokiem będzie SSD, ale nasza firma hostingowa nie daje nam jeszcze takiej możliwości.
Makaron
5

Kompresja nie jest bardzo przydatna w przypadku małych plików (powiedzmy mniej niż 100 bajtów). W przypadku małych plików czasami skompresowana wersja może być nawet większa niż oryginał. Spróbuj wykonać rsyncpolecenie bez-z flagi.

sshjest dobre dla bezpieczeństwa, ale nie przyspieszy transferu. W rzeczywistości spowodowałoby to spowolnienie transferu ze względu na potrzebę szyfrowania / deszyfrowania.

rsyncmoże nie wydawać się szybki przy pierwszym uruchomieniu, ponieważ jest dużo danych do przesłania. Jeśli jednak planujesz uruchamiać to polecenie okresowo, kolejne uruchomienia mogą być znacznie szybsze, ponieważ rsyncrozsądnie jest nie przesyłać plików, które nie uległy zmianie.

unutbu
źródło
Jeśli tylko użyjesz rsyncklienta, użyje on SSH za kulisami. Musisz zrobić wszystko, aby wyłączyć szyfrowanie podczas korzystania z rsync. Zobacz: stackoverflow.com/a/1821574/64911
mlissner
1

Jakiej wersji rsync używasz? Wszystko starsze niż 3.0.0 (na obu końcach) nie ma funkcji przyrostowej listy plików, która przyspiesza duże transfery.

devicenull
źródło
Używanie rsync 3.0.5 na obu serwerach.
Makaron
1

Dodaj -v --progress do wiersza polecenia rsync

rsync odbywa się w 2 krokach:

  1. głęboko przeglądaj wszystkie pliki na obu platformach, aby porównać ich rozmiar i datę
  2. wykonaj faktyczny transfer

Jeśli rsync ma tysiące małych plików w zagnieżdżonych katalogach, może być tak, że rsync spędza większość czasu na przechodzeniu do podkatalogów i znajdowaniu wszystkich plików

Jeśli czas nie zostanie poświęcony na przeglądanie, może to wynikać z dodania wszystkich opóźnień rozpoczynających każdy nowy transfer plików.

Alex F.
źródło
1

W przypadku systemów plików ext3 lub ext4 sprawdź, czy oba mają włączoną funkcję dir_index ! W moim przypadku potroiła się przepustowość rsync.

Zobacz szczegóły w mojej odpowiedzi na stronie : /server//a/759421/80414

alfonx
źródło