Tăng tốc / tránh tính toán danh sách tệp rsync


12

Tôi sử dụng rsync 3.1.1 để giữ đồng bộ hai đĩa, một trong số đó là trên mạng và được gắn dưới dạng chia sẻ samba trên /mnt/ROUTER_WD_2TB/. Đây là nguồn, với tốc độ tối đa 30-40MB / s do giới hạn mạng. Cái khác, đích đến, được gắn cục bộ (cao nhất 110MB / s) và là /mnt/BACKUP_HITACHI_2TB/.

Tôi sử dụng lệnh rsync sau:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Các đĩa chứa nhiều tệp, hầu hết đều nhỏ.

Vấn đề là rsync mất khá nhiều thời gian (10-20m) trước khi bắt đầu di chuyển bất kỳ tệp nào, tôi đoán vì nó phải tính toán danh sách tệp cho một số lượng rất lớn các tệp nhỏ. Trong giai đoạn này, việc sử dụng newtwork nằm ở mức thấp 200-500KB / giây, trong khi khi truyền tệp, tốc độ khoảng 40MB / s.

Thông thường, rsync mất khoảng 15m để cuối cùng tìm thấy thứ gì đó phải sao chép, sau đó mất 5 giây để sao chép, sau đó tiếp tục kiểm tra một số tệp khác để sao chép thêm 5 phút nữa. Nói chung, một bản sao tệp 5 giây kết thúc trong 20 phút!

Có biện pháp nào tôi có thể thực hiện để tránh khoảng thời gian dài này trước khi sao chép các tệp, ngoài việc loại trừ các thư mục không? Bất kỳ loại "bộ đệm" nào tôi có thể triển khai để rsync không phải xây dựng lại tất cả danh sách tệp từ đầu?


1
Bạn đã thử một giải pháp từ chủ đề này? unix.stackexchange.com/questions/189878/ từ
UVV

@UVV Mình chưa làm được điều đó. Tôi có thể làm điều đó, tuy nhiên 1) rsync dường như không sử dụng lõi đầy đủ trong trường hợp của tôi, vì một số lý do (= Tôi không chắc chắn nếu tôi bị hạn chế CPU hoặc nếu giới hạn nằm ở nơi khác) và 2) Đây chỉ là trên CPU lõi kép, do đó, ngay cả khi cải tiến là 2X, vẫn sẽ có một biên độ lớn để cải thiện.
AF7

Vâng, điều này có vẻ điên rồ với tôi, tại sao rsync lại chậm như vậy? Ngay cả với rsync "chỉ kích cỡ" dường như sẽ mất mãi mãi để xây dựng danh sách tệp gia tăng của nó. Tại sao? Tôi có thể tự kiểm tra kích thước tệp và xác định cái nào đã thay đổi nhanh hơn nhiều! Điều gì đang lãng phí quá nhiều thời gian để làm, và làm cách nào để tắt các tính năng ưa thích này? EDIT: Ah, đừng bận tâm, tôi đã đặt cờ 'c' một cách tình cờ. Nếu không có tổng kiểm tra thì nó rất nhanh.
Nông dân Ben

Câu trả lời:


5

Theo như rsyncbạn đang sao chép giữa hai cây tệp cục bộ, do đó, nó vô hiệu hóa hầu hết các tối ưu hóa của nó (bao gồm cả thuật toán delta mà nó nổi tiếng). Nếu bạn có thể chạy một rsyncmáy chủ từ xa (để bạn có được kịch bản máy chủ-máy khách thực sự trên mạng của mình), bạn sẽ có được một lực kéo đáng kể.

Tuy nhiên, đây là những lựa chọn khác để xem xét

  1. Sao chép mà không lo lắng về việc xóa các tập tin cũ. Điều này có thể cho phép bạn thực hiện chuyển khoản nhanh hơn thường xuyên hơn và loại bỏ việc dọn dẹp chậm hơn để nói, chỉ một lần một ngày:

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. Sử dụng một biến thể của rsyncthuật toán xóa mặc định để tránh xây dựng danh sách đầy đủ các tệp trước khi chuyển:

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. Tách các thư mục cấp cao nhất thành các tác vụ riêng biệt và chạy chúng song song. Bạn có thể thấy rằng nếu bạn bị ràng buộc IO thì điều này sẽ không thực sự hữu ích và đối với việc quay đĩa, nó gần như chắc chắn sẽ khiến mọi thứ tồi tệ hơn.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

Nếu không có những gợi ý giúp sau đó nó sẽ có giá trị bổ sung khác --verboseđể rsyncxem những gì nó đang làm. Tôi nghi ngờ rằng nó sẽ chạy rầm rộ trong tất cả các tệp không thay đổi và nếu bạn có đủ tệp thì điều này chỉ mất một thời gian dài.


--delete --delete-duringđã không làm điều đó cho tôi - vẫn gửi một danh sách tập tin gia tăng - nhưng --delete --delete-befoređã đi thẳng tới : building file list, có vẻ như là một tiến bộ lớn. Tôi nghĩ.
mlissner

Không, đó là ngược, tôi sợ. Nếu bạn sử dụng --delete-before, sau đó rsyncthực hiện hai lần chuyển qua cây tập tin: một lần xóa và lần tiếp theo để sao chép.
roaima

Cảm ơn. Trong trường hợp đó ... có cách nào để tránh xây dựng danh sách tập tin gia tăng không?
mlissner

@mlissner nó phụ thuộc vào một số yếu tố khác nhau. Cái lớn nhất từ ​​trước đến nay là liệu bạn đang thực hiện sao chép từ địa phương đến địa phương hoặc từ xa đến địa phương.
roaima

Tất cả đều là cục bộ đối với tôi, mặc dù một trong những người địa phương là đĩa USB?
mlissner

-2

bạn có thể sử dụng -vvđể xem toàn bộ nhật ký của rsync.


2
Làm thế nào điều này sẽ trả lời câu hỏi, tức là, làm thế nào điều này sẽ tăng tốc mọi thứ?
Kusalananda

Bạn chỉ có thể xem nhật ký, điều này cho thấy tại sao phải mất quá nhiều thời gian để bắt đầu rsync, có thể có những tệp bạn có thể bỏ qua từ rsync để giảm thời gian.
namaiiee
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.