Cho phép nhiều rsyncs đồng thời chơi tốt với nhau


1

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ĩ?

Câu trả lời:


0

Tôi không biết tại sao bạn lại chạy rsyncs theo cách bạn đang chạy chúng, nhưng nếu tôi là bạn, tôi nghiêm túc xem xét các cách khác để giải quyết vấn đề không liên quan đến việc có nhiều rsyncs ghi vào cùng một cây tệp thời gian.

Đây là từ trang man rsync trong phần --temp-dir:

Nếu bạn đang sử dụng tùy chọn này vì các lý do khác ngoài việc thiếu dung lượng ổ đĩa, bạn có thể muốn kết hợp nó với tùy chọn --delay- Updates, sẽ đảm bảo rằng tất cả các tệp được sao chép sẽ được đưa vào thư mục con trong phân cấp đích, chờ kết thúc của việc chuyển nhượng. Nếu bạn không có đủ chỗ để sao chép tất cả các tệp đến trên phân vùng đích, một cách khác để nói với rsync rằng bạn không quá quan tâm đến dung lượng đĩa là sử dụng tùy chọn --partial-dir với đường dẫn tương đối; bởi vì điều này cho rsync biết rằng bạn có thể xóa một bản sao của một tệp trong một thư mục con trong hệ thống phân cấp đích, rsync sẽ sử dụng thư mục một phần làm khu vực tổ chức để đưa tập tin được sao chép và sau đó đổi tên nó thành vị trí từ đó. (Chỉ định một hướng dẫn có đường dẫn tuyệt đối không có tác dụng phụ này.)


Cảm ơn đã lưu ý. Thật không may, đợi cho đến khi hoàn thành rsync trước khi di chuyển các tệp đến đích cuối cùng của chúng vẫn không giải quyết được vấn đề, vì đó là hai rsyncs riêng biệt đang cạnh tranh và một sẽ kết thúc trước cho mỗi tệp. Tôi nhận ra rằng đây là một cách sử dụng rsync kỳ lạ, nhưng thật không may là cần thiết trong môi trường tôi đang sử dụng ...
dg99

-1

Cho rằng bạn có một số cấu trúc thư mục với một số thư mục trống và một số tệp và bạn muốn bản sao lưu trữ của nó - điều tôi sẽ thử là chạy rsync song song:

  1. tạo lại cấu trúc thư mục tương tự

tìm / nguồn / dir -type f | song song mkdir -p mệnh / dir / {//}

  1. tập tin rsync:

tìm / nguồn / dir -type f | rsync song song -a {} / mệnh / dir / {}

  1. sau đó chạy một rsync để nhận các thư mục trống và đảm bảo tất cả đều tốt

rsync -av / nguồn / dir / mệnh / dir


Điều này đề xuất một cách tiếp cận thay thế cho mục tiêu, thay vì trả lời câu hỏi được hỏi. Dù sao cũng cảm ơn bạn.
dg99

"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?" Không có kiến ​​thức của tôi;) Có thể bạn đang tìm kiếm một số công cụ như moo.nac.uci.edu/~hjm/parsync
dimus
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.