SSHFS là thuận tiện, nhưng nó không kết nối tốt với rsync hoặc nói chung là với các công cụ đồng bộ hóa.
Vấn đề lớn nhất là SSHFS phần lớn giết chết tối ưu hóa hiệu suất của rsync. Đặc biệt, đối với các tệp từ trung bình đến lớn, khi rsync thấy rằng tệp đã được sửa đổi, nó sẽ tính toán tổng kiểm tra trên các phần của tệp ở mỗi bên để chỉ chuyển các phần đã được sửa đổi. Đây chỉ là một tối ưu hóa nếu băng thông mạng nhỏ hơn đáng kể so với băng thông đĩa, thường là như vậy. Nhưng với SSHFS, băng thông của đĩa cứng trên đĩa cứng trên thực tế là băng thông mạng, do đó rsync sẽ phải đọc toàn bộ tệp để xác định nội dung cần sao chép. Trong thực tế, với một bản sao cục bộ (liên quan đến rsync, ngay cả khi một trong các mặt nằm trên SSHFS), rsync chỉ sao chép toàn bộ tệp.
SSHFS cũng gây bất lợi cho hiệu suất nếu có nhiều tệp nhỏ. Rsync cần kiểm tra ít nhất siêu dữ liệu của mỗi tệp để xác định xem nó có bị sửa đổi hay không. Với SSHFS, điều này đòi hỏi một chuyến đi khứ hồi mạng cho mỗi tệp. Với rsync qua SSH, hai bên có thể hoạt động song song và chuyển thông tin hàng loạt, nhanh hơn rất nhiều.
Về mặt hạn chế truy cập, SSHFS yêu cầu quyền truy cập SFTP, trong khi rsync yêu cầu khả năng chạy mã (cụ thể là chương trình rsync) thông qua hệ vỏ. Nếu người dùng không có tài khoản shell, việc cung cấp cho tài khoản một shell đặc biệt chỉ cho phép chạy một vài chương trình bao gồm sftp-server
và rsync
. Xem Bạn có cần một vỏ cho SCP không?
Nếu bạn chỉ sao chép các tệp mới và không có số lượng tệp rất lớn, thì không có sự khác biệt về hiệu suất.
SSHFS thiết lập kết nối SSH khi hệ thống tập tin được gắn kết và duy trì kết nối đó cho đến khi nó không được kết nối. Rupync tạo một kết nối mới mỗi lần bạn chạy nó, nhưng bạn có thể sử dụng tính năng ghép kênh và cõng trên một kết nối chính duy nhất để tránh xác thực mỗi lần.
SSHFS là một hệ thống tập tin FUSE và do đó chỉ hỗ trợ siêu dữ liệu Unix và ACL truyền thống. Rsync có thể chuyển các thuộc tính mở rộng (bạn cần sử dụng rsync -aAX
, lưu ý rằng đơn giản -a
chỉ bảo tồn siêu dữ liệu Unix truyền thống).
rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz
. Khi tôi sử dụngrsync
cho thao tác này, trong quá trình tính toán tổng kiểm tra để chỉ chuyển các phần đã được sửa đổi,rsync
nên đọc toàn bộ tệp, điều này sẽ dẫn đến dữ liệu hoàn chỉnh được tải xuống thay vì chỉ phần cập nhật của nó? @Gilles