Рубрики
bareos

bareos настройка бэкапов / backups / bareos-dir

!!!!!!!!!!!! ПЕРЕПИСЫВАЮ

Описание компонентов:

Bareos Director — компонент который управляет заданиями (jobs) и операциями резервного копирования, или восстановления, а так же управляет File и Storage Daemon’ами.

Baroes Console — текстовая консоль для управления Bareos Director’ом через специальный командный синтаксис. 
По умолчанию устанавливается вместе с Bareos Director, но может устанавливаться и отдельно для удаленного подключения к Bareos Director.

Bareos Web UI — веб-интерфейс Bareos. По умолчанию устанавливается вместе с Bareos Director. 
Данный компонент пока что на стадии развития и используется больше для удобного мониторинга, но можно вручную запускать задачи на резервное копирование, или восстановление. 
Тогда как расписание и задания создаются в основном через текстовые конфиги, или через консоль bareos, а не через веб-интерфейс.

Bareos Catalog — база данных, которая содержит информацию по расписаниям, заданиям, сохраненным файлам, клиентам, статусам.

Storage Daemon — компонент, который выполняет операции чтения и записи на устройствах хранения, используемых для резервного копирования.

File Daemon — агент, который используется для сбора с “клиентских” систем и их размещения при операциях восстановления.

Пример структуры каталогов по умолчанию для /etc/bareos:

.
├── bareos-dir.d
│   ├── catalog
│   │   └── MyCatalog.conf
│   ├── client                # конфиги клиентов \ учетные данные клиентов
│   │   ├── bareos-fd.conf
│   │   └── eyh.conf          # конфиг клиента eyh
│   ├── console
│   │   ├── admin.conf
│   │   ├── admin.conf.example
│   │   └── bareos-mon.conf
│   ├── director
│   │   └── bareos-dir.conf
│   ├── fileset              # в этом каталоге мы задаем что бэкапим \ куда
│   │   ├── Catalog.conf
│   │   ├── eyh.conf         # конфиг настроек бэкапа для eyh 
│   │   ├── LinuxAll.conf
│   │   ├── SelfTest.conf
│   │   └── Windows All Drives.conf
│   ├── job                  # задания
│   │   ├── backup-bareos-fd.conf
│   │   ├── BackupCatalog.conf
│   │   └── eyh.conf        # 
│   ├── jobdefs
│   │   ├── DefaultJob.conf
│   │   └── eyh.conf
│   ├── messages
│   │   ├── Daemon.conf
│   │   └── Standard.conf
│   ├── pool
│   │   ├── Differential.conf
│   │   ├── Full.conf
│   │   ├── Incremental.conf
│   │   └── Scratch.conf
│   ├── profile
│   │   ├── operator.conf
│   │   ├── webui-admin.conf
│   │   ├── webui-limited.conf.example
│   │   └── webui-readonly.conf
│   ├── schedule
│   │   ├── Daily.conf
│   │   ├── Weekly.conf
│   │   ├── WeeklyCycleAfterBackup.conf
│   │   └── WeeklyCycle.conf
│   ├── storage
│   │   ├── eyh.conf
│   │   ├── File.conf
│   │   └── Restore.conf
│   └── user
├── bareos-dir-export
│   └── client
│       └── eyh
│           └── bareos-fd.d
│               └── director
│                   └── bareos-dir.conf
├── bareos-fd.d
│   ├── client
│   │   └── myself.conf
│   ├── director
│   │   ├── bareos-dir.conf
│   │   └── bareos-mon.conf
│   └── messages
│       └── Standard.conf
├── bareos-sd.d
│   ├── device
│   │   ├── eyh.conf
│   │   ├── FileStorage.conf
│   │   └── Restore.conf
│   ├── director
│   │   ├── bareos-dir.conf
│   │   └── bareos-mon.conf
│   ├── messages
│   │   └── Standard.conf
│   └── storage
│       └── bareos-sd.conf
└── bconsole.conf



Размещение бэкапов Bareos Storage Daemon

