Bacula 15

Материал из ALT Linux Wiki

Bacula

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

Bacula автоматизирует процессы резервного копирования и работает с различными носителями данных, включая диски и ленточные системы.

Baculum

Baculum — это веб-приложение с открытым исходным кодом для использования ряда заданий Bacula по резервному копированию и восстановлению.

Архитектура решения

В качестве примера настроим систему резервного копирования Bacula 15 для личных файлов пользователя и базы данных PostgreSQL 17 с управлением через веб-интерфейс Baculum 15.

Сервер («Альт Сервер 11.0», без GUI) включает в себя следующие компоненты:

  • сервер СУБД PostgreSQL 17;
  • Bacula 15 (Bacula Director, Bacula Storage, Bacula File Daemon, Bacula Console);
  • Baculum 15.

Клиент («Альт Рабочая станция 11.1») включает в себя следующие компоненты:

  • Bacula 15 (Bacula File Daemon);
  • личные файлы пользователя (каталог /home/user/Files).

Установка сервера PostgreSQL

Для установки на сервере выполним команду:

# apt-get install postgresql17-server postgresql17-contrib

После завершения установки создадим системные базы данных и укажем пароль пользователя postgres:

# /etc/init.d/postgresql initdb

Внесем изменения в конфигурационный файл /var/lib/pgsql/data/postgresql.conf:

listen_addresses = '192.168.0.132' # включает доступ по сети
wal_level = archive # указывается уровень ведения журналов
archive_mode = on # разрешается ведение журналов
archive_command = '/var/lib/pgsql/bin/copy_wal.sh "%f" "%p"'
max_wal_senders = 5

Внесем изменения в конфигурационный файл /var/lib/pgsql/data/pg_hba.conf:

...
# "local" is for Unix domain socket connections only
local   bacula          bacula                                  trust # разрешает локальное подключение пользователя bacula к  БД bacula
local   all             all                                     scram-sha-256
# IPv4 local connections:
host    all             all             192.168.0.132/24        trust # разрешает подключение к серверу БД с указанного IP-адреса 
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     postgres                                trust # разрешает подключение пользователя postgres для репликации
local   replication     all                                     scram-sha-256
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
Примечание: Изменение позиции добавленных строк может привести ошибкам во время настройки соединения с сервером СУБД.


Создадим каталог, в котором будут храниться журналы:

# mkdir /var/lib/pgsql/wals
# chown postgres:postgres /var/lib/pgsql/wals
# chmod 700 /var/lib/pgsql/wals

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

# mkdir /var/lib/pgsql/bin
# chown postgres:postgres /var/lib/pgsql/bin
# chmod 700 /var/lib/pgsql/bin

Создадим скрипт для архивирования журналов /var/lib/pgsql/bin/copy_wal.sh:

#!/bin/bash
DPATH=/var/lib/pgsql/wals
DATE=`date +"%b %d %T"`
if [ -e /var/lib/pgsql/backup_in_progress ]; then # По наличию файла проверяет не идет ли процесс резервного копирования журналов
 echo "${DATE} - идет процесс резервного копирования журналов" >> "${DPATH}/wal-c-log.log"
 exit 1
fi
if [ -e ${DPATH}/$1 ]; then # Проверяет скопирован ли журнал раннее
 echo "${DATE} - файл уже архивирован" >> "${DPATH}/wal-c-log.log"
 exit 1
fi
echo "${DATE} - /bin/gzip $2 ${DPATH}/$1" >> "${DPATH}/wal-c-log.log"
gzip < $2 > "${DPATH}/$1" # Архивирует файл журнала

Скрипт проверяет состояния резервного копирования журналов и архивирует журналы в каталог /var/lib/pgsql/wals, все свои действия он пишет в /var/lib/pgsql/wals/wal-c-log.log.

Установим права на скрипт:

# chown postgres:postgres /var/lib/pgsql/bin/copy_wal.sh
# chmod 700 /var/lib/pgsql/bin/copy_wal.sh

Добавим службу в автозапуск и запустим ее:

# systemctl enable --now postgresql

