rsync -LvP всегда повторно передает все файлы, следуя символическим ссылкам

Вопрос или проблема

Я выполняю rsync -LvP some_local_files* host:dir (связанная ссылка).

Это работает (соблюдаются символьные ссылки), но всегда передаёт все файлы заново, игнорируя то, что уже есть.

Как я могу этого избежать? То есть, я хочу передавать только файлы, которые ещё не скопированы.

Ответ или решение

При использовании команды rsync -LvP some_local_files* host:dir для синхронизации файлов, следуя символьным ссылкам, вы столкнулись с проблемой, когда все файлы всегда перезаписываются, игнорируя уже существующие на удаленном сервере. Давайте разберем, как можно избежать этого и эффективно синхронизировать только те файлы, которые не были скопированы ранее.

Проблема

Ваша команда использует ключи:

  • -L (или --copy-links), который указывает rsync следовать символьным ссылкам и копировать файлы, на которые они ссылаются.
  • -v (или --verbose), который активирует детализированный вывод.
  • -P (который эквивалентен --partial --progress), для отображения прогресса передачи и сохранения частичных файлов.

Однако, по умолчанию, rsync будет проверять только по времени изменения файлов и размеру, если в команду не включен дополнительный параметр для контрольной суммы.

Решение

Чтобы избежать повторной передачи файлов, уже находящихся на удаленном сервере, выполните следующие шаги:

  1. Проверка существующих файлов: Параметр -n (или --dry-run) будет полезен для первоначальной проверки. Он покажет, какие файлы будут переданы, не выполняя фактической передачи. Это позволит вам убедиться в правильности выбора файлов.

  2. Подключение параметров, проверяющих уже существующие файлы: Убедитесь, что у вас включены все необходимые параметры для сравнения файлов. Для этого используйте -c (или --checksum), чтобы сравнивать файлы по контрольным суммам. Однако, имейте в виду, что это может значительно замедлить процесс, так как rsync будет вычислять контрольные суммы для всех файлов.

    Пример команды:

    rsync -LvcP some_local_files* host:dir
  3. Исключение параметра -L, если это возможно: Если символьные ссылки не обязаны следовать и вы можете передавать только оригинальные файлы, это может помочь избежать лишней передачи данных.

Итоговая команда

В зависимости от контекста использования, команда может выглядеть следующим образом:

rsync -vP --ignore-existing some_local_files* host:dir

Или с контрольной суммой:

rsync -cvP some_local_files* host:dir

Заключение

Использование rsync с правильными флагами позволит эффективно синхронизировать файлы без повторной передачи уже существующих. Уделите внимание параметрам, которые соответствуют вашим нуждам, и протестируйте команду с ключом -n, чтобы избежать неожиданных переполнений данных. Выбор неправильного параметра может привести к излишнему трафику и времени выполнения, что критично в производственных системах.

Оцените материал
Добавить комментарий

Капча загружается...