Перенесите сегодняшние резервные копии borg в другое репозитори.

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

Вот моя текущая стратегия резервного копирования. У меня есть множество (скажем, 200) серверов, которые запускают периодический скрипт резервного копирования borg (развернутый с помощью этой роли ansible: https://github.com/mad-ady/ansible-role-borgbackup) на центральный сервер резервного копирования через ssh.

У каждого сервера есть свой пользователь ssh, своя домашняя директория и свой репозиторий на удаленном сервере резервного копирования. И резервное копирование работает нормально (с учетом сжатия/дедупликации)! 🙂

Теперь я хотел бы иметь возможность периодически делать снимок только “сегодняшних резервных копий” и помещать их на другое хранилище для избыточности. Я хотел бы избежать копирования всего репозитория (например, с помощью rsync), так как у локального сервера резервного копирования есть довольно строгая политика хранения (например, сохранение ежедневных резервных копий за последние 6 месяцев), в то время как удаленный сервер будет иметь ограниченные возможности хранения/пропускной способности. Некоторые данные, скопированные в резервную копию, хорошо дедуплицируются, в то время как другие данные довольно динамичны и плохо дедуплицируются.

Итак, мой вопрос – есть ли способ перенести конкретный снимок резервной копии из репозитория borg в другой репозиторий borg? Я могу итерировать каждый репозиторий и извлекать сегодняшние резервные копии (вот пример):

_etc-20210615-0105                   Вт, 2021-06-15 01:05:04 [d382788354e3e5a535fd570cea2fe741e1c69734c14d43ec6e59f856dadab83c]
_var_www_html-20210615-0105          Вт, 2021-06-15 01:05:24 [e46d6ad7313e158172a46f0908bf3b16f450d06d2c410a0c612fe0453f18871e]
_var_spool_cron-20210615-0105        Вт, 2021-06-15 01:05:48 [0f50160706d97754a3a6620456f350d477aa8797d9a43a1de0f8bfcb06531f79]
mysqldump-20210615-0105              Вт, 2021-06-15 01:05:53 [258f604bf4d1c2196c3e1df14878c78e56560b2c9c839a2e666efa27ddd6ac8d]

… но как бы я перенес их в другой репозиторий (в идеале без восстановления их во временную папку и повторного архивирования)?
Один из способов, который я могу придумать, это смонтировать каждый архив и затем запустить borg на нем. Это предотвратило бы лишнее использование диска, но означало бы декомпрессию и повторную компрессию данных…

Спасибо!

borg2: borg transfer

Похоже, что borg2 будет иметь эту функцию: https://borgbackup.readthedocs.io/en/master/usage/transfer.html

Эта команда переносит архивы из одного репозитория в другой репозиторий.

Это может стать предпочтительным методом, когда выйдет borg2.

borg1: borg export-tar | borg import-tar

Использование export-tar и import-tar работает на базовом уровне, но теряется некоторая метаинформация, такая как временные метки mtime/ctime. Пример вызова:

borg export-tar repo1::archive1 - | borg import-tar repo2::imported -
borg list repo2

borg1: borg mount

Это также должно работать без (значительных) потерь производительности: Смонтируйте существующий архив и создайте резервную копию оттуда:

borg mount repo1::archive1 mountpt
cd mountpt
borg create ../repo2::imported .

Примечания

Я не знаю, какое решение является предпочтительным. По крайней мере, монтирование создает блокировку на репозитории, что означает, что borg create будет неудачным, пока не будет выполнено размонтирование.

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

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

Теория

Прежде всего важно понимать, что Borg — это система для эффективного создания резервных копий с поддержкой дедупликации данных, сжатием и шифрованием. Она может работать локально и через SSH, что делает её пригодной для масштабных архитектур, как ваш текущий план резервного копирования. Перед вами стоит задача переноса "сегодняшних" архивов на другой сервер, не затрагивая все данные репозитория, чтобы избежать нехватки места или пропускной способности.

Применение методов для переноса резервных копий

Решение 1: Использование borg2 transfer

Самый простой и эффективный способ — воспользоваться будущей функцией borg2 под названием borg transfer, которая специально предназначена для переноса архивов из одного репозитория в другой. Однако, учитывая, что borg2 может еще не быть широко доступным или стабильным в вашей среде, возможно, потребуется рассмотреть альтернативные методы, актуальные для borg1.

Решение 2: Использование borg export-tar и borg import-tar

Это решение позволяет экспортировать архивы в формате tar, который затем можно импортировать в другой репозиторий. Этот метод прост в реализации, но, как вы правдиво заметили, он теряет часть метаданных, таких как временные метки mtime/ctime. Если потеря метаданных является критичной для вашей стратегии резервного копирования, этот метод может не подойти.

Команда будет выглядеть следующим образом:

borg export-tar repo1::archive1 - | borg import-tar repo2::imported -
borg list repo2

Решение 3: Использование borg mount

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

Пример команды:

borg mount repo1::archive1 mountpt
cd mountpt
borg create ../repo2::imported .

Применение на практике

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

Для настоящего времени вы можете внедрить монтирование архивов (Solution 3), а в будущем перейти на использование borg2 и его функцию transfer. Таким образом, вы сможете плавно перейти к более оптимальному и удобному способу, когда будет доступна новая версия.

Заключение

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

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

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