Сервер есть, он работает, но ничего не делает и у него нет места куда бы положить наши бэкапы. 
За размещение файлов отвечает демон bareos-sd
/etc/bareos/bareos-sd.d/ - каталог конфигов bareos-sd
/etc/bareos/bareos-sd.d/device/FileStorage.conf 
/etc/bareos/bareos-sd.d/director/bareos-dir.conf 
/etc/bareos/bareos-dir.d/storage/File.conf

По дефолту пулы данных располагаются в /var/lib/bareos/storage

Конфигурация самих пулов располагается в конфигах Bareos Director:
/etc/bareos/bareos-dir.d/pool/Differential.conf  
/etc/bareos/bareos-dir.d/pool/Full.conf  
/etc/bareos/bareos-dir.d/pool/Incremental.conf  
/etc/bareos/bareos-dir.d/pool/Scratch.conf

Иногда возникает необходимость вынести Storage Daemon на отдельный сервер, или добавить дополнительный Storage Pool расположенный на другом сервере. 
Для работы с обычными дисковыми накопителями нужно установить соответствующий бэкенд: 
пакет bareos-sd — для Centos, bareos-storage — для Debian, или Ubuntu.

apt install bareos-storage - установка на debian

Пример настройки на отдельном сервере Storage Daemon

Конфигурируем Device на стороне Storage Daemon:
# cat /etc/bareos/bareos-sd.d/device/NewStorage.conf
Device {
  Name = NewStorage
  Media Type = File
  Archive Device = /path/to/your/storage/mount/directory
  LabelMedia = yes;      # lets Bareos label unlabeled media
  Random Access = yes;
  AutomaticMount = yes;  # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
  Description = "Your device description here."
}

Теперь, исходя из того, что Device имеет имя “NewStorage”, а Bareos Director — дефолтное “bareos-dir”, следующий конфиг:
# cat /etc/bareos/bareos-sd.d/director/bareos-dir.conf
Director {
  Name = bareos-dir
  Password = ""
  Description = "Director, who is permitted to contact this storage daemon."
}

расположенный на стороне Storage Daemon, нужно разместить на стороне Bareos Director и привести к следующему виду:
# cat /etc/bareos/bareos-dir.d/storage/NewStorage.conf
Storage {
  Name = NewStorage
  Address = 10.0.0.12         # N.B. Use a FQDN or IP here
  Password = ""
  Device = NewStorage
  Media Type = File
}

Обновить конфигурацию Bareos Director:
# bconsole
* reload
* exit

и перезапустить Storage Daemon для обновления конфигурации:
systemctl restart bareos-sd

Проверяем что у нас получилось
bconsole
status storage

Расписание и задания

Каждое из заданий может быть прикреплено к расписанию (Shedule) и частично предопределено в шаблоне (Job Definitions). 
Задания так же могут ссылаться на Fileset’ы, где, например, для группы различных заданий предопределены какие-либо параметры.
Задания могут быть ни прикреплены к расписанию (запускаются только вручную через веб-интерфейс, или консоль), ни ссылаться на Fileset’ы. 

Некоторые Fileset’ы создаются автоматически при установке Bareos Director:
/etc/bareos/bareos-dir.d/fileset/Catalog.conf
/etc/bareos/bareos-dir.d/fileset/LinuxAll.conf
/etc/bareos/bareos-dir.d/fileset/SelfTest.conf
/etc/bareos/bareos-dir.d/fileset/Windows\ All\ Drives.conf

Дефолтные задания на резервное копирование:
/etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf
/etc/bareos/bareos-dir.d/job/BackupCatalog.conf
/etc/bareos/bareos-dir.d/job/RestoreFiles.conf

Дефолтное расписание выглядит следующим образом:
/etc/bareos/bareos-dir.d/schedule/WeeklyCycle.conf
/etc/bareos/bareos-dir.d/schedule/WeeklyCycleAfterBackup.conf

