Я изучаю rsync для синхронизации удаленных и локальных папок в Windows (с помощью cwrsync). У меня есть сомнения, возможно ли загрузить только часть изменений?

Например, у меня есть файл размером 100 МБ, я буду загружать его с помощью команды,

rsync -a /source/path/ /dest/path/

Затем я внесу некоторые изменения в этот файл. Если я снова выполню ту же команду, весь файл размером 100 МБ будет снова загружен. Вместо этого, как добавить изменения, внесенные в этот файл при загрузке?

2 ответа2

2

Что вам нужно, так это опция --inplace .

Я настоятельно советую вам прочитать соответствующую часть руководства по rsync и понять, что подразумевается под этой опцией:

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

Это имеет несколько эффектов:

  • Жесткие ссылки не битые. Это означает, что новые данные будут видны через другие жесткие ссылки на файл назначения. Более того, попытки скопировать разные исходные файлы в файл с несколькими ссылками назначения приведут к "перетягиванию каната" с изменением данных назначения вперед и назад.
  • Используемые двоичные файлы не могут быть обновлены (либо ОС не допустит этого, либо двоичные файлы, которые пытаются обменять свои данные, будут плохо себя вести или аварийно завершаться).
  • Данные файла будут в несогласованном состоянии во время передачи и будут оставлены таким образом, если передача будет прервана или если обновление не удастся.
  • Файл, в который rsync не может записать, не может быть обновлен. В то время как суперпользователь может обновить любой файл, обычному пользователю необходимо предоставить разрешение на запись для открытия файла для успешной записи.
  • Эффективность алгоритма дельта-передачи rsync может быть снижена, если некоторые данные в целевом файле будут перезаписаны, прежде чем их можно будет скопировать в позицию позже в файле. Это не применяется, если вы используете --backup, так как rsync достаточно умен, чтобы использовать файл резервной копии в качестве базового файла для передачи.

ВНИМАНИЕ: вы не должны использовать эту опцию для обновления файлов, к которым обращаются другие, поэтому будьте осторожны при выборе использования этого для копии.

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

Опция подразумевает --partial (поскольку прерванная передача не удаляет файл), но конфликтует с --partial-dir и --delay-updates. До rsync 2.6.4 --inplace также был несовместим с --compare-dest и --link-dest.

Вы также можете быть заинтересованы в параметрах --append или --append-verify только для растущих файлов.

1

Вы используете rsync для копирования из каталога в другой каталог - тогда действует опция --whole-file :

-W, --whole-file С этой опцией алгоритм дельта-передачи rsync не используется, и весь файл отправляется как есть. Передача может быть быстрее, если этот параметр используется, когда полоса пропускания между исходным и целевым компьютерами выше, чем полоса пропускания на диск (особенно, когда "диск" фактически является сетевой файловой системой). Это значение по умолчанию, когда и источник, и адресат указываются как локальные пути, но только если не действует опция пакетной записи.

Вам нужно запустить rsync в режиме демона с одной стороны, чтобы запустить алгоритм rsync с дельта-передачами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .