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ệ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?
Câu trả lời:
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.
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.
Đặ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ì rsync
sẽ 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à --inplace
vì 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 .
--inplace
lựa chọn của nhãn hiệu : The option implies --partial
. Vì vậy, tôi đoán --partial
là không bắt buộc, ít nhất là trong phiên bản hiện tại.
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
Đố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 --delete
tùy chọn mà bạn có thể thấy hữu ích.)
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.
-a
so sánh.
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.