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

Предпосылки

  • Сервер с Ubuntu 24.04 в качестве ОС
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo.

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя.

Обновите систему

Свежая установка Ubuntu 24.04 требует обновления пакетов до последних доступных версий.

1
$ sudo apt update -y && sudo apt upgrade -y

Шаг 1. Установите Borg

На основном и удаленном сервере установите BorgBackup.

1
$ sudo apt install borgbackup

Перед созданием резервной копии убедитесь, что на обеих машинах достаточно места на диске. Для работы Borg требуется несколько гигабайт свободного места на основном сервере.

Войдите на удаленный сервер и создайте каталог, который Borg будет использовать в качестве хранилища резервных копий. Borg хранит резервные копии в хранилище в виде коллекции архивов.

1
$ mkdir /home/user/backup

На основном сервере инициализируйте хранилище в только что созданном каталоге, где username - удаленный пользователь с доступом для чтения/записи к каталогу резервных копий, а offsite_server - IP-адрес удаленного сервера. При появлении запроса введите надежную ключевую фразу для шифрования хранилища.

1
2
3
4
5
6
$ borg init --encryption=repokey username@offsite_server:/home/user/backup

[...]
IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo!
Use "borg key export" to export the key, optionally in printable format.
Write down the passphrase. Store both at safe place(s).

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

Создайте каталог для хранения ключа на основном сервере.

1
$ mkdir -p /home/user/.config/borg/keys

Экспортируйте ключ в этот каталог.

1
$ borg key export username@offsite_server:/home/user/backup /home/user/.config/borg/keys/backup_repo_key

Чтобы импортировать ключ, если файл будет поврежден, измените экспорт на импорт.

Установите переменные окружения BORG_REPO и BORG_PASSPHRASE, чтобы предотвратить повторный ввод этих данных в этом сеансе.

1
2
$ export BORG_REPO='username@offsite_server:/home/user/backup'
$ export BORG_PASSPHRASE='your repository passphrase'

Шаг 2. Доступ по SSH без пароля

Перед созданием резервной копии настройте Borg на подключение к удаленному серверу без пароля.

На основном сервере создайте пару ключей для Borg.

1
2
3
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Сохраните ключ под именем /home/user/.ssh/id_rsa_borg и не вводите кодовую фразу.

Добавьте новый открытый ключ на удаленный сервер.

1
$ ssh-copy-id -i '/home/user/.ssh/id_rsa_borg' username@offsite_server

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

1
$ ssh -i '/home/user/.ssh/id_rsa_borg' username@offsite_server

Чтобы повысить безопасность, ограничьте ключевой файл, чтобы он использовался только для Борга, и запретите удаленные входы.

На удаленном сервере отредактируйте файл authorized_keys.

1
$ sudo nano /home/user/.ssh/authorized_keys

Найдите открытый ключ, который вы добавили ранее. Например:

1
ssh-rsa AAAAB3Nza[...]q34Pk= user@example.com

Вставьте приведенную ниже командную директиву перед ssh-rsa, чтобы ограничить ключ только командой borg и определенным путем. Обязательно измените /home/user/backup на путь к хранилищу резервных копий, созданному ранее. Строка будет выглядеть следующим образом:

1
command="borg serve --restrict-to-path /home/user/backup",restrict,no-pty,no-agent-forwarding,no-port-forwarding ssh-rsa AAAAB3Nza[...]q34Pk= user@example.com

Сохраните и выйдите из файла и вернитесь на основной сервер.

Попробуйте войти в систему, используя файл ключа, и убедитесь, что доступ запрещен.

1
2
$ ssh -i '/home/user/.ssh/id_rsa_borg' username@offsite_server
PTY allocation request failed on channel 0

Нажмите Enter, чтобы получить второе сообщение.

1
2
$LOG ERROR borg.archiver Remote: Borg 1.4.0: Got unexpected RPC data format from client.
Connection to <IP> closed.

После проверки экспортируйте переменную окружения BORG_RSH, чтобы указать Borg использовать этот ключевой файл в данной сессии.

1
$ export BORG_RSH='ssh -i /home/user/.ssh/id_rsa_borg'

Шаг 3. Тестирование резервной копии

На основном сервере протестируйте резервное копирование файла или папки в домашнем каталоге. Назовите ее как-нибудь подходяще и убедитесь, что вам не предлагается ввести кодовую фразу.

1
$ borg create ::backup_name /home/user/path/to/file

Чтобы исключить файл или каталог из резервной копии, используйте команду --exclude=path/to/file/. Например, если вы хотите исключить каталог .cache при создании резервной копии, используйте:

1
$ borg create --exclude='/home/user/.cache' ::backup_name /home/user/path/to/file

Примечание: Укажите полный путь, когда указываете, что нужно исключить. Например, используйте /home/user/.cache, а не .cache. Используйте несколько директив --exclude=path/to/file/ при исключении нескольких файлов и каталогов. Вы также можете использовать файл исключений, если у вас много шаблонов исключений.

Перечислите резервные копии, созданные в хранилище, с помощью команды list, убедившись, что только что созданный архив резервных копий присутствует в нем.

1
2
$ borg list
backup_name       Sun, 2025-02-02 12:59:37 [f2cd0350f6cde7d58bb429fe67fg7f11h35f5bd6cdaz1b6d4d5e7b304gjjf81f]

Проверьте восстановление резервной копии с помощью borg extract. По умолчанию Borg восстанавливает полный путь к резервной копии в текущий каталог. Например, в этом руководстве Borg восстанавливает директорию /home/user/path/to/file. Чтобы не записывать данные, включите в команду параметр --dry-run.

1
$ borg extract --dry-run ::backup_name

Чтобы извлечь один файл из архива, используйте: $ borg extract ::backup_name /file/to/restore

По окончании можно удалить архив тестовых резервных копий.

1
$ borg delete ::backup_name

Шаг 4. Настройка автоматического резервного копирования

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

1
$ nano borg-backup.sh

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/sh
# Резервное копирование домашнего каталога в удаленное место с помощью Borg.
# Чтобы восстановить: borg extract username@offsite_server:/path/to/backup_repo::backup_name

export BORG_RSH='ssh -i /home/user/.ssh/id_rsa_borg'
export BORG_REPO='username@offsite_server:/home/user/backup'
export BORG_PASSPHRASE='your repository passphrase'

# Резервное копирование /home исключение кэша и загрузок
borg create -v --stats ::$(hostname)-$(date +"%d-%b-%Y") /home \
--exclude '/home/*/.cache'                          \
--exclude '/home/*/.ccache'                         \
--exclude '/home/$USER/Downloads'                   \

# Удалить лишние резервные копии
borg prune --prefix $(hostname)- --keep-daily=7 --keep-weekly=4 --keep-monthly=12

exit 0

Сохраните и выйдите из файла.

Сделайте скрипт исполняемым.

1
$ chmod +x borg-backup.sh

Протестируйте сценарий, чтобы убедиться в успешном завершении резервного копирования.

1
$ ./borg-backup.sh

Переместите скрипт в файл /etc/cron.daily, чтобы он выполнялся автоматически каждый день.

1
$ mv borg-backup.sh /etc/cron.daily

Завершение

Теперь вы успешно настроили безопасное автоматическое резервное копирование домашней директории вашего сервера в удаленное место с помощью BorgBackup.

Вы также можете поделиться статьей со своими друзьями в социальных сетях, которым может быть интересна эта статья или просто оставить комментарий ниже. Спасибо.