До сих пор я делал резервные копии с помощью rsync с моего компьютера на внешний диск. Резервные данные состоят из десятков тысяч маленьких файлов и сотен больших (почтовые сообщения Maildir и эпизоды моей любимой серии). Проблема заключается в том, что в случае сбоя одного сектора моего резервного диска возможно может быть повреждено одно сообщение, что я считаю недопустимым.
Я подумал об альтернативе, которая работает следующим образом. Существует три дерева: дерево файлов, состоящее из данных, которые я хочу сохранить, дерево резервных копий, содержащее копию дерева файлов в данный момент времени, и дерево хешей, которое содержит хэши файлов и хэши метаданных дерева резервных копий. Хеш всего хеш-дерева также сохраняется. Перед резервным копированием проверяется хеш дерева хешей. Ошибка здесь делает недействительными все резервные копии данных. После успешной проверки форма хэш-дерева сравнивается с формой дерева резервных копий, и хэши метаданных проверяются, чтобы убедиться, что в дереве резервных копий метаданные и форма соответствуют друг другу. Если это не так, отдельные виновники могут быть перечислены. После этого выполняется обход резервного копирования rsync. Всякий раз, когда rsync обновляет файл, его новый хэш и хеш метаданных вычисляются и вставляются в дерево хешей. Всякий раз, когда rsync удаляет файл, этот файл удаляется из дерева хешей. В конце хеш дерева хешей вычисляется и сохраняется.
Этот процесс очень полезен, потому что хеш-коды вычисляются для правильных данных, то есть даже если файл в дереве файлов поврежден после того, как он был вставлен в хеш-дерево, это несоответствие не делает недействительной резервную копию (или будущие резервные копии) , Однако наиболее важным свойством является то, что если злоумышленник испортит резервный носитель, как ему угодно, информация, которая там находится, будет доверенной, если и только если она верна, если злоумышленник не нарушил алгоритм хэширования. Кроме того, данные, отправленные в резервную копию или восстановленные из нее, можно проверять постепенно.
Мой вопрос: есть ли разумная реализация такой схемы резервного копирования? Мои поиски показывают, что единственные доступные схемы резервного копирования либо выполняют полное, либо дифференциальное резервное копирование (например, на основе tar) или не обеспечивают гарантию криптографической корректности (rsync).
Если нет реализации чего-либо подобного, возможно, я напишу ее, но я бы хотел не изобретать колесо.