Введение в резервное копирование Borg

baltun

Администратор
Сообщения
10.731
Реакции
2.542
Баллы
2.003
Borg - очень полезное приложение, которое мы можем использовать для создания дедупликационных резервных копий в Linux. Бесплатное программное обеспечение с открытым исходным кодом, оно по большей части, написано на Python и поддерживает сжатие и шифрование данных. Благодаря функции дедупликации данных архивируются только те данные, которые фактически изменяются, и это позволяет оптимизировать как дисковое пространство, так и время выполнения. Borg действительно прост в установке, так как он упакован и включен в репозитории наиболее часто используемых дистрибутивов Linux.

Установка Borg:
Код:
sudo dnf install borgbackup

Как работает Borg​

Borg — это то, что называется «дедуплицирующей программой резервного копирования». Подобно тому, что происходит с инкрементными резервными копиями, только данные, которые фактически изменяются в файловой системе после выполнения полного резервного копирования, архивируются в последующих резервных копиях, но сходства являются только концептуальными. Borg работает, разбивая каждый файл на куски, которые идентифицируются по их хэшсумме. В "репозиторий" добавляются только блоки, не распознаваемые приложениями. Этот метод дедупликации действительно эффективен, поскольку, среди прочего, позволяет нам перемещать файл или каталог, не считая это изменением и следовательно, не требуя дополнительного пространства. То же самое происходит с временными метками файлов. Что действительно имеет значение, так это только фрагменты файлов, которые хранятся только один раз. В Linux Borg поддерживает сохранение всех стандартных и расширенных атрибутов файловой системы, таких как ACL и xattrs.

Самое первое, что нам нужно сделать, чтобы использовать Borg, это инициализировать каталог, в котором мы хотим хранить архивы, как репозиторий Borg.
Код:
borg init --encryption=repokey /mnt/borg

Когда мы инициализируем репозиторий, мы должны решить, какой тип шифрования мы хотим использовать для наших резервных копий. Выбор, который мы делаем, действительно важен и не может быть изменен позже. Основные режимы шифрования, которые мы можем выбрать, следующие:
  • repokey/keyfile
  • authenticated
  • none
Параметры repokey и keyfile используют шифр AES-CTR-256 для шифрования. Разница между ними заключается в том, где хранится ключ шифрования. Если мы выберем "repokey", ключ шифрования будет сохранен в конфигурационном файле репозитория, поэтому безопасность резервных копий будет основана только на парольной фразе, которую нам будет предложено предоставить во время инициализации. Если мы выберем режим «keyfile», вместо этого ключ шифрования будет храниться в нашем домашнем каталоге, поэтому для расшифровки или создания архива нам нужно будет что-то иметь (ключ) и знать что-то (парольная фраза). В обоих случаях всегда полезно создать резервную копию ключа шифрования. ~/.config/borg/keys
Если мы рано или поздно решим, что хотим изменить парольную фразу, мы можем просто сделать это с помощью команды «key change-passphrase», предоставив в качестве аргумента путь к репозиторию:
Код:
borg key change-passphrase /mnt/borg

Как только мы выполним команду, нам будет предложено ввести текущий пароль ключа репозитория и два раза для нового:
Код:
Enter passphrase for key /mnt/borg:
Enter new passphrase:
Enter same passphrase again:

После инициализации репозитория внутри него будет создана куча файлов и каталогов:
Код:
ls /mnt/borg
total 68
-rw-------. 1 egdoc egdoc 700 Apr 23 19:20 config
drwx------. 3 egdoc egdoc 4096 Apr 23 19:19 data
-rw-------. 1 egdoc egdoc 52 Apr 23 19:19 hints.1
-rw-------. 1 egdoc egdoc 41258 Apr 23 19:19 index.1
-rw-------. 1 egdoc egdoc 190 Apr 23 19:19 integrity.1
-rw-------. 1 egdoc egdoc 16 Apr 23 19:19 nonce
-rw-------. 1 egdoc egdoc 73 Apr 23 19:19 README

Опять же, поскольку мы использовали режим "repokey", ключ шифрования хранится в файле репозитория "config":
Код:
[repository]
version = 1
segments_per_dir = 1000
max_segment_size = 524288000
append_only = 0
storage_quota = 0
additional_free_space = 0
id = a1dccd1d4613d4f582cb4617f3393656e0a0f05db1fb9c90e0aa5b3e675bf17f
key = hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAN6CZjFu1nnPs3QMuYTQ4O1m1jC+pVQjpGR3pR
b+pq20AxAPXboKEQsUmBajJXm0m/7Box9WSzw6IrizBPDSxERhys1d3piFUUsVRJ7GzjNO
lfcgVRpy2BpI9w/QXPgOl6FjCmp2HU5R5YdQjtEH4aUND702hWFBfI486oZJ94v/LrUVRm
8MFmC8KSXXNHBbuRXOvBnH+cME0Owz/kRLQEGHFaxD18F+dZOVV+1wEn+UDL6XsIA7FKk4
jwHxWVzoekGeHsVcDKXlXg1FWN9ck6QRWipgojUMvFvt9/wTinGkaGFzaNoAILRxN39c/m
yH7mzsXEqdxx3vvi6rh3X9rqlab4BD2tDrqml0ZXJhdGlvbnPOAAGGoKRzYWx02gAg/Tam
mSE01YTDzTiPyYDPszuBt01L/Gfrt6dgN7v/veqndmVyc2lvbgE=

