УСТАНОВКА И НАСТРОЙКА BACULA ubuntu

Thank you for reading this post, don't forget to subscribe!

Bacula - это систе­ма резерв­но­го копи­ро­ва­ния кор­по­ра­тив­но­го уров­ня. Она име­ет кли­ент-сер­вер­ную архи­тек­ту­ру и состо­ит из таких компонентов:

  • Bacula Director (сер­вис bacula-dir) - основ­ной сер­вис, кото­рый управ­ля­ет все­ми дру­ги­ми про­цес­са­ми по резерв­но­му копи­ро­ва­нию и восстановлению;
  • Bacula Storage (сер­вис bacula-sd) - хра­ни­ли­ще, пред­на­зна­чен­ное для сохра­не­ния резерв­ных копий на диске;
  • Bacula File Daemon (сер­вис bacula-fd) - кли­ент­ская часть сер­ви­са, кото­рая нуж­на для досту­па к фай­лам на сер­ве­ре, с кото­ро­го будет выпол­нят­ся резерв­ное копирование.

Все ком­по­нен­ты могут быть уста­нов­ле­ны как на одном сер­ве­ре, так и на раз­ных, но каж­дый из них дол­жен иметь воз­мож­ность обра­тит­ся к дру­го­му по сети. Для управ­ле­ния всем этим исполь­зу­ет­ся ути­ли­та команд­ной стро­ки bconsole. Для неё суще­ству­ет как кон­соль­ный так и веб-интер­фейс, но основ­ной спо­соб управ­ле­ния - команд­ная строка.

УСТАНОВКА И НАСТРОЙКА BACULA

ШАГ 1. УСТАНОВКА BACULA НА СЕРВЕР

Для вер­сии сер­ве­ра мож­но уста­нав­ли­вать пол­но­стью груп­пу паке­тов bacula. В Ubuntu по умол­ча­нию будут уста­нов­ле­ны так­же такие паке­ты, как PostgreSQL и Postfix. Коман­да уста­нов­ки будет выгля­деть вот так:

sudo apt install bacula

Для рабо­ты Bacula нуж­на какая-нибудь база дан­ных поэто­му без Postgresql обой­тись не полу­чит­ся, но Postfix мож­но не ста­вить, для это­го про­сто допи­ши­те в коман­де уста­нов­ки postfix-. Например:

sudo apt install bacula postfix-

В про­цес­се уста­нов­ки про­грам­ма пред­ло­жит настро­ить базу дан­ных для Bacula. Луч­ше сде­лать это сей­час что­бы потом не делать вруч­ную. Поэто­му выбе­ри­те Yes в сле­ду­ю­щем окне:

Посколь­ку база дан­ных нахо­дит­ся на том же сер­ве­ре, что и Bacula доста­точ­но выбрать localhost:

Далее вве­ди­те пароль от буду­щей базы данных:

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

ШАГ 2. НАСТРОЙКА BACULA STORAGE

Давай­те пер­вым делом настро­ем хра­ни­ли­ще для Bacula. Кон­фи­гу­ра­ция хра­ни­ли­ща нахо­дит­ся в фай­ле /etc/bacula/bacula-sd.conf. В кон­фи­гу­ра­ци­он­ном фай­ле есть несколь­ко секций:

  • Storage - сек­ция, с основ­ны­ми настрой­ка­ми хра­ни­ли­ща, здесь настра­и­ва­ет­ся имя хра­ни­ли­ща, а так­же IP адрес на кото­ром оно будет доступ­но, для локаль­ной сети пока доста­точ­но 127.0.0.1.
  • Director - настра­и­ва­ет­ся авто­ри­за­ция для управ­ля­ю­ще­го сер­ви­са, тут надо про­пи­сать имя сер­ви­са, кото­рый может под­клю­чит­ся и пароль, кото­рый он дол­жен использовать.
  • Device - здесь настра­и­ва­ет­ся спо­соб хра­не­ния фай­лов на физи­че­ском дис­ке и путь к пап­ке, где они будут хранится.
  • Messages - отправ­ка сооб­ще­ний, мож­но оста­вить как есть.

Каж­дая сек­ция име­ет такой синтаксис:

имя_секции {
пара­метр = значение
}

Про­бе­лы игно­ри­ру­ют­ся интер­пре­та­то­ром, а регистр имен пара­мет­ров не име­ет зна­че­ния. Сек­ций с одним име­нем может быть несколь­ко. Давай­те теперь рас­смот­рим содер­жи­мое каж­дой сек­ции, кото­рая нам нуж­на подроб­нее. Ста­рый кон­фи­гу­ра­ци­он­ный файл може­те пере­ме­стить в _back, а для этой кон­фи­гу­ра­ции создать новый:

