Вышел первый публичный релиз утилиты резервного копирования с глобальной дедупликацией zbackup. Программа находит области, содержащие одни и те же данные во всех сохраняемых в неё образах, и сохраняет их только один раз. Данные затем сжимаются и, по желанию, шифруются. Оптимально подавать на вход один большой .tar файл, содержащий полный бэкап системы, или же непосредственно сырой образ диска, подлежащий резервному копированию - программа не пытается интерпретировать формат файла, а просто дедуплицирует любой полученный от пользователя. Дедупликация глобальна - данные, полученные в разное время из разных образов, сохраняются только один раз. За счет этого достигается высокая инкрементальность и низкие затраты дискового пространства.
Для достижения данной функциональности программа использует кольцевую хэш-функцию со скользящим окном для побайтной проверки на совпадение с уже существующими блоками данных, наподобие того, как это реализовано в программе rsync.
Программа имеет следующие особенности по сравнению с другими ей подобными:
- Многопоточное сжатие данных с помощью алгоритма LZMA;
- Встроенное в программу шифрование AES;
- Возможность в будущем удалять старые данные из хранилища;
- Использование 64-битной кольцевой хэш-функции, что позволяет достичь гораздо большей масштабируемости по сравнению с обычно использующимися 32-битными;
- Написана на C++ с минимальными зависимостями;
- Безопасна для использования на реальных данных. Так как программа никогда не модифицирует существующие файлы, добавляя только новые, достаточно после сохранения бэкапа просто восстановить его обратно в /dev/null. Для каждого бэкапа сохраняется его SHA256-сумма, проверяемая при восстановлении. Если восстановление прошло успешно, значит, оно будет так же успешно и в будущем. Объем кода, который осуществляет подсчет SHA256-суммы на входе и сверяет его на выходе очень мал и легко поддается аудиту.
Стоит отметить, что данные подавать в программу надо в несжатом и нешифрованном виде (например, то, что выдает tar c), иначе дедупликацию произвести не получится. Лучше всего подавать большие файлы типа несжатых .tar или сырых дисковых образов. Результирующий репозиторий можно копировать на другие машины с помощью rsync, или же хранить в любых облачных хранилищах, в которых можно хранить обычные файлы. Так как программа никогда не модифицирует уже существующие файлы, последнее довольно удобно - достаточно просто не копировать те файлы, которые уже есть на удаленном хранилище. А встроенное шифрование позволяет не заботится о конфиденциальности хранимых там данных.
В заключение можно добавить, что автор использовал предыдущую версию программы на реальных данных уже больше года и не имел никаких проблем. Что касается эффективности дедупликации, например, .tar-файл с ежедневным домашним бэкапом занимает 25GB, а 185 таких бэкапов за прошедший год в хранилище zbackup занимают суммарно только лишь 18GB, то есть даже меньше, чем один ежедневный образ. При этом, разумеется, можно восстановить любой из этих образов обратно байт в байт так, как они были изначально созданы.
Домашняя страница программы: http://zbackup.org/
Страница разработки на github: https://github.com/zbackup/zbackup/