Каждый день мне нужно копировать N файлов из исходного местоположения в зеркало в определенное время (где N очень большое). Допустим, я говорю нескольким процессорам, чтобы каждый запускал rsync одновременно для подмножества файлов (пропускная способность сети и диска не является проблемой). В идеале каждый ЦП должен отвечать за непересекающееся подмножество N файлов, но на практике это иногда трудно гарантировать. (Некоторые из исходных файлов могут быть "востребованы" более чем одним процессором.) В результате иногда rsync I и rsync J одновременно пытаются скопировать файл F одновременно.
Используя rsync -avz --delete --temp-dir=/tmp remote:/path/to/source/ /path/to/dest/
, скажем, rsyncs I и J оба видят эту ситуацию для запуска:
/path/to/source/:
FileA
FileB
FileC
/path/to/dest/:
FileA
Каждый rsync считает, что ему нужно скопировать файлы B и C, и каждый начинает это делать, сначала в /tmp/name_of_source_file.temp_suffix
. Допустим, я сначала заканчиваю и перемещаю его временный файл в /path/to/dest/FileB
. Сейчас ситуация такова:
/path/to/dest/:
FileA
FileB
/tmp/:
FileB.rsyncJsuffix
Теперь rsync J заканчивает копирование, но выдает ошибку, когда пытается переместить свою версию FileB в /path/to/dest/
потому что там уже есть другой FileB, который он не видел при запуске.
Один из многих вариантов rsync как-то справляется с этой ситуацией? В идеале, я бы хотел вариант, который говорит rsync: «Верьте в себя. Вы не можете сделать ничего плохого. Не стесняйтесь переписывать все, что пожелает ваше маленькое сердце », чтобы он не жаловался на FileB, который внезапно оказался в середине исполнения.
Мысли?