Контрольные суммы для проверки передачи с помощью rsync

Вопрос или проблема

Таким образом, rsync выполняет некоторые контрольные суммы в процессе принятия решения о том, что передавать (т.е. какие блоки внутри файла). Но есть ли причины доверять файлу, который вы получаете на стороне приемника, больше, чем при обычной сетевой передаче? Должен ли я запускать контрольные суммы после завершения работы rsync, чтобы проверить данные? Является ли повторный запуск rsync с включенной предварительной проверкой (т.е. с опцией –checksum) общепринятым способом для этого?

В общем, механизм контрольных сумм rsync довольно надежен. Здесь компромисс заключается в следующем: вы можете сделать больше проверок, но это займет больше времени. Если вы действительно обеспокоены тем, что набор файлов должен быть точно таким же на двух машинах, вам следует выполнить отдельную проверку. Например, вы можете использовать md5sum для списка файлов с обеих сторон и сравнить результаты. Предполагая, что файлы не изменяются за это время (например, журнальные файлы), это даст вам очень высокую уверенность в том, что файлы идентичны на обеих сторонах.

Используйте rsync -Pahn --checksum /path/to/source /path/to/destination | sed '/\/$/d' | tee migration.txt

sed удаляет директории из проверки контрольных сумм. tee выводит одновременно на экран и в файл.

Имейте в виду, что этот метод может не подойти, если у вас очень большие файлы, так как проверка займет много времени.

Источник

Специально для вашего случая существует специальный инструмент для мониторинга целостности файлов после синхронизации. Он работает независимо от rsync и полностью с открытым исходным кодом.

https://github.com/precizer/precizer

precizer — это легковесное и чрезвычайно быстрое приложение командной строки, полностью написанное на чистом C. Оно предназначено для проверки целостности и сравнения файлов, что делает его особенно полезным для проверки результатов синхронизации. Программа рекурсивно обходит директории, создавая базу данных файлов и их контрольных сумм для быстрого и эффективного сравнения.

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

Простой пример

Рассмотрим сценарий, когда две машины имеют большие смонтированные тома на /mnt1 и /mnt2, соответственно, содержащие идентичные данные. Цель — проверить побайтово, действительно ли содержимое идентично, или имеются расхождения.

  1. Запустите precizer на первой машине (например, с именем хоста host1):

    precizer –progress /mnt1

Эта команда рекурсивно обойдет все директории под /mnt1, создавая файл базы данных host1.db в текущем каталоге. Флаг --progress обеспечивает обновления хода выполнения в реальном времени, отображая общий пройденный объем и количество обработанных файлов.

  1. Запустите precizer на второй машине (например, с именем хоста host2):

    precizer –progress /mnt2

Это создаст файл базы данных host2.db в текущем каталоге.

  1. Скопируйте host1.db и host2.db на одну из машин и выполните следующую команду, чтобы сравнить их:

    precizer –compare host1.db host2.db

Вывод покажет:

  • Файлы, которые существуют на host1, но отсутствуют на host2, и наоборот.
  • Файлы, присутствующие на обоих узлах, но имеющие разные контрольные суммы.

Ответ или решение

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

Теория

rsync — это мощный инструмент для синхронизации файлов, который на текущий момент стал стандартом де-факто для копирования и зеркалирования данных. Он использует алгоритмы проверки контрольных сумм и сравнения временных меток, чтобы определить, какие файлы требуют обновления, что позволяет минимизировать объем передаваемых данных. Тем не менее, вопрос целостности данных после передачи остается открытым, так как сетевые сбои или аппаратные неисправности могут повлиять на выходные файлы.

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

Пример

Допустим, вам нужно убедиться, что после использования rsync на вашем сервере данные передались корректно. В этом случае вы можете использовать различные методы для проверки целостности:

  1. Повторная проверка с использованием --checksum:
    Повторный запуск команды rsync с опцией --checksum поможет дополнительно убедиться, что все файлы на источнике и получателе идентичны.

    rsync -av --checksum /path/to/source /path/to/destination
  2. Использование md5sum:
    Вы можете сгенерировать контрольные суммы файлов на обоих серверах и сравнить их. Это очень надежный метод, поскольку md5 хеши имеют крайне низкую вероятность коллизии (хотя и не нулевую).

    md5sum /path/to/files/* > /path/to/checksums_on_source.txt

    Затем повторите ту же команду на принимающей стороне и сравните результаты.

  3. Использование precizer:
    precizer — это инструмент, специально предназначенный для проверки целостности данных после их синхронизации или перемещения. Это утилита, написанная на C и предназначенная для быстрого сравнения и проверки файлов, включая поддержку работы на больших объемах данных. Вы можете создать базу данных контрольных сумм на обеих конечных точках и сравнить их для определения расхождений.

Применение

Выбор подходящего инструмента или метода для проверки целостности данных зависит от конкретных бизнес-требований вашей организации, объемов и характеристик данных, а также от степени критичности этих данных.

Если вы работаете с высокочувствительными или критически важными данными, рекомендуется выбрать более надежные методы проверки, такие как precizer или md5sum, в дополнение к стандартным методам rsync. Если же объемы данных огромны, то время, требуемое для генерации контрольных сумм, может стать бутылочным горлышком, и в этом случае нужно балансировать между скоростью и надежностью.

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

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

Оцените материал
Добавить комментарий

Капча загружается...