rsync và viết quyền tại mục tiêu


8

Tôi luôn tự hỏi tại sao rsynccố gắng chuyển một tệp đến một vị trí từ xa nơi nó có quyền đọc / thực thi cho thư mục đích, nhưng không có quyền ghi để tạo tệp đích thực. Điều này có thể được mô phỏng ngay cả cục bộ khi cố gắng sao chép một tệp như một người dùng thông thường sang / , rsyncsẽ chuyển toàn bộ tệp (cũng mất khá nhiều thời gian cho các tệp lớn) và cuối cùng thất bại với

rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)

Vì vậy, nó dường như đã thất bại khi khởi động khi cố gắng tạo tệp tạm thời ( dấu chấm -file) trong khi chuyển. Tại sao nó không nhận thấy điều này và hủy bỏ sớm thay vì cố gắng sao chép toàn bộ tệp mà không có bất kỳ quyền ghi nào?

Và nó sao chép tập tin vào đâu nếu nó không thể tạo tập tin tạm thời? Tôi không thể thấy bất kỳ sự tăng bộ nhớ nào của các quá trình rsync và cũng không có tệp tương ứng trong / tmp . Có vẻ như nó trực tiếp loại bỏ dữ liệu tại đích nhưng vẫn tiếp tục chuyển.

Câu trả lời:


5

Nếu bạn cần sao chép vào một thư mục mà không có quyền ghi, hãy thêm --inplacevào các tùy chọn lệnh. Điều này đôi khi rẻ hơn khi nó không tạo ra một bản sao tạm thời, nhưng trong quá trình cập nhật tệp ở trạng thái không nhất quán.

Về câu hỏi tại sao nó không kiểm tra quyền sở hữu trước đó: nó có thể bỏ lỡ một số chi tiết cụ thể bổ sung như ACL truy cập mở rộng, vì vậy rsync không tin vào sơ đồ 3 * 3 + 3 tiêu chuẩn. OTOH chính sách có chủ ý này không tạo ra bất kỳ sự khác biệt thực sự nào trong kết quả - dù sao thì tệp không được cập nhật.


Cảm ơn câu trả lời của bạn, nhưng đó chỉ là một phỏng đoán mơ hồ và không thực sự trả lời câu hỏi của tôi. Ngay cả với --inplacenó chuyển toàn bộ tập tin cho đến khi nhận thấy thiếu quyền ghi.
SCAI

1
Mặc dù điều này không trả lời trợ giúp của OP, nhưng việc sử dụng --inplacerất hữu ích khi bạn có quyền ghi vào tệp nhưng không có thư mục chứa.
tokland

nhưng đó là giải pháp của tôi (tôi đã tạo các tệp tmp nhưng không được đổi tên thành tên gốc), vì vậy xin cảm ơn và lên
roothahn

4

Đây dường như là một thiếu sót của giao thức rsync hiện tại như được giải thích trong trình theo dõi lỗi . Giao thức rsync không thể xác định trước nếu nó có quyền ghi tại mục tiêu. Thay vào đó, nó chỉ gửi và kiểm tra thành công hay thất bại sau đó.


2

Rsync tạo tệp tạm thời tại cùng một thư mục của tệp đích, vì vậy trong trường hợp này, bạn phải sao chép một số tệp vào /, vì bạn không khởi chạy nó dưới dạng root và thông thường /chỉ có thể ghi được bằng root, nên không thành công.

Để tìm ra những tập tin đang được sao chép, chuyển vào tham số -v


1
Tôi biết rằng rsynctạo các tệp tạm thời của nó trong cùng thư mục với thư mục đích. Nhưng ngay cả khi nó không thể tạo các tệp tạm thời, nó sẽ bắt đầu chuyển và thất bại sau đó thay vì kiểm tra ngay từ đầu nếu nó có tất cả các quyền ghi yêu cầu. Tôi muốn biết tại sao nó hành xử như vậy.
scai
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.