Создадим ежедневное:
# cat /etc/bareos/bareos-dir.d/schedule/Daily.conf
Daily.conf 
Schedule {
  # name (обязательно)
  Name = "Daily"
  
  # run time
  # допустимы множество опций,
  # можно создавать несколько в виде "Run =" times
  # но для простоты будем запускать
  # каждый день один раз в день в 21:10
  Run = daily at 21:00
}

и еженедельное расписание:
# cat /etc/bareos/bareos-dir.d/schedule/Weekly.conf
Schedule {
  Name = "Weekly"
  Description = "This schedule creates weekly backup."
  # создаем Full бэкап в пул "Full" каждую субботу в 21:00
  Run = Level=Full Pool=Full sun at 21:00
}

!!! Собственно тут описывается что мы там бэкапим
Создадим Fileset:
# cat /etc/bareos/bareos-dir.d/fileset/MyFileset.conf
FileSet {
  # name (required)
  Name = "MyFileset"
# include directory
  Include {
    Options {
      # считаем контрольную сумму для всех файлов из fileset
      # можно использовать MD5/SHA1. Это полезно для длительного
      # хранения, однако создает дополнительную нагрузку на CPU:
      # SHA1 надежней, но в большинстве случаев достаточно менее
      # требовательного к ресурсам процессора MD5
      Signature = MD5
      
      # запаковывать каждый файл из fileset
      # наиболее используемые: LZ4/GZIP (см. мануал для остальных
      # возможных опций). LZ4 - наиболее быстрый для запаковывания
      # и распаковывания.
      Compression = LZ4
      
      # noatime - yes: Если ваша система поддерживает O_NOATIME
      # Bareos откроет все файлы, скопированные с этой опцией.
      # Это позволяет читать файл без обновления inode atime
      # (а также без обновления inode ctime). Если опция не
      # поддерживается, то будет автоматически игнорирована.
      noatime = yes
# Указанные буквы опций используются при запуске
      # Verify Level = Catalog, а также задания уровня
      # DiskToCatalog. Буквы параметров могут быть любыми 
      # комбинациями из следующих:
      #
      # i - compare the inodes
      # p - compare the permission bits
      # n - compare the number of links
      # u - compare the user id
      # g - compare the group id
      # s - compare the size
      # a - compare the access time
      # m - compare the modification time (st_mtime)
      # c - compare the change time (st_ctime)
      # d - report file size decreases
      # 5 - compare the MD5 signature
      # 1 - compare the SHA1 signature
      # A - Only for Accurate option, allows to backup the file
      Verify = pin5
      
    }
    # бэкапим определенные директории
    # (указывать без обратных slash'ей)
    # File = "/path/to/your/folder/"
    #
    # или:
    #
    # File = "/path/to/your/folder/"%n
    # с опцией, задавая таким образом конечную папку с помощью 
    # имени задачи (Job Name).
    #
    # Возможно использовать:
    # %c = Client’s name
    # %d = Director’s name
    # %e = Job Exit code (OK, Error, ...)
    # %h = Client address
    # %i = Job Id
    # %j = Unique Job name
    # %l = Job level
    # %n = Job name
    # %r = Recipients
    # %s = Since time
    # %t = Job type (e.g. Backup, ...)
    # %v = Read Volume name (Only on director side)
    # %V = Write Volume name (Only on director side)
    File = "/path/to/your/folder/"
  }
}

Задания:

