Sao chép hoặc lệnh rsync


83

Lệnh sau đang hoạt động như mong đợi ...

cp -ur /home/abc/* /mnt/windowsabc/

Rsync có bất kỳ lợi thế nào so với nó? Có cách nào tốt hơn để giữ cho thư mục sao lưu được đồng bộ hóa 24 giờ một lần không?


Làm thế nào chính xác là nó không hoạt động như mong đợi?
lunixbochs

12
-u chỉ ra "cập nhật": chỉ sao chép các tệp bị thiếu hoặc cũ hơn. -r cho biết "đệ quy": đi sâu vào cấu trúc thư mục. Tôi đã phải tìm kiếm nó, giúp đỡ những người khác. :-)
Strongpile

để biết thông tin về các cờ cụ thể trong phần trợ giúp của lệnh, tôi thường làm theo một cái gì đó như sau, <cp --help | grep -e -u> hoặc nếu bạn muốn tìm thông tin về cờ 'r', hãy sử dụng <cp --help | grep -e -r>. Nó sẽ chỉ hiển thị cho bạn những phần trợ giúp có nội dung bạn đã viết sau "-e".
paramvir

Câu trả lời:


58

Rsync tốt hơn vì nó sẽ chỉ sao chép các phần được cập nhật của tệp cập nhật, thay vì toàn bộ tệp. Nó cũng sử dụng tính năng nén và mã hóa nếu bạn muốn. Kiểm tra hướng dẫn này .


59

rsync không nhất thiết phải hiệu quả hơn, do kiểm kê chi tiết hơn các tệp và khối mà nó thực hiện. Thuật toán này thực sự tuyệt vời với những gì nó làm được, nhưng bạn cần hiểu vấn đề của mình để biết liệu nó có thực sự là lựa chọn tốt nhất hay không.

Trên một hệ thống tệp rất lớn (ví dụ nhiều nghìn hoặc hàng triệu tệp) nơi các tệp có xu hướng được thêm vào nhưng không được cập nhật, "cp -u" có thể sẽ hiệu quả hơn. cp đưa ra quyết định chỉ sao chép trên siêu dữ liệu và có thể chỉ cần thực hiện công việc sao chép.

Lưu ý rằng bạn có thể muốn một số bộ đệm, ví dụ: bằng cách sử dụng tar thay vì cp thẳng, tùy thuộc vào kích thước của tệp, hiệu suất mạng, hoạt động đĩa khác, v.v. Tôi thấy ý tưởng sau rất hữu ích:

tar cf - . | tar xCf directory -

Bản thân siêu dữ liệu có thể thực sự trở thành một chi phí quan trọng trên các hệ thống tệp (cụm) rất lớn, nhưng rsync và cp sẽ chia sẻ vấn đề này.

rsync dường như thường xuyên là công cụ được ưa thích (và trong các ứng dụng mục đích chung là lựa chọn mặc định thông thường của tôi), nhưng có lẽ nhiều người sử dụng rsync một cách mù quáng mà không suy nghĩ thấu đáo.


18

Lệnh như được viết sẽ tạo các thư mục và tệp mới với dấu ngày và giờ hiện tại và bạn là chủ sở hữu. Nếu bạn là người dùng duy nhất trên hệ thống của mình và bạn đang làm việc này hàng ngày thì điều đó có thể không quan trọng lắm. Nhưng nếu việc duy trì các thuộc tính đó quan trọng đối với bạn, bạn có thể sửa đổi lệnh của mình bằng

cp -pur /home/abc/* /mnt/windowsabc/

-P sẽ duy trì quyền sở hữu, dấu thời gian và chế độ của tệp. Điều này có thể khá quan trọng tùy thuộc vào những gì bạn đang sao lưu.

Lệnh thay thế với rsync sẽ là

rsync -avh /home/abc/* /mnt/windowsabc

Với rsync, -a cho biết "kho lưu trữ" lưu giữ tất cả các thuộc tính được đề cập ở trên. -v chỉ ra "verbose" chỉ liệt kê những gì nó đang làm với mỗi tệp khi nó chạy. -z được để ở đây cho các bản sao cục bộ, nhưng là để nén, điều này sẽ hữu ích nếu bạn đang sao lưu qua mạng. Cuối cùng, -h yêu cầu rsync báo cáo kích thước ở các định dạng mà con người có thể đọc được như MB, GB, v.v.

Vì tò mò, tôi đã chạy một bản sao để nâng cấp hệ thống và tránh sai lệch so với lần chạy đầu tiên, sau đó tôi hẹn giờ sau khi chạy thử nghiệm 1GB tệp từ ổ cứng SSD bên trong sang ổ cứng kết nối USB. Chúng chỉ được sao chép vào các thư mục đích trống.

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

Cả hai lệnh dường như giống nhau, mặc dù việc nén và giải nén rõ ràng là đánh thuế hệ thống nơi băng thông không phải là điểm nghẽn.


6

Đặc biệt nếu bạn sử dụng hệ thống tập tin copy-on-write như BTRFS hoặc ZFS thì rsyncsẽ tốt hơn nhiều.

Tôi sử dụng BTRFS và tôi có cái này trong ~/.bashrc:

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

Cờ quan trọng ở đây đối với các CoW FS như BTRFS là --inplacevì nó chỉ sao chép phần đã thay đổi của các tệp, không tạo mới cho các thay đổi nhỏ giữa các inode của tệp, v.v. Xem phần này .


1
Theo --inplacelựa chọn của nhãn hiệu : The option implies --partial. Vì vậy, tôi đoán --partiallà không bắt buộc, ít nhất là trong phiên bản hiện tại.
Dcortez

4

Hãy nhớ rằng trong khi truyền tệp nội bộ trên một máy, tức là không phải chuyển mạng, việc sử dụng cờ -z có thể có sự khác biệt lớn về thời gian chuyển.

Chuyển trong cùng một máy

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797

3

Đối với bản sao cục bộ, ưu điểm duy nhất của rsync là nó sẽ tránh sao chép nếu tệp đã tồn tại trong thư mục đích. Định nghĩa "đã tồn tại" là (a) cùng tên tệp (b) cùng kích thước (c) cùng dấu thời gian. (Có thể cùng chủ sở hữu / nhóm; tôi không chắc ...)

"Thuật toán rsync" rất phù hợp cho các bản cập nhật gia tăng của tệp qua liên kết mạng chậm, nhưng nó sẽ không giúp bạn mua được nhiều bản sao cục bộ vì nó cần đọc tệp hiện có (một phần) để chạy tính toán "khác biệt".

Vì vậy, nếu bạn đang chạy loại lệnh này thường xuyên và tập hợp các tệp đã thay đổi nhỏ so với tổng số tệp, bạn sẽ thấy rằng rsync nhanh hơn cp. (Ngoài ra rsync có một --deletetùy chọn mà bạn có thể thấy hữu ích.)


3

Nó không thực sự là một câu hỏi về cái gì hiệu quả hơn.

Các lệnh 'rsync' và 'cp' không tương đương và đạt được các mục tiêu khác nhau.

1- rsync có thể bảo toàn thời gian tạo các tệp hiện có. (sử dụng tùy chọn -a)
2- rsync sẽ chạy đa xử lý và truyền bằng cách sử dụng ổ cắm cục bộ hoặc ổ cắm mạng. (nghĩa là tự phân nhánh thành nhiều quy trình)
3- Đa xử lý và phân luồng sẽ tăng thông lượng của bạn khi sao chép số lượng lớn các tệp nhỏ và thậm chí với nhiều tệp lớn hơn.

Vì vậy, điểm mấu chốt là rsync dành cho dữ liệu lớn và cp là để sao chép cục bộ nhỏ hơn. (MB đến dải GB nhỏ). Khi bạn bắt đầu sử dụng nhiều GB hoặc trong phạm vi TB, hãy sử dụng rsync. Và tất nhiên các bản sao mạng, rsync mọi cách.


"rsync có thể bảo toàn thời gian tạo các tệp hiện có. (sử dụng tùy chọn -a)" - "cp -a" có thể làm điều tương tự và thậm chí còn có thể làm tốt hơn "rsync -a". "Tốt hơn" có nghĩa là bảo tồn càng nhiều dữ liệu gốc và siêu dữ liệu càng tốt; đọc unix.stackexchange.com/questions/443911/… . Rsync và cp gần như tương đương về -a.
Rublacava

Cảm ơn bạn @Rublacava Tôi đã thu thập dữ liệu trên web tìm kiếm cụ thể để -aso sánh.
Francois

1

nếu bạn đang sử dụng cp không lưu các tệp hiện có khi sao chép các thư mục cùng tên. Giả sử bạn có các thư mục này:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

Sau đó, bạn sao chép cái này qua cái khác:

cp /someOtherFolder/myFolder /myFolder

kết quả:

/myFolder
  wellHelloThere.txt

Đây ít nhất là những gì xảy ra trên macOS và tôi muốn giữ lại các tệp khác biệt nên đã sử dụng rsync.

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.