Загрузить только измененную часть файла с помощью rsync

Загрузить только измененную часть файла с помощью rsync

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

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

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

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

решение1

Вам нужна именно эта --inplaceвозможность.

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

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

Это имеет несколько последствий:

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

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

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

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

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

решение2

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

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

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

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