Bacula 7.0.5 – Postgresql

14 czerwca 2014

Bacula – system do tworzenia kopii zapasowych typu klient/serwer, udostępniany na licencji otwartego oprogramowania (GPL), pozwalający tworzyć zaawansowane, profesjonalne systemy kopii bezpieczeństwa.

System umożliwia dopasowanie strategii kopii bezpieczeństwa do potrzeb małych, średnich i dużych konfiguracji. Pozwala m.in. na szyfrowanie transmisji, kompresję plików w locie, zdalny monitoring ze stacji klienckiej, wykorzystanie bibliotek taśmowych, dysków twardych, dysków DVD. Informacje o wszystkich przechowywanych plikach (tzw. katalog) trzyma w bazie danych (MySQL, PostgreSQL, SQLite).

źródło :

http://pl.wikipedia.org/wiki/Bacula

Bacula 7.0.5

Tradycyjnie przykład instalacji i konfiguracji przedstawię na systemie Debian 🙂 W tym artykule Bacula zostanie zainstalowana ze źródeł.

Na początku zainstaluj następujące pakiety :

apt-get update

apt-get install postgresql gcc build-essential make libpq-dev subversion openssl

Serwerem baz danych będzie Postgresql.

Ściągamy oprogramowanie Bacula ze strony:

http://sourceforge.net/projects/bacula/files/bacula/

W konsoli wykonujemy :

cd /tmp

wget http://netcologne.dl.sourceforge.net/project/bacula/bacula/7.0.5/bacula-7.0.5.tar.gz 

Rozpakowujemy plik:

tar -zxf bacula-7.0.5.tar.gz

cd /tmp/bacula-7.0.5

cp -r bacula-7.0.5 /usr/src

cd /usr/src/bacula-7.0.5

Konfigurujemy :

./configure --prefix=/usr/local/bacula --with-scriptdir=/usr/local/bacula/scripts --with-postgresql=/usr

Instalujemy :

make

make install

KONFIGURACJA OPROGRAMOWANIA BACULA :

Przechodzimy do katalogu /usr/local/bacula/etc :

cd /usr/local/bacula/etc

Można zrobić kopię plików konfiguracyjnych :

cp bacula-dir.conf bacula-dir.conf.kopia

cp bacula-sd.conf bacula-sd.conf.kopia

cp bconsole.conf bconsole.conf.kopia

Utworzenie bazy danych.

Wykorzystanie skryptów dołączonych do Bacula.

Wybieramy miejsce bazy danych i tworzymy katalog.

Założenie pierwsze :

Baza danych będzie się znajdować na partycji : /dev/sdb1

Montujemy partycję :

mkdir /mnt/bacula_baza

mount /dev/sdb1 /mnt/bacula_baza

Aby partycja była montowana automatycznie wykonujemy :

nano /etc/fstab

dodajemy do pliku :

/dev/sdb1    /mnt/bacula_baza    ext3    defaults,users,auto     0    1 

Nadajemy właściciela dla katalogu /mnt/bacula_baza :

chown postgres:postgres /mnt/bacula_baza

Przechodzimy do katalogu ze skryptami /usr/local/bacula/scripts :

cd /usr/local/bacula/scripts

Wykonujemy :

chown postgres:postgres ./create_postgresql_database

chown postgres:postgres ./make_postgresql_tables

chown postgres:postgres ./grant_postgresql_privileges

Tworzymy plik w którym będą składowane logi :

touch /var/log/postgres-bacula.log

Nadajemy właściciela pliku :

cd /var/log/

chown postgres:postgres postgres-bacula.log

Wyszukujemy w systemie lokalizację initdb :

find / | grep initdb

Założenie  :

initdb znajduje się w /usr/lib/postgresql/9.4/bin/initdb

Tworzymy bazę danych :

Logujemy się jako użytkownik postgres :

su postgres

cd /

Uruchamiamy initdb ze ścieżką do katalogu w którym znajdować się będzie baza danych :

/usr/lib/postgresql/9.4/bin/initdb /mnt/bacula_baza

Uruchamiamy następnie bazę danych :

/usr/lib/postgresql/9.4/bin/pg_ctl -D /mnt/bacula_baza -l /var/log/postgres-bacula.log start

Powinna być informacja : serwer w trakcie uruchamiania

Jeżeli nie możemy uruchomić bazy danych, prawdopodobnie postgresql jest już uruchomiony. Wyłącz postgresql i uruchom ponownie wykonując powyższe polecenie.

Będąc zalogowanym jako  postgres przejdź następnie do katalogu /usr/local/bacula/scripts :

