Безопасно ли параллельно синхронизировать один и тот же источник с одним и тем же местом назначения?

Безопасно ли параллельно синхронизировать один и тот же источник с одним и тем же местом назначения?

Мое приложение использует rsync для копирования файлов из сетевого драйвера в локальный кэш с целью повышения производительности.

Но поскольку мое приложение может работать параллельно, как и rsync, и может возникнуть ситуация, когда 2 экземпляраrsyncвыполняются параллельно с одним и тем же источником и каталогом.

Я столкнулся с проблемой, что место назначения не синхронизируется полностью (оставляя один подкаталог пустым). Поэтому я сомневаюсь, что это проблема rsync, поэтому

  • Безопасно ли использовать rsync для параллельного копирования файлов из одного источника в одно место назначения?
  • Есть ли какая-либо возможность гарантировать правильность такой операции?

Я использую следующие варианты:

rsync -a --copy-unsafe-links --delete

решение1

Вероятно, безопасно запускать rsyn параллельно, но неэффективно, поскольку файлы, скорее всего, будут переданы дважды, так как rsync составляет список файлов для передачи в начале. Конечно, всегда есть небольшая вероятность, что один и тот же файл будет передан одновременно обоими rsync, но содержимое должно быть тем же самым впоследствии.

Чтобы предотвратить двойные запуски, я обычно пишу скрипт, который проверяет, и в противном случае touches файл блокировки, который удаляется в конце. Как вариант, вы можете использовать ловушку в вашем скрипте, чтобы очистить файл блокировки, если вы прерываете скрипт или когда происходит ошибка (используйте 'help trap' в вашей оболочке). Насколько мне известно, в самом rsync нет такого механизма блокировки (что было бы сложно реализовать).

Связанный контент