Задания бывают следующих типов: Backup, Restore, Verify, Admin, Migrate, Copy, Consolidate. 
Но для примера рассмотрим только Backup и Restore (информацию об остальных можно найти в официальной документации). Для начала создадим шаблон задачи (Job Definition):
# cat /etc/bareos/bareos-dir.d/jobdefs/MyJobdef.conf
 JobDefs {
  Name = "MyJobdef"
  # Тип определяемого Job Definition (Backup, Restore, Verify...)
  Type = Backup
  
 # Собирать данные со следующего клиента:
  Client = clientname
  # Раскоментируйте, если нужно предопределить Fileset, но можно на него и не ссылаться. 
  # Например:
  # FileSet = "MyFileset"
  # Закрепить Job Definition за следующим расписанием:
  Schedule = "Weekly"
  # Перед и после выполнения задания возможен запуск скриптов:
  # ClientRunBeforeJob - запустит скрипт перед выполнением Job на
  # стороне клиента,
  # RunBeforeJob - запустит скрипт перед выполнением Job на
  # стороне Bareos Director.
  # ClientRunAfterJob - запустит скрипт после выполнения Job на
  # стороне клиента,
  # RunAfterJob - аналогично после Job на стороне Bareos Director.
  # Таким образом, сначала запустится RunBeforeJob (например, это
  # какой-либо скрипт для подготовки данных к бэкапу),
  # непосредственно само резервное копирование (или восстановление, если
  # Type = Restore) и по завершению - RunAfterJob (например,
  # скрипт, который удалит подготовленные для бэкапа данные)
  #
  # Например:
  #
  # ClientRunBeforeJob = "/path/to/your/script/script.sh"
  #
  # Как и в Fileset, возможно так же передавать различные
  # параметры:
  # ClientRunBeforeJob = "/path/to/script.sh %n"
            
  # С каким storage работать:
  Storage = File
  # Preset, определяющий как и какие сообщения собирать с
  # клиентов. В большинстве случаев - стандартного достаточно.
  Messages = Standard
  # С каким пулом работать: например, для Full backups - Full.
  Pool = Full
  # Приоритет задачи: чем ниже, тем раньше других будет выполнена,
  # если за один интвервал времени запланировано несколько
  Priority = 10
  # Вряд ли придется менять это значение, обычно оставляется
  # по дефолту. Это файл начальной загрузки. Он содержит
  # информацию ASCII, которая позволяет точно определить, какие
  # файлы должны быть восстановлены, какой объем они находятся и
  # где они находятся на томе. Это относительно компактная форма
  # указания информации, является удобочитаемой и может быть
  # отредактирована любым текстовым редактором.
  Write Bootstrap = "/var/lib/bareos/%c.bsr"
  # Указывает на то, что Full Backups записываются в пул "Full";
  # Differential - в Differential и тд. Для примера так же можно
  # настроить запись Full Backups в созданный выше NewPool:
  # Full Backup Pool = NewPool
  Full Backup Pool = Full
  Differential Backup Pool = Differential
  Incremental Backup Pool = Incremental
}

И далее создадим непосредственно саму задачу, ссылающийся на созданный Job Definition:
# cat /etc/bareos/bareos-dir.d/job/MyJob.conf
Job {
  Name = "MyJob"
  Description = "Backup files from clientname"
  JobDefs = "MyJobdef"
  Type = Backup
  Level = Full
  # При Accurate режиме демон файлов точно знает, какие файлы
  # присутствовали после последней резервной копии. Таким
  # образом, он способен обрабатывать удаленные или 
  # переименованные файлы.
  # При восстановлении FileSet для заданной даты (включая «самые
  # последние») Bareos может восстановить именно файлы и каталоги,
  # существовавшие во время последней резервной копии до этой 
  # даты: удаленные файлы будут действительно удалены, а
  # переименованные будут переименованы должным образом.
  # При создании резервных копий VirtualFull рекомендуется
  # использовать точный режим (Accurate Mode), иначе VirtualFull
  # может содержать уже удаленные файлы.
  # Однако использование точного режима также имеет недостатки:
  # FileDaemon должен хранить данные о всех файлах в памяти.
  # Итак, если у вас нет достаточной памяти, резервная копия может
  # быть очень медленной или неудачной. Для 500 000 файлов
  # (типичная desktop Linux-система) потребуется около 64 мегабайт
  # ОЗУ на вашем File Daemon для хранения необходимой информации.
  Accurate = yes
  # Ссылаемся на созданное выше описание файлов (Fileset).
  FileSet = "MyFileset"
  # Привязываем задачу к еженедельному расписанию "Weekly"
  Schedule = "Weekly"
  # Собираем данные с клиента "clientname"
  Client = "clientname"
  # Если требуется, то можно переопределить:
  # ClientRunBeforeJob = "/path/to/script.sh"
  # ClientRunAfterJob = "/path/to/script.sh"
  # Отправляет bootstrap для аварийного восстановления.
  # Укажите здесь необходимого адресата, если требуется
  Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
  # Приоритет. Дефолтные задания имеют приоритет 11.
  Priority = 9
}