cd /usr/local/bacula/scripts

Wykonaj następujące skrypty :

./create_postgresql_database

./make_postgresql_tables

./grant_postgresql_privileges

Następnie spróbuj zalogować się do bazy danych i nadaj hasło użytkownikowi bacula :

psql -d bacula

alter user bacula with password 'haslo';

Wychodzimy.

Logujemy się następnie jako root:

su root

Przechodzimy do katalogu : /usr/local/bacula/etc

cd /usr/local/bacula/etc

Modyfikujemy plik : bacula-dir.conf

Polecam w osobnym pliku skonfigurować dyrektywy Job, FileSet, Client, Pool. Zapewnimy w ten sposób porządek w plikach konfiguracyjnych.

Założenie drugie : Każdy Klient oprogramowania Bacula będzie posiadał swoją konfigurację w osobnym pliku.

Założenie trzecie : Director i Storage będą działać na tym samym serwerze.

Modyfikujemy dyrektywę Director (przykład zawartości pliku) :

Director {
Name = bacula-dir
DIR Port = 9101
DIR Address = 192.168.3.107
QueryFile = /usr/local/bacula/scripts/query.sql
WorkingDirectory = /opt/bacula/working
PidDirectory = /var/run
Maximum Concurrent Jobs = 7
Password = haslodir # Hasło do konsoli
Messages = Daemon-bacula-dir
}

# Name – nazwa zarządcy
# DIRport – numer portu na którym nasłuchuje zarządca
# QueryFile – lokalizacja pliku z zapytaniami SQL
# WorkingDirectory – katalog w którym trzymane są pliki, tworzone przez zarządce podczas pracy
# PidDirectory – lokalizacja pliku PID
# Maximum Concurrent Jobs – ilość zadań jakie może wykonywać zarządca w jednym czasie
# Password – Hasło używane przez programy, które będą łączyć się z zarządcą np. konsola administracyjna
# DirAddress – adres IP interfejsu sieciowego na którym pracuje zarządca.

Tworzymy plan wykonywania zadań (Job) :

Schedule {
Name = plan tygodniowy-linux
Run = Full mon-sat at 18:18
}

Dodajemy Storage :

Storage {
Name = Dysk
Address = 192.168.3.107
SD Port = 9103
Password = "haslosd"
Device = Dysk twardy
Media Type = File
Maximum Concurrent Jobs = 1
}

Modyfikujemy dyrektywę Catalog :

Catalog {
Name = Baza_Bacula
DB Name = bacula
DB Address = 127.0.0.1
DB Port = 5432
User = bacula
Password = haslo
}

# Name – nazwa zasobu
# DB Name– nazwa bazy danych
# DB Address – adres IP serwera baz danych
# DB Port – port na którym nasłuchuje serwer baz danych.
# User – użytkownik bazy danych
# Password – hasło użytkownika bazy danych

Modyfikujemy dyrektywę Messages :

Messages {
Name = Daemon-bacula-dir
mailcommand = /usr/local/bacula/sbin/bsmtp -h localhost -f \\(Bacula\) \%r\\ -s \”Bacula daemon message\ %r
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = /var/log/bacula.log = all, !skipped
}

Pozostałe dyrektywy Job, FileSet, Client, Pool będą konfigurowane w osobnych plikach. Każdy klient będzie posiadał swoją konfigurację.

Należy w pliku bacula-dir.conf dodać odnośniki (@)do tych plików. Dla przykładu utworzona zostanie konfiguracja dla klienta postfix-fd

@/usr/local/bacula/etc/postfix-fd.conf

Tworzymy następnie nowy plik konfiguracyjny dla klienta :

touch /usr/local/bacula/etc/postfix-fd.conf

W pliku tym konfigurujemy :

Dyrektywę Klienta:

Client {
Name = postfix-fd
Address = 192.168.3.131
FD Port = 9102
Catalog = Baza_Bacula
Password = postfix-fd-haslo
AutoPrune = no
}

# Name – nazwa klienta
# Address – adres IP klienta, na którym będzie tworzona kopia zapasowa
# FD Port – numer portu na którym nasłuchuje klient
# Catalog – nazwa zasobu Catalog.
# Password – hasło autoryzacyjne. Zarządca użyje tego hasła w celu połączenia się z klientem.
# AutoPrune – włączenie lub wyłączenie czyszczenia przestarzałych rekordów w bazie danych

Następnie konfigurujemy dyrektywę Pool :

Pool {
Name = Backup_Pelny-postfix-fd
Pool Type = Backup
Recycle = yes
Auto Prune = yes
Volume Retention = 120 days
Maximum Volume Bytes = 100 GB
Storage = Dysk
}

