Làm thế nào để tăng tốc rsync?


44

Tôi đang chạy rsync để đồng bộ thư mục vào ổ cứng USB ngoài. Đó là khoảng 150 hợp đồng dữ liệu. Hơn 50000 tập tin tôi sẽ đoán.

Nó đang chạy đồng bộ hóa đầu tiên tại thời điểm này, nhưng các tệp sao chép của nó ở tốc độ chỉ 1-5 MB / s. Điều đó dường như cực kỳ chậm đối với vỏ USB 2.0. Không có chuyển khoản khác xảy ra trên ổ đĩa.

Dưới đây là các tùy chọn tôi đã sử dụng:

rsync -avz --progress /mysourcefolder /mytargetfolder

Tôi đang chạy Ubuntu Server 9.10.


2
bạn có chắc là bạn đang nhận được kết nối USB2 không? một bản sao (không phải rsync) hoặc hoạt động ghi khác chạy ở tốc độ bình thường? nếu không, bạn đã thử sao chép / ghi khác với cổng / cáp USB khác chưa?
quack quixote

Xem thêm serverfault.com/questions/43014/ cấp - ở đó mọi người cũng đề xuất sử dụng hai tarlệnh đường ống hoặc cpio.
Blaisorblade

Câu trả lời:


38

Để đồng bộ hóa đầu tiên, chỉ cần sử dụng

cp -a  /mysourcefolder /mytargetfolder

rsync chỉ thêm chi phí khi đích đến trống.

Ngoài ra .. tùy chọn -z có thể sẽ giết chết hiệu suất của bạn, bạn không nên sử dụng nó nếu bạn không truyền dữ liệu qua một liên kết chậm.


3
rsync được gọi như vậy vì nó để đồng bộ hóa từ xa và không thực sự phù hợp với âm lượng được kết nối cục bộ vì lý do này.
msanford

6
Nó cũng được cho là có thể sử dụng để chuyển địa phương, và nó linh hoạt hơn nhiều. Nó chỉ có thể là quá mức cần thiết cho đồng bộ hóa đầu tiên.
Blaisorblade

1
rsync cũng là đồng bộ một chiều. Rất tốt để sao lưu vào máy chủ hoặc từ máy chủ. Tuy nhiên, nếu bạn muốn đồng bộ hóa TWO-Way cục bộ vào một ổ đĩa di động, bạn có thể muốn kiểm tra csync csync.org/get-it đừng nhầm lẫn với csync2, một dự án hoàn toàn khác.
Jesse the Wind Wanderer

3
rsync -avz --progress /mysourcefolder/ /mytargetfolderhoặc bạn sẽ nhận được một bản sao mysourcefolderbên trong mytargetfolderthay vì phản chiếu nội dung
biên tập viên

2
Câu trả lời này không trả lời câu hỏi. Câu hỏi là về cách tối ưu hóa rsync - không thay thế nó bằng lệnh cp.
oemb1905

38

Nếu bạn đang sử dụng rsync với mạng nhanh hoặc đĩa vào đĩa trong cùng một máy,

không sử dụng nén -z

và sử dụng - tại chỗ

tăng tốc đến hiệu suất của ổ cứng hoặc mạng

nén sử dụng nhiều CPU

không sử dụng inplace làm cho ổ cứng cứng rất nhiều (nó sử dụng tệp tạm thời trước khi tạo bản cuối cùng)

nén và không sử dụng inplace sẽ tốt hơn khi thực hiện qua internet (mạng chậm)

MỚI: Lưu ý về đích đến ... nếu có tính năng "nén" NTFS ... điều này làm chậm nghiêm trọng các tệp lớn (tôi muốn nói là 200 MB +) rsync gần như bị đình trệ, nguyên nhân là do điều này.


Nén NTFS là chậm trên các tệp lớn
Scott Kramer

Tôi không thấy bất cứ điều gì về '--inline' trên trang người đàn ông
Anthony

1
Đó là '--inplace'
Scott Kramer

26