Создание архивов​

Архивы Borg создаются с помощью команды "create". Чтобы создать первую относительную резервную копию домашнего каталога, мы сначала перейдем в наш домашний каталог, а затем выполним:
Код:
cd && borg create --list /mnt/borg::archive-{hostname}-{now} .
Давайте посмотрим на команду. Мы вызвали borg с командой «create» и использовали опцию: это не обязательно, но это приведет к тому, что обработанные файлы и каталоги будут напечатаны на стандартном выходе. Затем мы предоставили путь к репозиторию, в котором должен быть сохранен архив, и имя архива, отделенное от последнего двойным двоеточием. Удобно, что для составления имени архива можно использовать ряд переменных: --list
  • {now} — заменяется текущей, локализованной датой и временем
  • {utcnow} — то же самое, что и выше, но вместо этого используется время UTC
  • {fqdn} — заменяется полным доменным именем компьютера
  • {hostname} — заменяется именем хоста компьютера.
  • {user} — заменяется именем пользователя, который запустил команду.
Наконец, мы указали путь к каталогу, для которого мы хотим создать резервную копию. Как только мы выполним команду, нам будет предложено ввести пароль, который мы выберем при инициализации репозитория:
Код:
Enter passphrase for key /mnt/borg:

По умолчанию архивы сжимаются с помощью алгоритма lz4, но это можно изменить с помощью опции. Мы можем использовать другие алгоритмы, такие как zlib или lzma, а также указать уровень сжатия со следующей нотацией: --compression
Код:
<algorithm>,<compression-level>

Где должно быть выражено в виде целого числа от 0 до 9. Просто в качестве примера, чтобы использовать алгоритм lzma с максимально доступным сжатием, мы бы запустили: <compression-level>
Код:
borg create --list --compression lzma,9 /mnt/borg::archive-{hostname}-{now} .

Получение списка архивов в репозитории​

Чтобы получить список архивов, хранящихся в репозитории Борга, мы можем использовать команду "list" и передать путь к репозиторию в качестве аргумента. В нашем случае мы бы запустили:
Код:
borg list /mnt/borg

Нам снова будет предложено ввести пароль, связанный с репозиторием. Как только мы это сделаем, отобразится список архивов, содержащихся в репозитории:
Код:
archive-fingolfin-2022-04-23T19:33:58 Sat, 2022-04-23 19:34:00 [4454c59a6d88b7e905612aa642f64c5341a63acd717c26061c3156f65bced397]

Команда "list" также может быть использована для получения списка файлов, содержащихся в архивах. Например, чтобы перечислить содержимое архива, который мы создали в этом учебнике, мы запустим:
Код:
borg list /mnt/borg::archive-fingolfin-2022-04-23T19:33:58

Монтирование архива​

Если мы хотим исследовать содержимое архива (скажем, мы хотим проверить содержимое некоторых файлов), мы можем смонтировать его в каталог в файловой системе. Команда, которая позволяет нам выполнить указанную задачу, - это "mount". Например, чтобы смонтировать резервную копию ":archive-fingolfin-2022-04-23T19:33:58" в нашем репозитории в каталоге /tmp/borg, мы выполним:
Код:
sudo borg mount /mnt/borg::archive-fingolfin-2022-04-23T19:33:58 /tmp/borg

Архив будет смонтирован так же, как файловая система в указанном каталоге, и его содержимое будет легко доступно. Очень удобно. Помимо конкретного архива, мы можем смонтировать репозиторий целиком:
Код:
sudo borg mount /mnt/borg /tmp/borg

Восстановление архива​

Если происходит что-то плохое, и нам нужно восстановить резервную копию, которую мы создали с помощью Борга, мы должны использовать команду «extract». При выполнении команды архив извлекается в текущий рабочий каталог, поэтому для восстановления файлов в нашем домашнем каталоге мы должны сначала переместиться внутрь него:
Код:
cd

Как только мы окажемся в каталоге, в который мы хотим извлечь архив, мы можем выполнить команду «extract». Как обычно, мы передаем путь к репозиторию вместе с именем архива, который должен быть извлечен в качестве аргумента, и нам предлагается ввести пароль репозитория. В приведенном ниже примере мы включили опцию в команду для визуализации извлеченных файлов: --list
Код:
borg extract --list  /mnt/borg::archive-fingolfin-2022-04-23T19:33:58

Если мы хотим восстановить только некоторые конкретные файлы из архива, мы можем добавить их пути внутри архива к команде. Например, чтобы извлечь файлы из архива, мы бы запустили: .bashrc .bash_profile
Код:
borg extract --list /mnt/borg::archive-fingolfin-2022-04-23T19:33:58 .bashrc .bash_profile

Напротив, если мы хотим указать файлы, которые будут исключены из извлечения, мы можем использовать опцию. Итак, предположим, что мы хотим исключить все файлы, содержащиеся в каталоге .local. Мы бы запустили: --exclude
Код:
borg extract --list /mnt/borg::archive-fingolfin-2022-04-23T19:33:58 --exclude .local

Удаление архива​

Если мы хотим удалить определенный архив, содержащийся в нашем репозитории Borg, мы должны использовать команду «delete» и указать имя репозитория и архива. Чтобы удалить архив, который мы использовали в предыдущих примерах, мы запустим:
Код:
borg delete /mnt/borg::archive-fingolfin-2022-04-23T19:33:58
 
Назад
Верх Низ