# Name – nazwa puli woluminów
# Pool Type – Przeznaczenie woluminu
# Recycle – włączenie lub wyłączenie recyklingu
# Volume Retention – czas w którym wolumin będzie zachowywał dane
# Maximum Volume Bytes – określenie rozmiaru woluminu
# Storage –nazwa urządzenia w którym wolumin będzie utworzony

Struktura katalogów w systemie Linux :

Wszystkie pliki znajdują się w katalogu głównym / :

/bin – znajdują się tutaj pliki wykonywalne np. cp, ls (dostępne dla wszystkich użytkowników systemu)
/boot – pliki programu rozruchowego
/etc – pliki konfiguracyjne
/sys – interfejs zmiany parametrów jądra
/home – katalogi domowe użytkowników
/root – katalog domowy użytkownika root
/lib – biblioteki dla programów z katalogów /bin i /sbin
/opt – opcjonalne aplikacje
/sbin – pliki wykonywalne poleceń, które mogą być wykonywane tylko przez administratora
/usr – dodatkowe programy, które umożliwiają pracę zwykłemu użytkownikowi systemu
/usr/bin – jest to główny katalog programów wykonywalnych, używanych przez zwykłych użytkowników, które nie są potrzebne przy starcie lub naprawie systemu
/usr/include – standardowe pliki nagłówkowe dla kompilatora C
/usr/lib – znajdują się tutaj biblioteki obiektowe oraz dynamiczne
/usr/sbin – katalog zawiera pliki wykonywalne programów do administracji systemem, które nie są niezbędne do startu lub naprawy systemu np. demony różnych usług sieciowych
/usr/share – katalog zawiera podkatalogi ze specyficznymi danymi aplikacji. Dane niezależne od architektury, a więc między nimi współdzielone.
/usr/src – pliki źródłowe
/usr/local – katalog ten jest przeznaczony dla programów instalowanych lokalnie
/var – pliki często ulegające zmianom, takie jak: logi, bazy danych, tymczasowe pliki e-mail.
/var/lock – pliki blokady zasobów będących w użyciu
/var/log – pliki logów
/var/mail – skrzynki pocztowe użytkowników
/var/run – pliki przechowujące informacje o działaniu systemu od ostatniego jego uruchomienia
/var/spool – miejsce przechowania oczekujących zadań np. kolejki wydruku, nieprzeczytane e-maile, zadania cron
/var/tmp – pliki tymczasowe, które powinny być zachowywane przy zamknięciu systemu
/var/www – pliki serwera www
/var/opt – zmienne dane dla /opt
/var/local – zmienne dane dla /usr/local
/var/lib – zmienne informacje programów
/var/cache – zbuforowane dane programów
/srv – katalog dla serwerów

KATALOGI, KTÓRE MOŻNA WYKLUCZYĆ Z BACKUPU :

/dev – pliki urządzeń
/mnt – punkt montowania systemów plików
/media – punkt montowania dla nośników wymienialnych
/proc – wirtualny katalog, zawierający dane o aktualnie uruchomionych procesach
/tmp – pliki tymczasowe

Ustawiamy to co ma być backupowane. Konfigurujemy dyrektywę FileSet :

FileSet {
Name = postfix-fd
Include {
Options {
Signature = MD5
}
File = /
}
Exclude {
File = /proc
File = /tmp
File = /var/tmp
File = /dev
File = /mnt
}
}

# Name – nazwa zasobu
# Signature – sposób tworzenia sygnatur kopii zapasowych
# File – podajemy tutaj ścieżki do katalogów, które mają być archiwizowane lub wykluczone
# W Exclude podajemy to co ma być wykluczone z backupu.

Konfigurujemy ostatnią dyrektywę o nazwie Job :

Job {
Name = Backup_Pelny-postfix-fd
Type = Backup
Level = Full
Client = postfix-fd
Pool = Backup_Pelny-postfix-fd
Schedule = plan tygodniowy-linux
Messages = Daemon-bacula-dir
FileSet = postfix-fd
Write Bootstrap = /opt/bacula/working/%n.bsr
}

# Name – nazwa zadania Baculi
# Type – typ zadania. Możliwe typy : Backup, Restore, Verify, Admin
# Level – określenie poziomu zadania. Full – kopia pełna, Incremental – kopia przyrostowa, Differental – kopia różnicowa
# Client – nazwa klienta
# Pool – nazwa zasobu w którym będą magazynowane dane
# Schedule – nazwa harmonogramu zadań

Następnie modyfikujemy plik : bacula-sd.conf