Установка Bacula

Установка на сервере

Для установки Bacula на сервере выполним команду:

# apt-get install bacula15-common bacula15-console bacula15-director-common bacula15-director-postgresql bacula15-storage bacula15-client mt-st

В Bacula присутствуют скрипты для создания базы, пользователя и таблиц. Чтобы задать пароль для пользователя bacula, необходимо отредактировать следующую строку в файле /usr/share/bacula/scripts/grant_postgresql_privileges:

db_password="baculaPass"
Примечание: Если оставить файл /usr/share/bacula/scripts/grant_postgresql_privileges без изменений, пользователь будет создан без пароля.


Создадим базу данных bacula и пользователя bacula:

# /usr/share/bacula/scripts/create_postgresql_database -U postgres

Создадим таблицы базы данных:

# /usr/share/bacula/scripts/make_postgresql_tables -U postgres

Установим привилегии пользователю bacula:

# /usr/share/bacula/scripts/grant_postgresql_privileges -U postgres

Базовая настройка конфигурационных файлов Bacula

В процессе выполнения базовой настройки Bacula настроим резервное копирование файлов пользователя, расположенных на клиенте в каталоге /home/user/Files.

В конфигурационном файле /etc/bacula/bacula-dir.conf укажем пароль пользователя bacula, который был задан при создании пользователя:

Director {
  Name = dir-fs # Имя 
  DIRport = 9101 # Порт который будет слушать Director
  QueryFile = "/usr/share/bacula/scripts/query.sql"
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/var/run/bacula"
  Maximum Concurrent Jobs = 1
@/etc/bacula/bacula-dir-password.conf # Файл с паролем для доступа к Director
  Messages = Daemon
}
# Параметры каталога
Catalog {
  Name = MyCatalog # Имя каталога
  dbname = bacula # Имя базы данных
  user = bacula # Имя пользователя базы данных
  password = "baculaPass" # Пароль пользователя базы данных
}
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d
@|"sh -c 'for f in /etc/bacula/job.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/fileset.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/schedule.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/storage.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"

В конфигурационном файле /etc/bacula/bacula-dir-password.conf укажем пароль для доступа к Director:

Password = "DirPass" # Пароль для доступа к директору

В конфигурационном файле /etc/bacula/bacula-sd-password.conf укажем пароль для доступа к хранилищу:

Password = "SdPass" # Пароль для доступа к хранилищу

Создадим каталог для хранения резервных копий файлов пользователя:

# mkdir /home/backup
# chown bacula:bacula /home/backup

Укажем каталог для хранения резервных копий файлов пользователя в конфигурационном файле /etc/bacula/device.d/filestorage.conf:

Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /home/backup
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}

В конфигурационном файле /etc/bacula/storage.d/file.conf необходимо указать IP-адрес ресурса, на котором расположено хранилище:

# Definition of file storage device
Storage {
  Name = File
# Do not use "localhost" here
  Address = 192.168.0.132                # IP-адрес сервера на котором расположено файловое хранилище
  SDPort = 9103
@/etc/bacula/bacula-sd-password.conf
  Device = FileStorage
  Media Type = File
}

В конфигурационном файле /etc/bacula/fileset.d/fullset.conf укажем каталог, в котором располагаются файлы для резервного копирования:

# List of files to be backed up
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
    }

    File = /home/user/Files
  }
}
Примечание: Указанный каталог располагается на клиенте.


В конфигурационном файле /etc/bacula/client.d/client1.conf укажем IP-адрес клиента:

