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

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

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

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

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

Это, похоже, связано с тем, что на целевом хосте, с опциями -LvP, когда
файл создается, он не получает отметку времени исходного файла или
даже исходной символьной ссылки, а вместо этого получает отметку времени “сейчас”.

Добавив опцию -t или --times, время модификации исходного файла устанавливается на целевом хосте. Будущие rsync обнаруживают, что файл такого же размера и с такой же отметкой времени, и поэтому он больше не копируется снова.

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

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

Анализ проблемы

Проблема возникает из-за опций, используемых в команде rsync:

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

При использовании этих опций rsync создает файлы на целевой стороне, устанавливая их метку времени на момент создания, что приводит к тому, что при следующем запуске rsync эти файлы кажутся новыми, и программа снова передает их.

Решение проблемы

Чтобы избежать повторной передачи файлов, необходимо использовать опцию -t (или --times), которая позволяет сохранить метку времени файлов. Это означает, что после передачи файла на удаленный сервер rsync сохранит метку времени исходных файлов. На следующем запуске, если метка времени и размер файла совпадают, rsync не будет повторно передавать этот файл.

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

rsync -LvtP some_local_files* host:dir

Полный синтаксис с рекомендациями

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

Резюме

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

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

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