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