Sử dụng -Wtùy chọn. Điều này vô hiệu hóa so sánh delta / diff. Khi thời gian / kích thước tệp khác nhau, rsync sao chép toàn bộ tệp.

Cũng loại bỏ -ztùy chọn. Điều này chỉ hữu ích để nén lưu lượng mạng.

Bây giờ rsyncnên nhanh như cp.


6
Lưu ý nhỏ: -zchỉ hữu ích cho lưu lượng mạng tốc độ thấp . Nếu mạng của bạn đủ nhanh, nó sẽ làm mọi thứ chậm lại, vì bạn sẽ bị giới hạn bởi CPU.
WhyNotHugo

3
Những lời khuyên này đã thúc đẩy rất nhiều việc chuyển các tập tin của tôi giữa hai thiết bị NAS, cảm ơn!
djhworld

2
nhưng lưu ý rằng theo trang man nói -W: "Đây là mặc định khi cả nguồn và đích được chỉ định là đường dẫn cục bộ, nhưng chỉ khi không có tùy chọn viết theo lô có hiệu lực."
GuoLiang Oon

14

Đầu tiên - số lượng tệp trong trường hợp này sẽ là một yếu tố chính. Đó là kích thước trung bình 3 MB mỗi cái. Có lẽ có một nút cổ chai io ảnh hưởng đến tốc độ trong trường hợp của OP. Thêm ở đây - đó là một đọc khá khô, nhưng ảnh bìa là giá trị nó.

Vì vậy, sử dụng rsync để sao chép vào một thư mục trống? Dưới đây là một số cách để tăng tốc nó:

  1. Không -z - chắc chắn không sử dụng -z như trong OP.
  2. --no-nén có thể tăng tốc bạn lên. Điều này có thể có tác động lớn nhất ... thử nghiệm của tôi là 13.000 tệp, tổng kích thước 200 MB và sử dụng rsync 3.1.3. Tôi đã đồng bộ hóa với một phân vùng khác trên cùng ổ SSD. Với --no-nén, tôi nhận được 18 MBps và không có nó tôi nhận được 15 MBps. Nhân tiện, cp, được 16 MBps. Đó là một kích thước tập tin trung bình nhỏ hơn nhiều mặc dù. Ngoài ra - Tôi không thể tìm thấy bất kỳ tài liệu nào cho --no-nén. Tôi đã tìm hiểu về nó từ bài đăng này trên stackexchange.com.
  3. -W để sao chép toàn bộ tập tin - luôn sử dụng điều này nếu bạn không muốn nó so sánh sự khác biệt; đừng bận tâm rằng quan điểm của rsync là so sánh sự khác biệt và chỉ cập nhật các thay đổi.
  4. -S để xử lý tốt các tệp thưa thớt - không thể làm tổn thương nếu bạn không có các tệp thưa.
  5. --exclude-from hoặc một cái gì đó tương tự để loại trừ các tệp bạn có thể không cần sẽ giảm thời gian, nhưng nó sẽ không làm tăng tốc độ truyền của bạn.
  6. thể nếu bạn gửi đầu ra tới một tệp như thế này rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err- đầu tiên> về cơ bản sẽ in một tệp với tất cả nội dung bạn thường thấy và 2> đề cập đến các thông báo lỗi.
  7. Cuối cùng, việc chạy nhiều phiên bản rsync cho các phần khác nhau trong chuyển khoản của bạn có thể là một trợ giúp lớn.

Lệnh của tôi sẽ là:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

Nếu tất cả đều ổn, tôi sẽ xóa "--dry-run" và để nó đi. A, X và E bao gồm các thuộc tính và quyền mở rộng không được bao phủ bởi -a, l dành cho liên kết mềm, H dành cho liên kết cứng và h dành cho người có thể đọc được.

Cập nhật thư mục đã được đồng bộ hóa trên ổ USB hoặc cùng ổ đĩa hoặc qua mạng, tất cả sẽ yêu cầu các lệnh rsync khác nhau để tối đa hóa tốc độ truyền.

