Скажем, у меня есть каталог с 2 файлами, оба одинаковые и довольно большие (например, 2 ГБ шт.). Я хочу выполнить синхронизацию этого каталога с удаленным хостом. Насколько я понимаю (и могу ошибаться), rsync вычисляет контрольные суммы файлов. Конечно, если он видит 2 файла с одинаковой контрольной суммой, он может просто скопировать первый файл, а затем сделать локальную копию на удаленном хосте для второго файла? Это сделало бы его быстрее, не так ли?
Аналогичным образом, не хеширует ли rsync все удаленные файлы перед копированием? Если он видел другой файл с тем же хешем, что и файл, который должен был быть передан, он мог сделать локальную копию на удаленном хосте.
Поддерживает ли rsync такие вещи? Есть ли способ включить? Есть ли инструмент, похожий на rsync, который будет делать такие локальные копии на основе хэша?
Аналогичным образом, не хеширует ли rsync все удаленные файлы перед копированием? Если он видел другой файл с тем же хешем, что и файл, который должен был быть передан, он мог сделать локальную копию на удаленном хосте.
нет, но Унисон делает.
git сделает то, что вы описываете
Если оба ваших файла действительно идентичны, вам придется выполнить rsync для одного из файлов, а затем сделать локальную копию отдельно на удаленной стороне, вне процесса rsync.
Если у вас есть два одинаковых файла, то rsync попытается скопировать их оба - имя файла, а не контрольная сумма, является наиболее важным идентификатором. (Я только что протестировал это на своем ноутбуке!)
Было бы интересно обернуть rsync, чтобы сделать кое-что из того, что вы упомянули ...
Их стоит прочитать:
Я не верю, что сегодня есть какой-либо продукт, готовый сделать это в виде единого программного пакета. Есть оптимизаторы WAN, которые сделают это за вас, и тогда вы по-прежнему запускаете RSYNC.
То, что вы ищете, - это процесс дедупликации / дублирования. В идеале вы на самом деле хотели бы не дублировать, а локально выполнять дедупликацию, а затем выполнять RSYNC. Таким образом, вы копируете только ссылки, а не расширяете файлы на другой стороне.
Параметр --fuzzy мощь делай то, что ищешь:
На странице руководства:
-y, --fuzzy
Эта опция сообщает rsync, что он должен искать базовый файл для любого отсутствующего файла назначения. Текущий алгоритм ищет в том же каталоге, что и целевой файл, либо файл с таким же размером и временем изменения, либо файл с таким же именем. В случае обнаружения rsync использует файл нечеткой основы, чтобы попытаться ускорить передачу.
Если это не так, кто-то с соответствующими навыками программирования должен иметь возможность довольно легко настроить этот параметр, чтобы он вел себя так, как вы описываете - хотя, вероятно, это не то, во что вы хотели бы принимать участие!
возможно, это не то, что вам нужно, но EMC avamar может это сделать ... он создает список контрольных сумм и сравнивает их с локальным, и передает только файлы, которых еще нет в локальной резервной копии (даже если файл поступает с другого компьютера). . Он выполняет дедупликацию перед копированием и очень полезен на аналогичных машинах
но это только для резервных копий, а не для простых копий ... а авамар стоит недешево :)
Ближайшая альтернатива avamar с открытым исходным кодом, которую я знаю, это backuppc ... он по-прежнему использует rsync и выполняет только дедупликацию уже переданных файлов