Вопрос: Разница Rsync между параметрами --checksum и --ignore-times


Может ли кто-либо разъяснить различия между --checksum а также --ignore-times опции rsync?

Мое понимание таково:

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

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

Это техническая разница, но, насколько я могу судить, они семантически одно и то же.

Итак, мне интересно:

  • Какова практическая разница между двумя вариантами?
  • В каких случаях вы бы использовали один, а не другой?
  • Есть ли разница в производительности между ними?

73
2017-12-09 20:15


Источник




Ответы:


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

--ignore-times говорит rsync чтобы отключить эвристику файлов и времени и, следовательно, безоговорочно передать ВСЕ файлы из источника в пункт назначения. rsync затем перейдет к чтению каждого файла со стороны источника, поскольку ему нужно будет либо использовать его алгоритм дельта-передачи, либо просто отправить все файлы целиком, в зависимости от того, будет ли --whole-file была указана опция.

--checksum также изменяет эвристику файла-времени и размера, но здесь он игнорирует время и рассматривает только размеры. Файлы в исходной и целевой сторонах, которые отличаются по размеру, переносятся, поскольку они явно различаются. Файлы с одинаковым размером проверяются (с MD5 в rsync версии 3.0.0+ или с MD4 в более ранних версиях), а также те, которые, как было установлено, имеют разные суммы, также переносятся.

В тех случаях, когда исходная и целевая стороны в основном одинаковы, --checksum приведет к тому, что большинство файлов будут проверяться с обеих сторон. Это может занять много времени, но результат заключается в том, что самый низкий минимум данных будет фактически передаваться по проводу, особенно если используется алгоритм дельта-передачи. Конечно, это только победа, если у вас очень медленные сети и / или очень быстрый процессор.

--ignore-times, с другой стороны, отправит больше данных по сети, и это приведет к чтению всех исходных файлов, но, по крайней мере, это не наложит дополнительного бремени вычисления многих криптографически сильных хэш-единиц на исходном и целевом процессорах. Я бы ожидал, что этот вариант будет работать лучше, чем --checksum когда ваши сети быстрые и / или ваш процессор относительно медленный.

Я думаю, что только когда-нибудь буду использовать --checksum или --ignore-times если я передавал файлы в пункт назначения, где подозревалось, что содержимое некоторых файлов было повреждено, но время модификации которого не было изменено. Я не могу думать о какой-либо другой веской причине использовать любой вариант, хотя, вероятно, есть другие варианты использования.


78
2017-12-09 23:41



Я нашел --checksum полезно вместе с --itemize-changes для проверки резервных копий. Каждый раз, когда текущие ежедневные / еженедельные обновления завершаются, мои сценарии резервного копирования запускают полное сравнение. Я получаю письмо с надписью --itemize-changes выводит что-то неожиданное, поэтому я знаю, что есть потенциальная проблема, которую я должен изучить. - David Spillett
--checkum полезен при работе в Git и переключении между ветвями с измененными файлами, что постоянно меняет время обновления на файлы, которые вы не собираетесь отправлять с определенной ветки. - FriendlyDev
--ignore-times и особенно --checksum необходимы, если один из ваших «файлов» - это контейнер файлов Truecrypt, поскольку по умолчанию временная метка файла не обновляется. Видеть productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs а также ask-leo.com/why_wont_my_truecrypt_volume_backup.html - Marcus Junius Brutus
Примечание. Я сделал быстрый эксперимент, и ctime не сравнивается, только mtime. На Мак, по крайней мере. Это может быть полезно знать. Вот почему у меня так много проблем с файловыми системами Windows, которые сообщают о времени (ctime) для atime, mtime и ctime. - Edward Falk
Есть ли --checksum контрольная сумма - только исходные имена файлов на конечном компьютере или все файлы в целевом каталоге? - Greg


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


12
2017-07-24 08:37





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

Кроме того, если у вас есть огромные файлы, вы, скорее всего, столкнетесь с таймаутом с --checksum, так как вы не -I,


4
2018-06-03 14:43





Из info rsync в отношении --checksum option - «Так как все контрольные суммы всех файлов на обеих сторонах соединения происходят в дополнение к проверкам автоматической проверки, которые происходят во время передачи файла, этот параметр может быть довольно медленным».


2
2017-12-09 20:34



Это предложение не похоже на мои страницы-мужчины ... так что это означает, что опция контрольной суммы будет использовать контрольные суммы, чтобы определить, идентичны ли файлы, и если они не будут переданы, тем самым генерируя контрольные суммы снова, как часть передачи? Опция -ignore-times просто пропускает чек и предполагает, что они изменились? Следовательно, лучший способ достижения одного и того же результата? Я все еще пытаюсь понять, почему есть два разных варианта (кроме того, что --checksum более прозрачен) - Andy Madge
Вы должны посмотреть последнее редактирование документации: gitweb.samba.org/... - Aleksandr Levchuk


--ignore-times вариант, вероятно, приведет ко всем файлам, дельта-кодированным, и алгоритм дельта-передачи (дельта-кодирование) будет, по меньшей мере, медленнее, чем контрольная сумма.

Я не знаю, если rsync --ignore-times достаточно умен, чтобы избежать «автоматической послепродажной проверки» в частом случае, когда дельта-передача не приведет к передаче ничего.

Для --ignore-times:

  • В случае, если rsync не является умным (или не доверяет дельта-кодировке), проверка (контрольная сумма и кодирование) будет выполняться дважды.
  • Также может случиться так, что дельта-кодирование происходит намного медленнее, чем 128-битная контрольная сумма MD4.

И то и другое --checksum а также --ignore-times будет «довольно медленным», но --ignore-times вероятно, еще медленнее (из-за вышеперечисленных возможностей).

Хороший вопрос - напишите, если вы обнаружите какие-либо различия в производительности на практике.


2
2017-12-09 22:22



Я понимаю что ты имеешь ввиду. Я проведу несколько тестов и отправлю обратно. - Andy Madge