Phần thưởng - đây là trang man rsync và nếu bạn muốn kiểm tra tốc độ ổ cứng của mình, bonnie ++ là một lựa chọn tốt và với tốc độ mạng của bạn, hãy thử iperf .


* Bài viết đã gần mười năm tuổi, nhưng các công cụ tìm kiếm chắc chắn thích nó, và tôi tiếp tục nhìn thấy nó. Đó là một câu hỏi hay và tôi không nghĩ câu trả lời hàng đầu cho "cách tăng tốc rsync" nên là "sử dụng cp thay thế".


1
Đối với mục 7) Tôi có thể cải thiện hiệu năng nhiều hơn bằng cách sử dụng ổ cứng truyền thống làm nguồn, bằng cách mở rộng bộ đệm đọc trước bằng cách sử dụng "blockdev --setra 8192 / dev / sdX". Vì vậy, tôi có ý định giảm đầu tìm kiếm.
user2480144

2

Bạn không nói kích thước phân phối tệp của bạn có. Nếu có nhiều tệp nhỏ thì điều này sẽ làm giảm tốc độ truyền tổng thể bằng cách tăng độ trễ chuyển động đầu trong cả ổ đĩa nguồn và đích khi công cụ mở tệp mới và HĐH giữ các mục nhập thư mục và siêu dữ liệu khác (như nhật ký của hệ thống tệp nếu bạn đang sử dụng ghi nhật ký siêu dữ liệu như ext3 / ext4 và NTFS theo mặc định) được cập nhật trong quá trình chuyển. Một bản sao tập tin sẽ chỉ "đi vào bước tiến của nó" cho các đối tượng lớn hơn, khi việc chuyển số lượng lớn đơn giản đang diễn ra.


0

Bạn chắc chắn muốn thử rclone . Điều này thật điên rồ:

$ cây / usr [...] 26105 thư mục, 293208 tệp

$ sudo rclone sync / usr / home / fred / temp -P -L --translike 64

Đã chuyển: 17.929G / 17.929 GB, 100%, 165.692 MB / giây, Lỗi ETA 0s: 75 (thử lại có thể giúp) Kiểm tra: 691078/691078, Đã chuyển 100%: 345539/345539, 100% Thời gian đã trôi qua: 1m50.8

Đây là bản sao cục bộ từ và sang SSD LITEONIT LCS-256 (256GB).

Bạn có thể thêm --ignore-checksum trong lần chạy đầu tiên để làm cho nó nhanh hơn nữa.


0

Tránh

  • -z/ --compress: nén sẽ chỉ tải lên CPU vì quá trình truyền không qua mạng mà qua RAM.
  • --append-verify: tiếp tục chuyển khoản bị gián đoạn. Điều này nghe có vẻ là một ý tưởng tốt, nhưng nó có trường hợp thất bại nguy hiểm: bất kỳ tệp đích nào có cùng kích thước (hoặc lớn hơn) so với nguồn sẽ được IGNORED. Ngoài ra, nó kiểm tra toàn bộ tập tin ở cuối, có nghĩa là không tăng tốc đáng kể --no-whole-filetrong khi thêm trường hợp thất bại nguy hiểm.

Sử dụng

  • -S/ --sparse: biến chuỗi null thành các khối thưa thớt
  • --partialhoặc -Pđó là --partial --progress: lưu bất kỳ tập tin được chuyển một phần nào để tiếp tục trong tương lai. Lưu ý: các tệp sẽ không có tên tạm thời, vì vậy hãy đảm bảo rằng không có gì khác mong đợi sử dụng đích cho đến khi toàn bộ bản sao hoàn thành.
  • --no-whole-fileđể bất cứ điều gì cần phải bực bội đều sử dụng chuyển delta. Đọc một nửa tệp được chuyển một phần thường nhanh hơn nhiều so với viết lại.
  • --inplace để tránh sao chép tệp (nhưng chỉ khi không có gì đang đọc đích cho đến khi toàn bộ quá trình chuyển hoàn thành)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.