Gdy wysyłasz ten sam zestaw plików, rsync
lepiej nadaje się, ponieważ będzie wysyłał tylko różnice. tar
zawsze wyśle wszystko, a to jest marnotrawstwo zasobów, gdy wiele danych już tam jest. tar + rsync + untar
Traci tę zaletę, w tym przypadku, jak również tę zaletę, utrzymując foldery w synchronizacji z rsync --delete
.
Jeśli skopiujesz pliki po raz pierwszy, najpierw spakujesz, a następnie wyślesz, a następnie rozpakowanie (AFAIK rsync
nie pobiera danych z potoku) jest uciążliwe i zawsze gorsze niż tylko rsynchronizacja, ponieważ i rsync
tak nie będziesz musiał wykonywać żadnych zadań tar
.
Wskazówka: rsync w wersji 3 lub nowszej wykonuje przyrostową rekurencję, co oznacza, że kopiowanie rozpoczyna się niemal natychmiast przed zliczeniem wszystkich plików.
Wskazówka 2: Jeśli użyjesz rsync
więcej ssh
, możesz również użyć jednego z nichtar+ssh
tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'
Lub tylko scp
scp -Cr srcdir user@server:destdir
Ogólna zasada, nie krępuj się.
AKTUALIZACJA:
Stworzyłem 59M danych demo
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
i kilkakrotnie przetestowałem transfer plików na zdalny serwer (nie w tym samym LAN), używając obu metod
time rsync -r tmp server:tmp2
real 0m11.520s
user 0m0.940s
sys 0m0.472s
time (tar cf demo.tar tmp; rsync demo.tar server: ; ssh server 'tar xf demo.tar; rm demo.tar'; rm demo.tar)
real 0m15.026s
user 0m0.944s
sys 0m0.700s
zachowując osobne dzienniki od wysłanych pakietów ruchu ssh
wc -l rsync.log rsync+tar.log
36730 rsync.log
37962 rsync+tar.log
74692 total
W tym przypadku nie widzę żadnej korzyści w mniejszym ruchu w sieci przy użyciu rsync + tar, co jest oczekiwane, gdy domyślnym mtu jest 1500, a pliki mają rozmiar 10k. rsync + tar wygenerował większy ruch, działał wolniej przez 2-3 sekundy i pozostawił dwa pliki śmieci, które należało wyczyścić.
Zrobiłem te same testy na dwóch komputerach na tym samym LANie i tam rsync + tar wykonał znacznie lepsze czasy i znacznie mniejszy ruch sieciowy. Zakładam, że przyczyną są duże ramki.
Może rsync + tar byłoby lepsze niż rsync na znacznie większym zestawie danych. Ale szczerze mówiąc, nie sądzę, żeby to było warte kłopotu, potrzebujesz podwójnej przestrzeni z każdej strony do pakowania i rozpakowywania, a istnieje kilka innych opcji, jak już wspomniałem powyżej.