Założenie : Backupy będą przechowywane na partycji /dev/sdc1

Katalog /mnt/woluminy w którym zostanie zamontowana partycja.

Modyfikujemy pierwszą dyrektywę w tym pliku o nazwie Storage :

Storage {
Name = bacula-sd
SD Port = 9103
WorkingDirectory = /opt/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 2
SD Address = 192.168.3.107
}

# Name – nazwa demona magazynowania
# SDPort – numer portu na którym nasłuchuje demon magazynowania
# WorkingDirectory – katalog w którym trzymane są pliki, które są tworzone przez demona magazynowania podczas pracy
# Pid Directory – PID
# Maximum Concurrent Jobs – liczba zadań obsługiwana przez demona
# SDAddress- adres IP serwera na którym działa demon magazynowania. Pamiętaj o zmianie adresu na swój.

Konfigurujemy dyrektywę Director :

Director {
Name = bacula-dir
Password = haslosd
}

# Name – nazwa zarządcy, który może korzystać z demona magazynowania.
# Password – hasło autoryzacyjne

Modyfikujemy dyrektywę Device :

Device {
Name = Dysk twardy
Archive Device = /mnt/woluminy
Device Type = File
Media Type = File
Removable Media = no
Random Access = yes
Requires Mount = no
}

# Name – definiujemy tutaj nazwę urządzenia
# Media Type – typ woluminu
# Archive Device – punkt montowania dysku
# Random Access – jeśli urządzeniem jest dysk twardy, naped cd-dvd dajemy Yes.
# AutomaticMount –
# RemovableMedia – jeśli urządzenie obsługuje wymienne nośniki dajemy Yes
# AlwaysOpen – czy urządzenie ma być cały czas dostępne ?

Na końcu konfigurujemy dyrektywę Messages :

Messages {
Name = Standard
director = bacula-dir = all
}

Konfiguracja konsoli :

Przechodzimy do pliku /usr/local/bacula/etc/bconsole.conf :

cd /usr/local/bacula/etc/

nano bconsole.conf

Modyfikujemy :

Director {
Name = bacula-dir #podajemy nazwę zarządcy
DIRport = 9101 #numer portu na którym nasłuchuje zarządca
address = 192.168.3.107 #adres IP serwera na którym działa zarządca
Password = haslodir #hasło zarządcy
}

Test połączenia z konsolą:

cd /usr/local/bacula/sbin

./bconsole

Jeżeli dostaniemy coś podobnego do tego :

Connecting to Director 127.0.0.1:9101
1000 OK: 1 bacula-dir Version: 7.0.5 (28 July 2014)
Enter a period to cancel a command.
*

Znaczy że wszystko działa poprawnie i mamy połączenie z zarządcą.

Aby można było łączyć się z klientem, należy u klienta skonfigurować usługę. Na serwerze postfix-fd należy zainstalować (w przypadku systemu Linux) klienta oprogramowania Bacula.

Należy ściągnąć klienta Bacula ze strony http://sourceforge.net/projects/bacula/files/bacula/

Rozpakować i przeprowadzić instalację  :

cd /usr/src

tar -zxf bacula-7.0.5.tar.gz

apt-get install gcc build-essential make libpq-dev subversion openssl

./configure --prefix=/usr/local/bacula --disable-build-dird --disable-build-stored --enable-client-only

make

make install

Przechodzimy do konfiguracji klienta :

nano /usr/local/bacula/etc/bacula-fd.conf

Konfigurujemy pierwszą dyrektywę :

FileDaemon {
Name = postfix-fd
FD Address = 192.168.3.131  #adres ip interfejsu, na którym działa klient
FD Port = 9102   #numer portu na którym nasłuchuje klient
Working Directory = /opt/bacula/working
PID Directory = /var/run    #tutaj zapisywany jest id. procesu
Maximum Concurrent Jobs = 1  #ilosc zadan jakie jednoczesnie wykonuje klient
}

Konfigurujemy drugą dyrektywę :

Director {
Name = bacula-dir    # nazwa zarządcy uprawnionego do używania klienta
Password = "postfix-fd-haslo"  # hasło którym zarządca będzie się autoryzował z klientem
}

Konfigurujemy trzecią dyrektywę :

Messages {
Name = postfix-fd
Director = bacula-dir = all, !skipped, !restored   #nazwa zarządcy oraz poziom raportowania
}

Aby uruchomić klienta wystarczy wykonać :

/usr/local/bacula/sbin/bacula-fd

Przed pierwszym wykonaniem backupu warto skonfigurować jeszcze automatyczne etykietowanie wolumenów.

