Khi bạn gửi cùng một bộ tệp, rsync
phù hợp hơn vì nó sẽ chỉ gửi sự khác biệt. tar
sẽ luôn gửi mọi thứ và điều này thật lãng phí tài nguyên khi có rất nhiều dữ liệu. Các tar + rsync + untar
đánh mất lợi thế này trong trường hợp này, cũng như lợi thế của việc giữ các thư mục trong đồng bộ hóa với rsync --delete
.
Nếu bạn sao chép các tệp lần đầu tiên, lần đầu tiên đóng gói, sau đó gửi, sau đó giải nén (AFAIK rsync
không lấy đầu vào theo đường ống) thì cồng kềnh và luôn tệ hơn chỉ là rsyncing, vì dù sao rsync
cũng sẽ không phải thực hiện bất kỳ nhiệm vụ tar
nào.
Mẹo: rsync phiên bản 3 trở lên không có đệ quy gia tăng, nghĩa là nó bắt đầu sao chép gần như ngay lập tức trước khi đếm tất cả các tệp.
Mẹo2: Nếu bạn sử dụng rsync
hơn ssh
, bạn cũng có thể sử dụng một trong haitar+ssh
tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'
hoặc chỉ scp
scp -Cr srcdir user@server:destdir
Quy tắc chung, giữ cho nó đơn giản.
CẬP NHẬT:
Tôi đã tạo 59M dữ liệu demo
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
và đã thử nghiệm nhiều lần chuyển tập tin đến một máy chủ từ xa (không phải trong cùng một lan), sử dụng cả hai phương thức
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
trong khi giữ các bản ghi riêng biệt từ các gói lưu lượng ssh được gửi
wc -l rsync.log rsync+tar.log
36730 rsync.log
37962 rsync+tar.log
74692 total
Trong trường hợp này, tôi không thể thấy bất kỳ lợi thế nào trong lưu lượng mạng ít hơn bằng cách sử dụng rsync + tar, được dự kiến khi mtu mặc định là 1500 và trong khi các tệp có kích thước 10k. rsync + tar có lưu lượng truy cập được tạo nhiều hơn, chậm hơn trong 2-3 giây và để lại hai tệp rác phải được dọn sạch.
Tôi đã thực hiện các thử nghiệm tương tự trên hai máy trên cùng một lan và ở đó rsync + tar đã làm thời gian tốt hơn nhiều và lưu lượng mạng ít hơn nhiều. Tôi giả sử nguyên nhân của khung jumbo.
Có thể rsync + tar sẽ tốt hơn là chỉ rsync trên tập dữ liệu lớn hơn nhiều. Nhưng thật lòng mà nói tôi không nghĩ nó đáng để gặp rắc rối, bạn cần gấp đôi không gian ở mỗi bên để đóng gói và giải nén, và có một vài lựa chọn khác như tôi đã đề cập ở trên.