rsync всегда использует контрольные суммы для проверки правильности передачи файла. Если целевой файл уже существует, rsync может пропустить обновление файла, если время и размер изменения соответствуют исходному файлу, но если rsync решает, что данные должны быть переданы, контрольные суммы всегда используются для данных, передаваемых между отправляющим и получающим процессами rsync. , Это подтверждает, что полученные данные совпадают с данными, отправленными с высокой вероятностью, без значительных накладных расходов при сравнении на уровне байтов по сети.
Как только данные файла получены, rsync записывает данные в файл и полагает, что, если ядро указывает на успешную запись, данные были записаны без повреждения на диск. rsync не перечитывает данные и сравнивает их с известной контрольной суммой в качестве дополнительной проверки.
Что касается самой проверки, для протокола 30 и выше (впервые поддерживается в 3.0.0), rsync использует MD5 . Для старых протоколов используется контрольная сумма MD4 .
Хотя долго считалось устаревшим для безопасных криптографических хэшей, MD5 и MD4 остаются адекватными для проверки повреждения файлов.
Источник: справочная страница и просмотр исходного кода rsync для проверки.
-c
флагу: «Обратите внимание, что rsync всегда проверяет, что каждый переданный файл был правильно восстановлен на принимающей стороне, проверяя контрольную сумму всего файла, которая генерируется при передаче файла, но эту автоматическую после передачи проверка не имеет ничего общего с опцией перед передачей этой опции "Нужно ли обновлять этот файл?"rsync
это не делать проверку после копирования для локальных копий файлов. Вы можете убедиться, что это не так,rsync
скопировав большой файл на медленный (например, USB) диск, а затем скопировав тот же файлcp
, например:Обе команды занимают примерно одинаковое количество времени, поэтому
rsync
не могут выполнять контрольную сумму, поскольку это потребует повторного чтения файла назначения с медленного диска.man
Страница , к сожалению , вводящим в заблуждение по этому поводу. Я также проверил это с помощью -strace
после того, как копия завершена,rsync
неread()
вызывает никаких вызовов для файла назначения, поэтому он не может быть контрольной суммой. Еще один, вы можете проверить это с помощью чего-то вродеiotop
: вы видите, чтоrsync
делаете чтение и запись одновременно (копирование из источника в место назначения), затем он завершается. Если бы это проверяло целостность, была бы фаза только для чтения.источник
rsync -c
снова, если хотите заставить его проверить.rsync
делает сравнение контрольной суммы перед копированием (в некоторых случаях), чтобы избежать копирования того, что уже есть. Смысл сравнения контрольной суммы не в том, чтобы убедиться, что копия была успешной. Это работа базовой инфраструктуры: драйверы файловой системы, драйверы дисков, сетевые драйверы и т. Д. Отдельные приложения, напримерrsync
, не должны беспокоиться об этом безумии. Все, чтоrsync
нужно сделать (и делает!), Это проверить возвращаемые значения системных вызовов, чтобы убедиться в отсутствии ошибок.источник
Быстрые и грязные ответы, прямо на вопросы.
Q: Будет ли
rsync
сравнение при копировании файлов между двумя локальными дисками? A: Это сделает сравнение, чтобы выяснить, что копировать.Q: Если это делает проверку - это безопасная ставка? Или лучше сделать байтовое сравнение? A: так же безопасно, как математика, лежащая в основе контрольной суммы файла MD5. Вы можете попытаться сделать простой эксперимент, чтобы изучить и доверять инструменту.
Длинный ответ: Я думаю, вы хотели
rsync
сделать сравнение файлов (по битам или по контрольной сумме) после копирования файлов. Если вы один из немногих, кто ценит целостность данных, вам может пригодиться следующее:Приведенная выше
rsync
папка с файлами кода при первом запуске и, если она завершена без проблем,rsync
сразу же запустится снова, выполняя сравнение с тем же именем файла, используя хэш всего файла.источник
Использование rsync для проверки целостности дубликата
Чтобы гарантировать, что этот тест физически перечитывает файлы с носителя, я предлагаю отключить оба диска и перезапустить их перед запуском этого теста. Это очистит их внутренние изменчивые кэши.
Если вы не перезагружаете Linux, вы должны по крайней мере удалить кеши ( * ) с помощью:
Затем перечитайте оба дерева и сравните их контрольные суммы:
Современная контрольная сумма rsync использует MD5, который составляет 128 бит. Вероятность того, что не удастся обнаружить ошибку в отдельном файле, астрономически мала (некоторые здесь обсуждаются ), но не невозможна.
источник
--checksum
пока тест не пройдет без него.