Przechodzimy na serwer Bacula  :

cd /usr/local/bacula/etc

nano bacula-sd.conf

Modyfikujemy dyrektywę Device :

Dodajemy parametr : LabelMedia = yes

Przechodzimy do pliku konfiguracyjnego zarządcy. Modyfikujemy dyrektywę <strong>Pool</strong>. W tym przykładzie znajduje się ona
w pliku konfiguracyjnym przeznaczonym dla klienta.

nano postfix-fd.conf

Na początku dodajemy dyrektywę Counter (zalecam ją dodać tylko do pliku bacula-dir.conf)

Counter {
Name = licznik
Minimum = 0
Maximum = 1000
}

Edytujemy dyrektywę Pool :

Dodajemy parametr :

Label Format = "Backup-${licznik+}-${Client}"

Dobrze jest jeszcze ustawić aby na jednym woluminie znajdował się jeden backup (jedno wykonane zadanie):

Maximum Volume Jobs = 1

Resetujemy usługę zarządcy i magazyniera :

./usr/local/bacula/sbin/bacula restart

Wykonujemy pierwszy “ręczny backup” :

Uruchamiamy konsolę :

./usr/local/bacula/sbin/bconsole

Aby przeprowadzić ręczny Backup wpisujemy w konsoli :

run job=Backup_Pelny-postfix-fd

 

Dodatek :

W przypadku systemu Windows  należy :

– zainstalować klienta Bacula dla systemów Windows http://sourceforge.net/projects/bacula/files/Win32_64/ oraz przeprowadzić instalację na systemie klienckim. Przykład instalacji przedstawiam poniżej. Należy pamiętać o skonfigurowaniu pliku konfiguracyjnego zarządcy.

w1

w2

w3

w4

w5

w6

w7

w8

w9

Uruchamiamy services.msc

w10Jeżeli podczas uruchamiania pojawi się błąd prawdopodobnie należy wykasować w pliku konfiguracyjnym bacula-fd zaznaczoną zawartość :

w11

Zapisujemy zmiany w pliku i uruchamiamy klienta. Klikamy prawym przyciskiem myszy i wybieramy Uruchom :

w12

Zobacz również :

Przywracanie systemu Linux

Przywracanie plików i katalogów

Bacula-Web

Baculum

markos
Specjalizuję się w systemach komputerowych Windows oraz Linux. Oprócz wykonywanej pracy w zawodzie, informatyka jest moją pasją.

8
Dodaj komentarz

avatar
8 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
KarolMarcin Habae-proitTomaszGoryl Recent comment authors
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
Marcin
Gość
Marcin

Liczę na rozbudowanie wpisu 😉

Goryl
Gość
Goryl

Świetny wpis !

Tomasz
Gość
Tomasz

Dzięki za wpis. Wdrożyłem ten system i przeprowadziłem pierwszy Backup 🙂

Marcin Haba
Gość
Marcin Haba

Witam,

Przyjemny opis instalacji Bacula i narzędzi web. Gratuluję!

Jeżeli chodzi o Bweb, to ostatnią wersją, która zawiera to narzędzie jest wersja 5.2.13.

Od wersji 7.0.x nowe narzędzie uwzględnione w Twoim artykule nazywa się Baculum i jest zamiast Bweb.

Jeżeli chodzi o język polski, to w którejś z przyszłych wersji na pewno będzie wspierany.

Dzięki za artykuł.

Z pozdrowieniami
Marcin

e-proit
Gość

Dzięki.Już poprawiłem nazwę na Baculum ale jeszcze będą drobne modyfikacje 😉

Baculum tak sobie działa jako narzędzie, konsolą (Bconsole) szybciej wszystko się zrobi 🙂

Pozdrawiam

Marcin Haba
Gość
Marcin Haba

Dzięki 🙂

Zgadzam się z Tobą. Przy pomocy Bconsole można sobie przyspieszyć pracę.

Pozdrawiam
Marcin

Marcin Haba
Gość
Marcin Haba

Nawiasem mówiąc, Baculum ma wbudowaną konsole web, która wysyła komendy bezpośrednio do bconsole 😉

Dopełniania co prawda nie ma, lecz wpisując z głowy komendy, można coś podziałać i wystarczy tylko przeglądarka internetowa z dowolnego miejsca na swiecie 🙂 Odpada też potrzeba otwierania w firewallu portu specjalnie dla bconsole po stronie serwera oraz intsalacja bconsole na używanym systemie opracyjnym.

Karol
Gość
Karol

Bardzo dobry wpis ! Czekam na następne 🙂