Действительно ли rsync работает с файлами, которые изменились? - PullRequest
2 голосов
/ 09 ноября 2010

Почему я не могу доверять rsync так же быстро, как и cp? (Я игнорирую незначительные различия для накладных расходов.)

Мне кажется, что rsync довольно медленно работает с файлами без разницы в содержимом, но с измененной отметкой времени.

Если я создаю файл: cp -a testfile-100M destfile

А потом я их повторю, получаю то, что вы ожидаете:

$ rsync -av testfile-100M destfile отправка списка добавочных файлов

отправлено 56 байт, получено 12 байт 8,00 байт / с общий размер 104857600 ускорение 1542023.53

Но это только потому, что rsync проверяет размер и временную метку и пропускает файл. Что если я просто поменяю метку времени?

$ touch testfile-100M

$ rsync -av testfile-100M destfile отправляет список добавочных файлов TestFile-100M

отправлено 104870495 байт, получено 31 байт, 113804,15 байт / с общий размер 104857600 ускорение составляет 1,00

Также обратите внимание, что, несмотря на то, что ускорение равно 1, начальная копия заняла примерно 1/4 времени для завершения, чем заключительная rsync, даже если содержимое точно такое же. Так что здесь происходит? Это все накладные расходы на сравнение?

Если это так, то когда rsync дает преимущество в производительности? Только когда файлы одинаковы с обеих сторон?

Ответы [ 4 ]

3 голосов
/ 02 апреля 2015

Для локальных файлов, если размер или mtime изменились, rsync по умолчанию просто копирует все без использования дельта-алгоритма. Вы можете отключить это с параметром --no-whole-file, но для локальных копий это обычно будет медленнее.

Для конкретного случая касания файла без его изменения:

  • Если вы укажете параметр --size-only, он будет предполагать, что файлы одинакового размера неизменны.

  • Если вы укажете параметр --checksum, он сначала хеширует файл, чтобы узнать, изменилось ли что-нибудь, прежде чем копировать его.

2 голосов
/ 09 ноября 2010

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

РЕДАКТИРОВАТЬ: Поскольку кто-то чувствовал необходимость понизить этот древний ответ ... Что касается того, почему rsync для локальных файлов может быть медленнее, чем cp, то, похоже, нет веской причины.

1 голос
/ 04 октября 2016

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

0 голосов
/ 12 ноября 2012

Интересно, что для меня rsync примерно в 4 раза быстрее, чем cp для копирования на внешний USB-накопитель.

...