# Client (File Services) to backup
Client {
  Name = fd
  Address = 192.168.0.150
  FDPort = 9102
  Catalog = MyCatalog
@/etc/bacula/bacula-fd-password.conf
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Создадим файл file-backup-cycle.conf в каталоге /etc/bacula/schedule.d/ со следующим содержимым:

Schedule {
  Name = "file-backup-cycle"
  Run = Incremental mon,wed,fri at 23:00 # задание будет выполнять инкрементное резервное копирование каждый пн, ср и пт в 23:00
}

В конфигурационном файле задания /etc/bacula/job.d/bacula.conf укажем созданное расписание для резервного копирования:

#
# Define the main nightly save backup job
#   By default, this job will back up to disk in @archivedir@
Job {
  Name = "BackupFullSet"
  JobDefs = "DefaultJob"
  Schedule = "file-backup-cycle"
  Write Bootstrap = "/var/lib/bacula/Client1.bsr"
}

В конфигурационном файле хранилищ /etc/bacula/bconsole.conf укажем IP-адрес расположения Director:

#
# Bacula User Agent (or Console) Configuration File
#

Director {
  Name = dir
  DIRport = 9101 #Порт подключения к  Director
  address = 192.168.0.132 # Адрес расположения Director
@/etc/bacula/bacula-dir-password.conf # Пароль для подключения к Director
}

В конфигурационном файле /etc/bacula/bacula-fd-password.conf укажем пароль для доступа к клиенту:

Password = "FdPass" # Пароль для доступа к клиенту

Для включения логирования внесем изменения в файлы, расположенные в каталоге /etc/bacula/messages.d/:

daemon.conf:

#
# Message delivery for daemon messages (no job).
Messages {
  Name = Daemon
  mailcommand = "/bin/mail -s \"Bacula: %t %e of %c %l\" root@localhost"
  mail = root@localhost = all, !skipped
  console = all, !skipped, !saved
  append = "/var/log/bacula/log" = all, !skipped
  catalog = all, !skipped, !saved
}

standart.conf:

# Reasonable message delivery -- send most everything to email address
#  and to the console
Messages {
  Name = Standard
  mailcommand = "/bin/mail -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/bin/mail -s \"Bacula: Intervention needed for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
  append = "/var/log/bacula/log" = all, !skipped
  catalog = all, !skipped, !saved
}

Запустим службы bacula-dir, bacula-sd и bacula-fd и добавим их в автозапуск:

# systemctl enable --now bacula-dir
# systemctl enable --now bacula-sd
# systemctl enable --now bacula-fd

Установка на клиенте

Для установки Bacula на клиенте выполним команду:

# apt-get install bacula15-client

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

В конфигурационном файле /etc/bacula/bacula-dir-password.conf укажем пароль для доступа к Dierctor:

Password = "DirPass" # Пароль для доступа к директору

В конфигурационном файле /etc/bacula/bacula-sd-password.conf укажем пароль для доступа к хранилищу:

Password = "SdPass" # Пароль для доступа к хранилищу

В конфигурационном файле /etc/bacula/bacula-fd-password.conf укажем пароль для доступа к клиенту:

Password = "FDPass" # Пароль для доступа к клиенту

Запустим службу bacula-fd и добавим ее в автозапуск:

# systemctl enable --now bacula-fd

Настройка резервного копирования БД

Создание скриптов

Для резервного копирования БД PostgreSQL на сервере в каталоге /etc/bacula/ создадим необходимые скрипты.

Скрипт, который создает полную копию БД перед выполнением задачи по резервному копированию pre-base-backup.sh:

#!/bin/bash
DATE=`date +"%b %d %T"`
/usr/bin/pg_basebackup -D /var/lib/pgsql/backup -F t -z -U postgres -w -c fast -l "pg_basebackup ${DATE}"

Скрипт, который удаляет созданную резервную копию БД после выполнения задачи post-base-backup.sh:

#!/bin/bash
rm -f /var/lib/pgsql/backup/*

Скрипт, который создает файл backup_in_progress перед выполнением задачи по резервному копированию журналов pre-logs-backup.sh:

#!/bin/bash
touch /var/lib/pgsql/backup_in_progress
Примечание: Файл backup_in_progress нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы при помощи скрипта copy_wal.sh.


Скрипт, который очищает каталог с журналами backup_in_progress после выполнения задания по резервному копированию журналов post-logs-backup.sh:

#!/bin/bash
rm -f /var/lib/pgsql/wals/*
rm -f /var/lib/pgsql/backup_in_progress

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

# chmod 750 /etc/bacula/pre-base-backup.sh
# chmod 750 /etc/bacula/post-logs-backup.sh
# chmod 750 /etc/bacula/post-base-backup.sh
# chmod 750 /etc/bacula/pre-logs-backup.sh

Создание клиента

Добавим нового клиента. Для этого в каталоге /etc/bacula/client.d/ создадим файл base-fd.conf:

Client {
  Name = base-fd # Имя клиента
  Address = 192.168.0.132 # IP или FQN
  FDPort = 9102 # Порт
  Catalog = MyCatalog # Используемый каталог
@/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту
  File Retention = 30 days # Срок хранения метаданных о файлах
  Job Retention = 6 months # Срок хранения метаданных о задачах
  AutoPrune = yes # Автоматическое удаление устаревших метаданных
}

Создание списка набора файлов

Добавим списки наборов файлов. Для этого в каталоге /etc/bacula/fileset.d/ создадим файлы:

base-fileset.conf для резервного копирования БД:

FileSet {
  Name = "base-fileset"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
     }
    File = "/var/lib/pgsql/backup"
    }
}

logs-fileset.conf для резервного копирования журналов:

FileSet {
  Name = "logs-fileset"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
     }
    File = "/var/lib/pgsql/wals"
    }
}

Создание задач

Добавим задачи для резервного копирования. Для этого в каталоге /etc/bacula/job.d/ создадим файлы:

Файл шаблона параметров для заданий резервного копирования base-backup-job.conf:

JobDefs {
  Name = "BaseBackupJob"
  Type = Backup
  Level = Incremental
  Client = fd
  FileSet = "Full Set"
  Storage = File-base
  Messages = Standard
  Pool = Default
  Priority = 10
}

Задача резервного копирования БД pgsql-base-backup.conf:

Job {
  Name = "pgsql-base-backup"
  JobDefs = "BaseBackupJob"
  Client = base-fd
  FileSet = "base-fileset"
  Accurate = no
  Pool = base-pool
  Priority = 10 # приоритет выполнения задачи
  Schedule = "base-backup-cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-base-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-base-backup.sh" # скрипт выполняющийся после задачи
}

Задача резервного копирования журналов pgsql-logs-backup.conf:

Job {
  Name = "pgsql-logs-backup"
  JobDefs = "BaseBackupJob"
  Client = base-fd
  FileSet = "logs-fileset"
  Accurate = no
  Pool = base-pool
  Priority = 11 # приоритет ниже чем у задачи резервного копирования базы
  Schedule = "logs-backup-cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-logs-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-logs-backup.sh"# скрипт выполняющийся после задачи
}

Создадим каталог для хранения резервных копий БД PostgreSQL:

# mkdir /home/backup-base
# chown bacula:bacula /home/backup-base

Создание файлового хранилища

Добавим новое файловое хранилище. Для этого в каталоге /etc/bacula/device.d/ создадим файл filestorage-base.conf, в котором укажем созданный каталог:

Device {
  Name = FileStorage-base
  Media Type = File
  Archive Device = /home/backup-base
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}

В каталоге /etc/bacula/storage.d/ создадим файл file-base.conf, в котором указаны параметры файлового хранилища для резервного копирования БД:

# Definition of file storage device
Storage {
  Name = File-base
# Do not use "localhost" here
  Address = 192.168.0.132                IP или FQN хранилища (если указать 127.0.0.1, то будет доступен только локальный backup)
  SDPort = 9103
@/etc/bacula/bacula-sd-password.conf
  Device = FileStorage-base
  Media Type = File
}

Создание пула

Добавим новый пул. Для этого в каталоге /etc/bacula/pool.d/ создадим файл base-pool.conf:

Pool {
  Name = base-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  LabelFormat = "Vol-"
}

Создание расписания

Добавим расписания для созданных задач. Для этого в каталоге /etc/bacula/schedule.d/ создадим файлы:

base-backup-cycle.conf:

Schedule {
  Name = "base-backup-cycle"
  Run = Full fri at 23:50 # задание будет выполнять полное резервное копирование каждую пятницу в 23:50
}

logs-backup-cycle.conf:

Schedule {
  Name = "logs-backup-cycle"
  Run = Incremental mon,wed,fri at 23:20 # задание будет выполнять инкрементное резервное копирование каждый пн, ср и пт в 23:20
}

Установка Baculum

Для установки Baculum на сервере выполним команду:

# apt-get install baculum15-postgresql baculum15-apache2

Далее включим сайты baculum-api и baculum-web в apache2:

# a2ensite baculum-api
# a2ensite baculum-web

Для работы Baculum включим следующие модули:

# a2enmod auth_basic
# a2enmod authn_core
# a2enmod authn_file
# a2enmod authz_core
# a2enmod authz_host
# a2enmod authz_user
# a2enmod mod_php8.3
# a2enmod negotiation
# a2enmod rewrite
# a2enmod setenvif

Или тоже самое одной командой:

# for mod in auth_basic authn_core authn_file authz_cor authz_host authz_user mod_php8.3 negotiation rewrite setenvif; do a2enmod $mod; done

Добавим пользователя apache2 в группу bacula:

# usermod -a -G bacula apache2

Для работы с Bconsole разрешаем Baculum запускать необходимые бинарники без пароля:

# control sudo public
# echo "Defaults:apache2 "'!'"requiretty
> apache2 ALL=NOPASSWD: /usr/bin/bconsole
> apache2 ALL=NOPASSWD: /usr/sbin/bdirjson
> apache2 ALL=NOPASSWD: /usr/sbin/bsdjson
> apache2 ALL=NOPASSWD: /usr/sbin/bfdjson
> apache2 ALL=NOPASSWD: /usr/sbin/bbconsjson" > /etc/sudoers.d/baculum
Примечание: Baculum может управлять службами компонентов Bacula. Для активации этой возможности в файл /etc/sudoers.d/baculum добавим строки:
echo "Defaults:apache2 "'!'"requiretty
apache2 ALL=NOPASSWD: /usr/bin/bconsole
apache2 ALL=NOPASSWD: /usr/sbin/bdirjson
apache2 ALL=NOPASSWD: /usr/sbin/bsdjson
apache2 ALL=NOPASSWD: /usr/sbin/bfdjson
apache2 ALL=NOPASSWD: /usr/sbin/bbconsjson
apache2 ALL=NOPASSWD: /usr/bin/systemctl start bacula-dir
apache2 ALL=NOPASSWD: /usr/bin/systemctl stop bacula-dir
apache2 ALL=NOPASSWD: /usr/bin/systemctl restart bacula-dir
apache2 ALL=NOPASSWD: /usr/bin/systemctl start bacula-sd
apache2 ALL=NOPASSWD: /usr/bin/systemctl stop bacula-sd
apache2 ALL=NOPASSWD: /usr/bin/systemctl restart bacula-sd
apache2 ALL=NOPASSWD: /usr/bin/systemctl start bacula-fd
apache2 ALL=NOPASSWD: /usr/bin/systemctl stop bacula-fd
apache2 ALL=NOPASSWD: /usr/bin/systemctl restart bacula-fd" > /etc/sudoers.d/baculum


Создадим рабочий каталог Baculum для конфигурации Bacula и назначим его владельцем пользователя apache2:

# mkdir /etc/bacula/baculum
# chown apache2:apache2 /etc/bacula/baculum

Запустим службу httpd2 и добавим ее в автозапуск:

# systemctl enable --now httpd2

Настройка веб-интерфейса Baculum

Настройка Baculum API

Для настройки откроем на клиенте браузер и перейдем по ссылке http://192.168.0.132:9096

Введем имя пользователя и пароль:

Окно входа в настройки baculum-api

Примечание: По умолчанию имя пользователя и пароль — admin.


Выберем язык:

Baculum. Выбор языка

Настроим доступ к базе данных:

Baculum. Настройка доступа в базе данных

Настроим доступ Baculum к интерфейсу Bconsole:

Baculum. Настройка доступа к интерфейсу Bacula Bconsole

Настроим доступ к конфигурационным файлам Bacula:

Baculum. Настройка доступа к конфигурационным файлам Bacula

Настроим аутентификацию Baculum API:

Baculum. Настройка аутентификации baculum-api

Ознакомимся с настройками и нажмем Сохранить:

Baculum. Завершение настройки

Примечание: Для управления службами Bacula необходимо перейти в меню НастройкиДействия и включить опцию Включено и Использовать sudo: Baculum. Настройки API


Настройка Baculum WEB

Для настройки откроем на клиенте браузер и перейдем по ссылке http://192.168.0.132:9095

Введем имя пользователя и пароль:

Baculum. Окно входа в веб-интерфейс Baculum

Примечание: По умолчанию имя пользователя и пароль — admin.


Выберем язык:

Baculum. Выбор языка

Добавим настроенный ранее хост Baculum API:

Baculum. Добавление хоста baculum-api

Введем имя пользователя и пароль для входа в Baculum WEB:

Baculum. Параметры аутентификации baculum-web

Ознакомимся с настройками и нажмем Сохранить:

Baculum. Завершение настройки

После завершения настроек и повторной аутентификации откроется стартовая страница Baculum WEB:

Baculum. Стартовая страница

Резервное копирование в Baculum WEB

Для ручного запуска резервного копирования нажмем на кнопку Запустить задание на панели управления Baculum WEB.

В открывшемся окне выберем задание для выполнения BackupFullSet и нажмем кнопку Запустить задание:

Baculum. Ручной запуск резервного копирования

На странице История заданий подробно отобразится ход выполнения задания резервного копирования:

Baculum. Ход выполнения задания резервного копирования

Восстановление файлов из резервной копии

Для ручного запуска резервного копирования нажмем кнопку Выполнить восстановление на панели управления Baculum WEB.

В открывшемся окне Мастер восстановления выберем с какого клиента нужно восстановить резервную копию:

Baculum. Восстановление из резервной копии

Выберем точку для восстановления:

Baculum. Выбор резервной копии для восстановления

Выберем файлы, которые требуется восстановить:

Baculum. Выбор файлов для восстановления

Укажем папку для восстановления:

Baculum. Выбор папки для восстановление

Определим параметры восстановления:

Baculum. Выбор параметров восстановления

Проверим параметры восстановления файлов и нажмем кнопку Запустить восстановление:

Baculum. Завершение восстановления

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

Резервное копирование БД PostgreSQL

Резервное копирование БД PostgreSQL выполняется по тому же сценарию, что и резервное копирование файлов пользователя. Запустим задание pgsql-base-backup для резервного копирования файлов БД:

Baculum. Задание резервного копирования для файлов БД

и задание pgsql-logs-backup для резервного копирования журналов БД:

Baculum. Задание резервного копирования для файлов БД

Восстановление БД PostgreSQL

Для восстановления БД PostgreSQL восстановим резервную копию файлов и журналов БД так же, как восстанавливали резервную копию файлов пользователя.

Для восстановления БД PostgreSQL из восстановленных файлов и журналов:

  • остановим службу postgresql;
  • скопируем каталог pg_wal в безопасное место, так как он может содержать файлы журналов WAL, не попавшие в резервную копию;
  • удалим содержимое каталога базы данных /var/lib/pgsql/data/;
  • распакуем архив с резервной копией БД в каталог базы данных /var/lib/pgsql/data/:
# tar -xzf /tmp/bacula-restores/var/lib/pgsql/backup/base.tar.gz -C /var/lib/pgsql/data/
  • удалим каталог pg_wal восстановленный из резервной копии БД;
  • скопируем сохраненный ранее каталог pg_wal в каталог базы данных /var/lib/pgsql/data/ и проверим наличие необходимых прав у пользователя postgres;
  • добавим в конфигурационный файл /var/lib/pgsql/data.postgresql.conf строку:
restore_command = 'gunzip < /var/lib/pgsql/wal/%f > %p'
  • в каталоге базы данных /var/lib/pgsql/data создадим файл recovery.signal.
Примечание: Файл должен иметь права 600 и владельца от имени которого запускается сервер.
  • запустим службу postgresql.

Ссылки