Опубликован выпуск системы резервного копирования restic 0.15, обеспечивающей хранение резервных копий в зашифрованном виде в версионированном репозитории. Система изначально рассчитана на то, что резервные копии сохраняются в окружениях не заслуживающих доверия и попадание резервной копии в чужие руки не должно скомпрометировать систему. Возможно определение гибких правил для включения и исключения файлов и каталогов при создании резервной копии (формат правил напоминает rsync или gitignore). Поддерживается работа в Linux, macOS, Windows, FreeBSD и OpenBSD. Код проекта написан на языке Go и распространяется под лицензией BSD.
Резервные копии могут храниться в локальной ФС, на внешнем сервере с доступом по SFTP/SSH или HTTP REST, в облаках Amazon S3,
OpenStack Swift, BackBlaze B2, Microsoft Azure Blob Storage и Google Cloud Storage, а также в любых хранилищах для которых имеются бэкенды rclone. Для организации хранения также может быть использован специальный rest server, обеспечивающий более высокую производительность по сравнению с другими бэкендами и способный работать в режиме только для дополнения, который не позволит удалить или изменить резервные копии в случае компрометации исходного сервера и доступа к ключам шифрования.
Поддерживаются снапшоты, отражающие состояние определённого каталога со всеми файлами и вложенными каталогами в определённый момент времени. При каждом создании новой резервной копии создаётся ассоциированный с ней снапшот, позволяющий восстановить состояние в данный момент. Возможно копирование снапшотов между разными репозиториями. Для экономии трафика в процессе создания резервных копий копируются только изменившиеся данные. Для наглядной оценки содержимого репозитория и упрощения восстановления, снапшот с резервной копией может быть примонтирован в форме виртуального раздела (монтирование осуществляется при помощи FUSE). Также предоставляются команды для анализа изменений и выборочного извлечения файлов.
Система манипулирует не целыми файлами, а блоками плавающего размера, выбираемыми с использованием подписи Рабина. Информация хранится в привязке к содержимому, а не именам файлов (связанные с данными имена и объекты определяются на уровне метаданных блока). На основании SHA-256 хэша от содержимого выполняется дедупликация и исключение лишнего копирования данных. На внешних серверах информация сохраняется в зашифрованном виде (для контрольных сумм используется SHA-256, для шифрования AES-256-CTR, а для гарантирования целостности – коды аутентификации на основе Poly1305-AES). Предусмотрена возможность верификации резервной копии по контрольным суммам и кодам аутентификации для подтверждения, что целостность файлов не нарушена.
В новой версии:
- Реализована новая команда rewrite, позволяющая удалить лишние данные из снапшота, например, когда в резервную копию по недосмотру попали файлы, изначально не предназначенные для резервного копирования (например, файлы с конфиденциальной информацией или не представляющие ценности очень крупные логи).
- В команду backup добавлена опция “–read-concurrency” для задания уровня распараллеливания при чтении файлов, позволяющего ускорить копирование на быстрых накопителях, таких как NVMe.
- В команду backup добавлена опция “–no-scan” для отключения стадии сканирования дерева файлов.
- В команде prune значительно (до 30%) сокращено потребление памяти .
- В команду restore добавлена опция “–sparse” для эффективного восстановления файлов с большими пустыми областями.
- Добавлена поддержка восстановления символических ссылок на платформе Windows.
- В macOS добавлена возможность монтирования репозитория с резервными копиями при помощи macFUSE.