Mỗi ngày tôi cần sao chép N tệp từ một vị trí nguồn vào máy nhân bản tại một thời điểm cụ thể (trong đó N rất lớn). Giả sử tôi nói với nhiều CPU cho mỗi CPU chạy đồng thời một rsync trên một tập hợp con của các tệp (băng thông mạng và ổ đĩa không phải là vấn đề). Lý tưởng nhất là mỗi CPU sẽ chịu trách nhiệm cho một tập hợp con khác nhau của các tệp N, nhưng trong thực tế, điều này đôi khi khó đảm bảo. (Một số tệp nguồn có thể bị "khiếu nại" bởi nhiều CPU.) Do đó, đôi khi rsync I và rsync J sẽ cố gắng sao chép tệp F cùng một lúc.
Sử dụng rsync -avz --delete --temp-dir=/tmp remote:/path/to/source/ /path/to/dest/
, giả sử cả rsyncs I và J đều thấy tình huống này để bắt đầu:
/path/to/source/:
FileA
FileB
FileC
/path/to/dest/:
FileA
Mỗi rsync nghĩ rằng nó cần sao chép các tệp B và C, và mỗi cái bắt đầu làm như vậy, trước tiên /tmp/name_of_source_file.temp_suffix
. Giả sử tôi hoàn thành trước và chuyển tệp tạm thời của nó sang /path/to/dest/FileB
. Bây giờ tình hình là:
/path/to/dest/:
FileA
FileB
/tmp/:
FileB.rsyncJsuffix
Bây giờ rsync J đã hoàn tất việc sao chép nhưng lại phát sinh lỗi khi nó cố gắng di chuyển phiên bản FileB của nó sang /path/to/dest/
vì đã có một FileB khác mà nó không thấy khi nó bắt đầu.
Có một trong nhiều tùy chọn của rsync bằng cách nào đó xử lý tình huống này không? Lý tưởng nhất là tôi muốn một tùy chọn nói với rsync, "Hãy tin vào chính mình. Bạn không thể làm gì sai. Hãy thoải mái ghi đè lên bất cứ điều gì trái tim nhỏ bé của bạn mong muốn." để nó không phàn nàn về FileB đột nhiên xuất hiện giữa lúc thực thi.
Suy nghĩ?