Вопрос или проблема
Из мануала rsync:
Он знаменит своим алгоритмом дельта-передачи, который уменьшает объем данных, отправляемых по сети, пересылая только различия между исходными файлами и существующими файлами на месте назначения…
Rsync находит файлы, которые необходимо передать, используя алгоритм «быстрой проверки» (по умолчанию), который ищет файлы, изменившиеся по размеру или по времени последнего изменения. Любые изменения в других сохраненных атрибутах (по запросу параметров) вносятся в файл назначения непосредственно, когда быстрая проверка указывает на то, что данные файла не нужно обновлять.
Означает ли дельта-передача “различия между исходными файлами и существующими файлами на месте назначения”:
- исходный файл и файл назначения идентичны, как вычислено по меткам времени или контрольным суммам, поэтому он не передается
- в дополнение к 1, исходный файл и файл назначения близки по двоичному различию, поэтому передается только разница между файлами
Почему rsync не использует дельта-передачу для локальных файлов? говорит, что rsync не использует дельта-передачу для локальных файлов (в моем случае, между /home и /media). Но если я отключу –no-W или использую -W, будет ли он по-прежнему не передавать идентичные файлы?
Дельта-передача — это оптимизация, которая может ускорить многократные копирования по сети измененных файлов.
Она работает, считывая исходный файл с одного процесса и считывая файл назначения с другого процесса, а затем сравнивая их таким образом, что отправляющему нужно передавать только блоки данных, которые еще не присутствуют в месте назначения.
Если вы рассматриваете копирование между двумя частями локальной файловой системы, вам нужно будет прочитать оба файла полностью, чтобы выяснить, что записать в место назначения. В общем случае полное чтение с последующей частичной записью может быть более эффективно заменено полной записью. (Это не учитывает носители хранения, где чтение значительно быстрее записи, но алгоритм предполагает общую ситуацию.)
Существует еще одна оптимизация, не имеющая отношения к дельта-передаче, при которой rsync
предполагает, что файл с одинаковым относительным именем, размером и временной меткой изменения на исходном и целевом хранилище, вероятно является тем же файлом, и избегает его обработки. Почти единственный случай, когда это может сломаться, — если у вас есть приложение, которое сбрасывает время изменения файла — и очень-очень немногие приложения делают это.
Практически всегда не указывая rsync
, как копировать файл, приводит к самому эффективному способу его копирования. Просто не забудьте включить флаг --times
(-t
).
Ответ или решение
Rsync известен своим алгоритмом дельта-передачи, который значительно снижает объем передаваемых данных при синхронизации файлов. Чтобы подробнее ответить на ваш вопрос и прояснить, что именно подразумевается под фразой «различия между исходными файлами и существующими файлами на приемной стороне», необходимо рассмотреть два ключевых момента.
-
Передача идентичных файлов: Если файлы на источнике и приемнике идентичны по сравнению по размеру и времени изменения, rsync не будет передавать эти файлы. Это предусмотрено алгоритмом быстрой проверки, который предполагает, что файлы с одинаковыми именами, размером и временем модификации, вероятно, являются одинаковыми. Следовательно, rsync не требует их повторной передачи.
-
Передача различий между похожими файлами: Если файлы схожи, но не идентичны (то есть отличаются по содержимому, несмотря на схожесть по размеру или времени изменения), rsync применит алгоритм дельта-передачи для передачи только тех блоков данных, которые отличаются между исходным и целевым файлами. Это означает, что вместо передачи целиком нового файла, только различия (дельты) между файлами будут отправлены, что позволяет сэкономить пропускную способность сети.
Отвечая на ваш вопрос, использование опций --no-W
или -W
в rsync также оказывает влияние на поведение программы. Опция --no-W
отключает оптимизацию, при которой rsync считает файл идентичным по имени, размеру и времени модификации. Это может привести к повторной передаче файлов, даже если они одинаковы. В то же время опция -W
указывает на то, что передавать нужно именно полные файлы, игнорируя механизм дельта-передачи.
Таким образом, если вы не укажете специальные параметры, rsync будет избегать повторной передачи идентичных файлов, и будет применять дельта-передачу только на несовпадающих файлах, минимизируя объем передаваемых данных.
В общем, рекомендуется использовать флаги --times
(или -t
), чтобы rsync мог правильно обрабатывать файлы на основе времени их модификации, что обеспечит более эффективную синхронизацию между источником и приемником.