sudo mv /etc/bacula/bacula-sd.conf{,_back}

sudo vi /etc/bacula/bacula-sd.conf

Уда­лять ори­ги­наль­ный файл не сто­ит, пото­му что может в буду­щем изме­нят­ся какие-либо пути и вам надо будет све­рит­ся с этим фай­лом. Сна­ча­ла сек­ция Storage:

Даль­ше сек­ция Director:

Сек­ция Device:

Неко­то­рые опции доволь­но стран­ные. Это пото­му что изна­чаль­но про­грам­ма исполь­зо­ва­ла не жест­кие дис­ки, а нако­пи­те­ли на маг­нит­ной лен­те для хра­не­ния дан­ных. Послед­няя сек­ция Messages. Всё оста­ет­ся как было в ори­ги­наль­ном файле:

После завер­ше­ния редак­ти­ро­ва­ния кон­фи­гу­ра­ци­он­но­го фай­ла необ­хо­ди­мо про­ве­рить его на ошиб­ки. Для это­го исполь­зуй­те такую команду:

sudo /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-sd.conf

Если про­грам­ма не выве­ла в кон­соль вооб­ще ниче­го мож­но дви­гать­ся даль­ше. Пере­за­пу­сти­те сер­вис что­бы при­ме­нить изменения:

sudo systemctl restart bacula

ШАГ 3. НАСТРОЙКА ЛОКАЛЬНОГО КЛИЕНТА BACULA FILE DAEMON

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

sudo vi /etc/bacula/bacula-fd.conf

Даль­ше идет сек­ция с основ­ны­ми настрой­ка­ми File Daemon:

Ну и стан­дарт­ная сек­ция для отправ­ки сооб­ще­ний в Director:

Если что-то меня­ли, не забудь­те про­ве­рить кон­фи­гу­ра­цию на ошиб­ки и пере­за­пу­стить сер­вис bacula-fd.

ШАГ 3. НАСТРОЙКА BACULA DIRECTOR

Кон­фи­гу­ра­ци­он­ный файл Bacula Director нахо­дит­ся по тако­му пути /etc/bacula/bacula-director.conf. Здесь тоже всё раз­би­то на сек­ции. Вы може­те посту­пить ана­ло­гич­но настрой­ке Storage. Пере­име­но­вать его и добав­лять сек­ции в пустой файл. Давай­те рас­смот­рим основ­ные сек­ции. Глав­ная сек­ция, опи­сы­ва­ю­щая сам сер­вис управ­ле­ния назы­ва­ет­ся Director:

Сле­ду­ю­щая сек­ция не обя­за­тель­ная, но она есть в кон­фи­гу­ра­ци­он­ном фай­ле Bacula - JobDefs. Эта сек­ция содер­жит зна­че­ния по умол­ча­нию, кото­рые потом мож­но будет исполь­зо­вать при созда­нии задач (Job):

Файл с мета­дан­ны­ми в фор­ма­те bsr содер­жит инфор­ма­цию в ASCII о том, где и какие фай­лы нахо­дят­ся. Она необ­хо­ди­ма для того что­бы потом мож­но было вос­ста­но­вить из резерв­ной копии отдель­ные фай­лы без вос­ста­нов­ле­ния все­го что было сохра­не­но. Даль­ше идёт сек­ция с име­нем Catalog, в кото­рой опи­сы­ва­ет­ся спо­соб под­клю­че­ния к базе дан­ных Postgresql, кото­рая была созда­на и настро­е­на во вре­мя уста­нов­ки. Если всё сде­ла­но пра­виль­но, то в ори­ги­наль­ном кон­фи­гу­ра­ци­он­ном фай­ле уже есть вер­ные данные:

Ещё тут есть сек­ция Messages с име­нем Standart и сек­ция Console. В них ниче­го менять не надо, про­сто ско­пи­руй­те их из ори­ги­наль­но­го кон­фи­гу­ра­ци­он­но­го файла.

ШАГ 4. РЕЗЕРВНОЕ КОПИРОВАНИЕ ЛОКАЛЬНОЙ ПАПКИ

Теперь у вас есть пол­но­стью настро­ен­ное хра­ни­ли­ще, eizenhorn-sd и фай­ло­вый демон eizenhorn-fd. Мож­но при­сту­пать к настрой­ке резерв­но­го копи­ро­ва­ния локаль­ной пап­ки. Для это­го в кон­фи­гу­ра­ци­он­ный файл дирек­то­ра надо доба­вить несколь­ко сек­ций. Давай­те сна­ча­ла доба­вим пул, где будут хра­нит­ся дан­ные. Фак­ти­че­ски, эта сек­ция опи­сы­ва­ет набор томов (Volume), а фак­ти­че­ски фай­лов в фай­ло­вой систе­ме с оди­на­ко­вым пре­фик­сом, в кото­рые будут запи­сы­вать­ся резерв­ные копии. Это полез­но, напри­мер, если вы хоти­те хра­нить резерв­ные копии каж­дой маши­ны в отдель­ном файле:

sudo vi /etc/bacula/bacula-dir.conf

Пул готов, даль­ше надо опре­де­лить­ся какой кли­ент мы будем исполь­зо­вать для досту­па к фай­лам. Посколь­ку это локаль­ная маши­на, надо исполь­зо­вать ранее настро­ен­ный eizenhorn-fd:

Тут надо разо­брать­ся с груп­пой пара­мет­ров уда­ле­ния дан­ных. Рань­ше, в настрой­ке пула исполь­зо­вал­ся пара­метр Volume Retention, в настрой­ке кли­ен­та ещё два. Вот их значения:

  • Job Retention - пери­од хра­не­ния инфор­ма­ции о выпол­нен­ных зада­чах. Она зани­ма­ет не мно­го места, поэто­му хра­нить её мож­но дол­го. После уда­ле­ния вы не смо­же­те посмот­реть какие зада­чи когда были выполнены.
  • File Retention - пери­од хра­не­ния инфор­ма­ции о место­на­хож­де­нии фай­лов. Зани­ма­ет уже боль­ше места, но поз­во­ля­ет вос­ста­но­вить отдель­ные фай­лы из резерв­ной копии. Без него вы смо­же­те вос­ста­но­вить фай­лы толь­ко рас­па­ко­вав резерв­ную копию полностью.
  • Volume Retention - отве­ча­ет за хра­не­ние самих дан­ных резерв­ных копий. После уда­ле­ния вы уже не смо­же­те полу­чить к ним доступ.

После того как кли­ент есть оста­лось понять какие фай­лы надо поме­стить в резерв­ную копию, для это­го есть сек­ция FileSet:

В дан­ном слу­чае инте­ре­сен толь­ко пара­метр File, кото­рый ука­зы­ва­ет путь к пап­ке, кото­рую надо поме­стить в резерв­ную копию. В дан­ном слу­чае это пап­ка с кон­фи­гу­ра­ци­ей систе­мы - /etc.

Теперь надо ука­зать когда запус­кать резерв­ную копию с помо­щью сек­ции Scedule:

Имя Name может быть про­из­воль­ным, вы его буде­те исполь­зо­вать поз­же, при состав­ле­нии зада­чи, а пара­метр Run дол­жен ука­зы­вать когда надо запус­кать резерв­ную копию, а так­же может пере­опре­де­лять пара­мет­ры задан­ные в зада­че (Job). Кро­ме того мож­но задать несколь­ко дирек­тив Run для того что­бы настро­ить раз­ные типы резерв­но­го копирования.

Пере­опре­де­ляя уро­вень резер­ви­ро­ва­ния (Level) мож­но ука­зать такие параметры:

  • Full - все фай­лы и ката­ло­ги пере­чис­лен­ные в FileSet не зави­си­мо от того изме­ни­лись они или нет.
  • Incremental - толь­ко те фай­лы и ката­ло­ги из FileSet, кото­рые изме­ни­лись с момен­та послед­ней резерв­ной копии.

Подроб­но о фор­ма­те вре­ме­ни мож­но узнать в офи­ци­аль­ной доку­мен­та­ции. В упро­щен­ном вари­ан­те мож­но исполь­зо­вать такой синтаксис:

день at ЧЧ:ММ

Или:

месяц номер_недели день at ЧЧ:ММ

В каче­стве дня мож­но исполь­зо­вать daily (каж­дый день) или sunmonthewedthu, fri, sat. В каче­стве номе­ра неде­ли: 1st, 2st, 3st, 4st, 5st. Напри­мер, мож­но запи­сать вот так:

Даль­ше оста­лось объ­еди­нить всё создан­ное ранее в зада­че (Job):

 

После завер­ше­ния настрой­ки про­верь­те кон­фи­гу­ра­ци­он­ный файл на ошибки:

sudo /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-dir.conf

И если всё хоро­шо, пере­за­пу­сти­те сервис:

sudo systemctl restart bacula-dir

ШАГ 5. НАСТРОЙКА КОНСОЛИ

Кон­фи­гу­ра­ци­он­ный файл кон­со­ли нахо­дит­ся здесь /etc/bacula/bconsole.conf. В нём есть толь­ко одна сек­ция и здесь нуж­но ука­зать на каком IP адре­се ожи­да­ет соеди­не­ний Bacula Director, а так­же пароль, к нему настро­ен­ный в сек­ции Director фай­ла /etc/bacula/bacula-dir.conf. Напри­мер:

Даль­ше мож­но пере­хо­дить к рабо­те с консолью.

ШАГ 5. РЕЗЕРВНОЕ КОПИРОВАНИЕ В КОНСОЛИ

Рабо­тать с кон­со­лью Bacula доволь­но непри­выч­но. Но у неё есть свои плю­сы. Для запус­ка кон­со­ли выпол­ни­те такую команду:

sudo bconsole

Вы уви­ди­те такое окно, с при­гла­ше­ни­ем вво­да в виде звездочки:

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

Боль­ше ниче­го выве­де­но не будет. Но резуль­тат выпол­не­ния зада­чи нику­да не теря­ет­ся. Он при­хо­дит вам в виде сооб­ще­ний. Вы може­те закрыть кон­соль и сно­ва вой­ти или про­сто нажать Enter и уви­ди­те сооб­ще­ние о том, что You have messages:

Для того что­бы про­чи­тать сооб­ще­ния исполь­зуй­те коман­ду messages:

messages

В дан­ном слу­чае будет выве­де­на крат­кая ста­ти­сти­ка по зада­че, а так­же резуль­тат её выпол­не­ния, ОК:

Посмот­реть спи­сок выпол­нен­ных задач мож­но коман­дой list jobs:

Обра­ти­те вни­ма­ние, что у каж­дой зада­чи есть свой ID и вы може­те с помо­щью него посмот­реть спи­сок фай­лов каж­дой задачи:

list files jobid=14

ШАГ 6. ВОССТАНОВЛЕНИЕ ДАННЫХ

Для вос­ста­нов­ле­ния дан­ных мож­но создать спе­ци­аль­ную зада­чу (Job), а затем вос­поль­зо­вать­ся коман­дой restore, кото­рая поз­во­ля­ет вос­ста­но­вить нуж­ную резерв­ную копию. Сна­ча­ла надо доба­вить нуж­ную зада­чу в кон­фи­гу­ра­ци­он­ный файл /etc/bacula/bacula-dir.conf. Напри­мер, для вос­ста­нов­ле­ния ранее сде­лан­ной резерв­ной копии пап­ки /etc:

Сохра­ни­те изме­не­ния и пере­за­пу­сти­те bacula-dir, затем создай­те пап­ку, куда будет выпол­нят­ся восстановление:

sudo mkdir /opt/restore

Запу­сти­те кон­соль и выпол­ни­те коман­ду restore для того что­бы начать восстановление:

sudo bconsole

restore

Даль­ше вам надо знать зада­чу по резерв­но­му копи­ро­ва­нию, кото­рую вы хоти­те вос­ста­но­вить. Узнать её мож­но несколь­ки­ми способами:

  • 1 - выве­дет послед­ние 20 выпол­нен­ных задач;
  • 2 - выве­дет зада­чи, у кото­рых есть ука­зан­ные файлы;
  • 3 - поз­во­ля­ет вве­сти вруч­ную ID нуж­ных задач;
  • 4 - поз­во­ля­ет выпол­нить SQL запрос.

Все вари­ан­ты я рас­смат­ри­вать не буду. Для при­ме­ра мож­но вос­поль­зо­вать­ся пер­вым, и выбрать одну из ранее выпол­нен­ных задач:

Давай­те попро­бу­ем вос­ста­но­вить фай­лы из резерв­ной копии, создан­ной зада­ни­ем с ID 15. Для это­го нажми­те 4 и вве­ди­те 15:

Здесь нуж­но пере­ме­щать­ся по вир­ту­аль­ной фай­ло­вой систе­ме с помо­щью команд cd и ls, а так­же отме­чать или сни­мать отмет­ку для фай­лов кото­рые надо извлечь коман­да­ми mark и unmark. Когда всё будет гото­во выпол­ни­те коман­ду done:

После это­го ути­ли­та пред­ло­жит выбрать кли­ент с помо­щью кото­ро­го будет выпол­нят­ся восстановление:

А затем ути­ли­та пока­жет общую инфор­ма­цию о буду­щем вос­ста­нов­ле­нии и вам надо набрать yes для того что­бы продолжать.

После завер­ше­ния вос­ста­нов­ле­ния фай­лы появят­ся в пап­ке /opt/restore. Если вы хоти­те вос­ста­но­вить все фай­лы из послед­ней резерв­ной копии, то вам не надо делать всё это доста­точ­но выпол­нить коман­ду run и пере­дать ей имя зада­чи по восстановлению:

run LocalRestore