cp hay rsync, cp có thực sự xứng đáng không?


8

Tôi hy vọng điều này không được tính là một câu hỏi không có câu trả lời thực tế, như tôi có thể dường như không tìm thấy một lý do chính đáng để sử dụng cp(1)hơn rsync(1)trong hầu hết các tình huống. Một người thường nên ủng hộ rsynchơn cp? Có hướng dẫn tốt cho việc sử dụng của họ?

  • rsync: Chuyển các khác biệt, nó có thể sử dụng nén, nó có thể được sử dụng từ xa (và an toàn), nó có thể được khởi động lại mặc dù bị gián đoạn, ngay cả trong khi chuyển một tệp lớn. '

  • cp: Có lẽ nó chỉ đơn giản để sử dụng? Có nhanh hơn rsync không?


4
Đôi khi, chi phí so sánh là nỗ lực hơn nhiều so với việc sao chép các byte một cách mù quáng.
bahamat

Câu hỏi tương tự với câu trả lời tốt hơn: serverfault.com/questions/43014/ mài
Daniel

Câu trả lời:


9

cplà một phần của coreutils, do đó nó có mặt ở khắp mọi nơi. Hơn nữa, nó chủ yếu được thiết kế để sao chép các tập tin bên trong một máy tính.

rsynckhông phải là một phần của coreutils, nó không xuất hiện ngay cả trên môi trường mặc định. Ngoài ra, nó được thiết kế chủ yếu để truyền tệp qua mạng. Cũng rsynccó nhiều phụ thuộc hơn so với coreutils, tuy nhiên sự khác biệt này không có ý nghĩa lớn.

PS: Nhân tiện, việc sử dụng CPU vẫn là vấn đề trên các hệ thống nhúng.


6

Lý do chính bạn không muốn sử dụng rsynccho mọi thao tác sao chép là vì nó rsynccó tính toán quá mức. Trước khi truyền dữ liệu thực sự bắt đầu, rsyncquét tất cả các tệp. Sau đó, trước mỗi tập tin, một so sánh được thực hiện. Chi phí hoạt động này không đáng kể, ngay cả với CPU nhanh có sẵn vào năm 2012. Tôi thực hiện các loại chuyển khoản này mọi lúc và trên các máy chủ có kích thước khá, một khi bạn bắt đầu xử lý các hợp đồng dữ liệu thì chi phí có thể tốn thời gian.

Tôi không nói là không sử dụng rsync, hoàn toàn không sử dụng rsyncbất cứ lúc nào bạn có thể tiết kiệm thời gian chuyển. Chỉ không sử dụng rsynckhi cpcó thể hoàn thành điều tương tự.

Những gì tôi thường làm, đầu tiên mang lại dữ liệu bằng các phương pháp sao chép thông thường. Sau đó, rsynccho những thay đổi tiếp theo, đó là khi những khác biệt có thể được tận dụng.


Đây có phải là một cái giá lớn phải trả không, với mức độ mạnh mẽ của bộ xử lý của chúng ta ngày nay?
Soyuz

3
Lớn là chủ quan, và sẽ thay đổi tùy thuộc vào số lượng tệp so với kích thước của dữ liệu so với IO. Quan điểm chính của tôi sẽ là, nó không đáng kể bất kể bộ xử lý ngày nay. Một điều cần nhớ bộ xử lý ngày nay, vẫn phải xử lý dữ liệu ngày nay.
JM Becker

Đã đồng ý. CPU không nhận được nhanh hơn trong chân không. Một trong những lý do tốt nhất mà chúng tôi có đối với CPU GHz là kết nối mạng gigabit: CPU chậm hơn đơn giản là không thể giữ cho ống I / O đầy đủ. Máy tính có xu hướng cân bằng tốt như chúng ta biết cách tạo ra chúng. Lấy đi một số năng lượng CPU và một số dung lượng I / O không hoạt động. Tăng nhu cầu I / O và CPU kết thúc không hoạt động nhiều hơn, chờ vào I / O.
Warren Young

3

Tôi sẽ cpsử dụng ít CPU hơn khi sao chép cục bộ vì nó không sử dụng diffs trong khi rsynccó thể giảm ghi khi sử dụng diffs. Nén nên được tránh cục bộ vì dù sao bạn cũng phải đọc và ghi toàn bộ tệp / diff và nó yêu cầu tính toán bổ sung.


Vì vậy, tất cả tập trung vào chi phí CPU hoặc chi phí I / O
Soyuz

2
@soyuz, điều đó đúng với dữ liệu đã thay đổi, liên quan đến dữ liệu khác. Khác biệt càng nhỏ, càng rsyncđược ưa thích. Nhưng khi chúng không có khác biệt, rsyncchỉ mang lại chi phí mà không có thêm lợi ích.
JM Becker

@TechZilla Tôi nghĩ bạn có nghĩa là, khi không có gì chung. Nếu không có khác biệt, rsync sẽ kết thúc sớm vì không có gì để sao chép, làm cho nó được ưa thích hơn nhiều.
Izkata

@Izkata: Có ít nhất một cách rsyncđể có hai lần tổng phí I / O cho hai tệp giống nhau so với mù cp: thời gian sửa đổi đã thay đổi. Bạn sẽ phải đưa ra --size-onlyđể sửa lỗi này. Cách khác duy nhất tôi có thể thấy xung quanh điều này là rsyncdựa vào tổng kiểm tra hệ thống tập tin, nhưng đối với hầu hết các hệ thống tập tin, chúng không phải là công cụ dự đoán thống kê rất tốt về danh tính.
Warren Young

3

Khác với các chi phí trong trường hợp khác biệt lớn hoặc không tồn tại, rsyncdường như không có tương đương cp --reflink=always, có thể tiết kiệm một lượng dữ liệu khổng lồ nếu sao chép trong một hệ thống tệp hỗ trợ nó (vì vậy nó tạo ra các bản sao sao chép, vì vậy dữ liệu chung giữa bản gốc và bản sao (tất nhiên, ban đầu là tất cả của nó) chỉ được lưu trữ một lần). rsynctuy nhiên, tốt hơn là cập nhật các bản sao CoW, sử dụng --inplace.

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.