Если какие-то из параметров определены дважды (например: в Fileset и Job, или в Job Definition и Job), то параметры в Job переопределит (override) ранее заданные.

Выставляем права на все созданные конфигурации:
chown bareos.bareos /etc/bareos/bareos-dir.d/schedule/Daily.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/schedule/Weekly.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/fileset/MyFileset.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/jobdefs/MyJobdef.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/job/MyJob.conf

Применяем изменения:
bconsole
reload

Запускаем задание MyJob:
bconsole
run job=MyJob

Смотрим ошибки и правим файлы
mess

Incrimential Backups

Использование некоторых флагов позволит копировать только те файлы, которые были изменены. 

Создадим fileset для Incrimential Backup’ов:

# cat /etc/bareos/bareos-dir.d/fileset/IncrimentialFileset.conf
FileSet {
  Name = "IncrimentialFileset"
  Description = "Incrimential Data fileset"
  Include {
    Options {
    
       # Accurate options, использование которых позволяет
       # определить Bareos, какие файлы копировать:
       # i - compare the inodes
       # p - compare the permission bits
       # n - compare the number of links
       # u - compare the user id
       # g - compare the group id
       # s - compare the size
       # a - compare the access time
       # m - compare the modification time (st_mtime)
       # c - compare the change time (st_ctime)
       # d - report file size decreases
       # 5 - compare the MD5 signature
       # 1 - compare the SHA1 signature
       # В большинстве случаев опции "ms" вполне достаточно для
       # копирования новых/измененных, но если требуется учитывать
       # дату изменения файла, то "mcs".
       Accurate = ms
       Signature = MD5
       Compression = LZ4
    }
    File = "/path/to/directory"
  }
}

Теперь создадим Base Job, которую можно выполнять по расписанию для копирования всех файлов один раз в месяц, или год, 
а можно и вовсе запускать разово вручную, если копировать в отдельный пул, авто очистка на котором отключена:

# cat /etc/bareos/bareos-dir.d/job/BaseJob.conf
Job {
  Name = "BaseJob"
  Description = "Base backup"
  # Задаем базовый (Base) level:
  Level = Base
  Pool = Incremental
  Storage = File
  Type = Backup
  FileSet = "IncrimentialFileset"
  Client = "clientname"
  Messages = Standard
  # Раскоментируйте, если требуется выполнять Base Job по
  # расписанию
  # Schedule = "Monthly"
  Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
  Priority = 11
}

И далее задание для инкрементальных бэкапов, которое уже будем выполнять по расписанию:
# cat /etc/bareos/bareos-dir.d/job/IncrimentialJob.conf
Job {
  Name = "IncrimentialJob"
  Description = "Incrimential data backup"
  
  # Задает Base Job:
  Base = "BaseJob"
  Pool = Incremental
  Storage = File
  Type = Backup
  Level = Incremental
  FileSet = "IncrimentialFileset"
  Schedule = "Daily"
  Client = "clientname"
  Messages = Standard
  Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
  Priority = 11
}


Выставляем права, перезагружаем конфиг Bareos Director и запускаем Base Job:
chown bareos.bareos /etc/bareos/bareos-dir.d/fileset/IncrimentialFileset.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/job/BaseJob.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/job/IncrimentialJob.conf

Применяем изменения:
bconsole
* reload

Запускаем задание:
run job=BaseJob

И далее можно запустить задачу на создание инкрементального бэкапа:
run job=IncrimentialJob

В принципе, достаточно выполнять по расписанию только IncrimentialJob: если не будет найден полный бэкап, то он автоматически создастся. 
Добавлять BaseJob в расписание не обязательно — это лишь для наглядности данного примера.