
Практическая работа
1.Установите программу Bacula, следуя указаниям из лабораторной работы.
Параметры настройки возьмите из таблицы: Расположение Director |
Машина server |
Расположение Storage |
Машина server |
Расположение клиента |
Машина client |
Имя Director |
dir-ВашиИнициалы (например, dir-sab) |
Имя Storage |
stor-ВашиИнициалы (например, stor-sab) |
Имя клиента |
cli-ВашиИнициалы (например, cli-sab) |
Пароль от Director |
dirВашиИнициалы (например, dirsab) |
Пароль от Storage |
storВашиИнициалы (например, storsab) |
Пароль от клиента |
clientВашиИнициалы (например, clientsab) |
Директория для восстановления |
/homeВашиИнициалы (например, /homesab) |
2. Используя консольную утилиту сделайте полное резервное копирование домашней директории клиента.
клиент
nano /etc/bacula/bconsole.conf
Director {
Name = dir-baranovv
Password = "dirbaranovv" # Пароль для подключения Director
}
FileDaemon {
Name = baranovv-client-fd
FDPort = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /run/bacula
Plugin Directory = /usr/lib/bacula
FDAddress = 192.168.122.5 # IP-адрес клиента
}
Messages {
Name = Standard
director = baranovv-server-dir = all, !skipped, !restored
} сервер sudo nano /etc/bacula/bacula-dir.conf
Director { Name = dir-baranovv DIRport = 9101 QueryFile = "/etc/bacula/scripts/query.sql" WorkingDirectory = /var/lib/bacula PidDirectory = /var/run/bacula Messages = Daemon
Maximum Concurrent Jobs = 10 Password = "dirbaranovv" # Установите свой пароль }
Catalog { Name = MyCatalog dbname = "bacula" # Имя базы данных dbuser = "bacula" # Имя пользователя dbpassword = "bacula" # Пароль для пользователя DB Address = "192.168.122.4" DB Port = 5432 # Порт PostgreSQL }
JobDefs { Name = "DefaultJob" Type = Backup Level = Incremental Client = baranovv-server-fd FileSet = "Full Set" Schedule = "WeeklyCycle" Storage = File1 Messages = Standard Pool = File SpoolAttributes = yes Priority = 10 Write Bootstrap = "/var/lib/bacula/%c.bsr" } Job {
Name = "BackupClient1"
Type = Backup
Level = Full
Client = baranovv-client-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = stor-baranovv
Messages = Standard
Pool = File
} Job { Name = "BackupCatalog" JobDefs = "DefaultJob" Level = Full FileSet="Catalog" Schedule = "WeeklyCycleAfterBackup" RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup.pl MyCatalog"
RunAfterJob = "/etc/bacula/scripts/delete_catalog_backup" Write Bootstrap = "/var/lib/bacula/%n.bsr" Priority = 11 # run after main backup } Job { Name = "RestoreFiles" Type = Restore Client=baranovv-server-fd Storage = File1 FileSet="Full Set" Pool = File Messages = Standard Where = /nonexistant/path/to/file/archive/dir/bacula-restores } FileSet { Name = "Full Set" Include { Options { signature = MD5 } File = /usr/sbin } Exclude { File = /var/lib/bacula File = /nonexistant/path/to/file/archive/dir File = /proc File = /tmp File = /sys File = /.journal File = /.fsck } }
Schedule { Name = "WeeklyCycle" Run = Full 1st sun at 23:05 Run = Differential 2nd-5th sun at 23:05 Run = Incremental mon-sat at 23:05 } Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 23:10 } FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = "/var/lib/bacula/bacula.sql" } } Client { Name = baranovv-server-fd Address = 192.168.122.5 # Укажите IP-адрес клиента FDPort = 9102 # Порт File Daemon (по умолчанию 9102) Catalog = MyCatalog # Название каталога Password = "clientbaranovv" # Пароль для клиента File Retention = 60 days # Срок хранения данных о файлах Job Retention = 6 months # Срок хранения данных о заданиях AutoPrune = yes # Включение автоматической очистки }
Client { Name = baranovv-client-fd Address = 192.168.122.5 # Укажите IP-адрес клиента FDPort = 9102 # Порт File Daemon (по умолчанию 9102) Catalog = MyCatalog # Название каталога Password = "clientbaranovv" # Пароль для клиента File Retention = 60 days # Срок хранения данных о файлах Job Retention = 6 months # Срок хранения данных о заданиях AutoPrune = yes # Включение автоматической очистки } Autochanger { Name = File1 # Do not use "localhost" here
Address = localhost # N.B. Use a fully qualified name here SDPort = 9103 Password = "1Gc5tV-dVvizlVm8xm2K99gqzxr8mjXW-" Device = FileChgr1 Media Type = File1 Maximum Concurrent Jobs = 10 # run up to 10 jobs a the same time Autochanger = File1 # point to ourself } # Definition of a second file Virtual Autochanger device # Possibly pointing to a different disk drive Autochanger { Name = File2 # Do not use "localhost" here Address = localhost # N.B. Use a fully qualified name here SDPort = 9103 Password = "1Gc5tV-dVvizlVm8xm2K99gqzxr8mjXW-" Device = FileChgr2 Media Type = File2 Autochanger = File2 # point to ourself # Maximum Concurrent Jobs = 10 # run up to 10 jobs a the same time } # Reasonable message delivery -- send most everything to email address # and to the console Messages { Name = Standard
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e o$ operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Int$ mail = root = all, !skipped operator = root = mount console = all, !skipped, !saved append = "/var/log/bacula/bacula.log" = all, !skipped catalog = all } # # Message delivery for daemon messages (no job). Messages { Name = Daemon mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon m$ mail = root = all, !skipped console = all, !skipped, !saved append = "/var/log/bacula/bacula.log" = all, !skipped }
Storage { Name = stor-baranovv Address = 192.168.122.4 # IP-адрес сервера Bacula Storage Daemon SDPort = 9103 # Порт Storage Daemon (по умолчанию 9103) Password = "storbaranovv" # Пароль для Storage Daemon Device = DevStorage # Имя устройства (из bacula-sd.conf) Media Type = File # Тип носителя (из bacula-sd.conf) }
# Default pool definition Pool { Name = Default Pool Type = Backup Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 365 days # one year Maximum Volume Bytes = 50G # Limit Volume size to something reasonable Maximum Volumes = 100 # Limit number of Volumes in Pool } # File Pool definition Pool { Name = File Pool Type = Backup Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 365 days # one year Maximum Volume Bytes = 50G # Limit Volume size to something reasonable Maximum Volumes = 100 # Limit number of Volumes in Pool Label Format = "Vol-" # Auto label } # Scratch pool definition Pool { Name = Scratch Pool Type = Backup } Console { Name = baranovv-server-mon Password = "bMXx9zyaOMlLiuyEytglGo6PYadLmISTH" CommandACL = status, .status } sudo -u postgres psql
CREATE ROLE bacula WITH LOGIN PASSWORD 'bacula';
CREATE DATABASE bacula OWNER bacula;
GRANT ALL PRIVILEGES ON DATABASE bacula TO bacula;
\q
sudo -u postgres psql
sudo /usr/share/bacula-director/make_postgresql_tables
sudo /usr/share/bacula-director/grant_postgresql_privileges
CREATE ROLE root WITH LOGIN PASSWORD 'postgres';
ALTER ROLE root SUPERUSER;
sudo nano /usr/share/bacula-director/make_postgresql_tables
заменить db_name=${db_name:-XXX_DBNAME_XXX} на db_name=${db_name:-bacula}
аналогично sudo nano /usr/share/bacula-director/grant_postgresql_privileges
sudo /usr/share/bacula-director/make_postgresql_tables
sudo /usr/share/bacula-director/grant_postgresql_privileges
sudo -u postgres psql
GRANT ALL PRIVILEGES ON DATABASE bacula TO bacula;
\c bacula
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bacula;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bacula;
sudo systemctl status bacula-director (чиню ошибку)
sudo nano /etc/bacula/bacula-sd.conf
Storage {
Name = stor-baranovv
SDPort = 9103
WorkingDirectory = /var/lib/bacula
PidDirectory = /var/run/bacula
Maximum Concurrent Jobs = 20
Messages = Standard
SDAddress = 192.168.122.4 # Укажите IP-адрес сервера Bacula SD
}
#Director { # Name = baranovv-server-dir # Password = "storbaranovv" #} Director { Name = dir-baranovv # Имя должно совпадать с секцией Director в bacula-dir.conf Password = "storbaranovv" # Пароль должен совпадать с паролем в bacula-dir.conf }
#Director {
# Name = baranovv-server-mon
# Password = "FckzbLHdaFs-Gp87LHGLpk1VBWLYMOmDV"
# Monitor = yes
#}
Autochanger {
Name = FileChgr1
Device = FileChgr1-Dev1
Changer Command = ""
Changer Device = /dev/null
}
Device {
Name = FileChgr1-Dev1
Media Type = File1
Archive Device = /nonexistent/path/to/file/archive/dir
LabelMedia = yes # Позволяет Bacula метить неразмеченные носители
Random Access = yes
AutomaticMount = yes # Автоматически монтировать устройство
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 5
}
Device {
Name = DevStorage
Media Type = File
Archive Device = /var/lib/bacula/storage
LabelMedia = yes
Random Access = yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 5
}
Messages {
Name = Standard
director = baranovv-server-dir = all
}
sudo rm -f /var/lib/bacula/bacula-dir.*
sudo rm -f /run/bacula/bacula-dir.*
ls -ld /var/lib/bacula /run/bacula
sudo touch /var/log/bacula/bacula.log
sudo chown bacula:bacula /var/log/bacula/bacula.log
sudo systemctl restart bacula-director
sudo systemctl status bacula-director
(теперь к заданию)
sudo systemctl status bacula-dir
sudo systemctl status bacula-sd
sudo systemctl status bacula-fd
(если все зеленое то ок)
sudo mkdir -p /nonexistent/path/to/file/archive/dir
sudo chown bacula:bacula /nonexistent/path/to/file/archive/dir
sudo bconsole
list clients
run
1
status dir
Робит
(проверка конфига бакула) sudo /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-dir.conf
3. Восстановите резервную копию
sudo bconsole
restore
(далее выбираем по jobld) обычно цифра и дату пишем
4. Создайте несколько файлов на клиенте. С помощью графической утилиты выполните дифференциальное копирование.
Клиент
cd ~
touch file1.txt file2.txt file3.txt
(сервак)
sudo apt install bacula-console-qt
sudo /usr/sbin/bat
/etc/bacula/bat.conf
Archive Device = /path/to/storage/dir
Фикс ошибки
Сервер
клиент и сервак
sudo systemctl restart bacula-director
sudo systemctl restart bacula-sd
sudo mkdir -p /var/lib/bacula/storage
sudo chown bacula:bacula /var/lib/bacula/storage
sudo chown -R bacula:bacula /var/lib/bacula/storage
sudo chmod -R 775 /var/lib/bacula/storage
sudo systemctl restart bacula-sd
короче нашел ошибку надо в /etc/bacula/bacula-dir.conf нас серваке заменить все Client = baranovv-server-fd на Client = baranovv-client-fd
итог:
5. Отредактируйте созданные файлы. Удалите один из них и создайте несколько новых. С помощью графической утилиты выполните инкрементальное копирование.
Клиент
sudo chown -R bacula:bacula /home/user/data
sudo mkdir -p /home/user/data
sudo chown -R $USER:$USER /home/user/data
# Редактируем файл (например, data.txt)
echo "New content" > /home/user/data/data.txt
# Удаляем файл
rm /home/user/data/old_file.txt
# Создаём новые файлы
touch /home/user/data/new_file1.txt
touch /home/user/data/new_file2.txt
далее запускаем инкрементацию через граф интерфейс
sudo bat
*status dir
6. Повторите пункты 4 и 5, но с использованием консольной утилиты.
Таким образом, будет выполнено 5 резервных копирований:
1. Полное
2. Дифференциальное
3. Инкрементальное
4. Дифференциальное
5. Инкрементальное
sudo bconsole
*run job=BackupClient1
*mod и там меняем
7.С помощью графической утилиты откройте вкладку bRestore и выбирая различные JobId перетягивайте папку для резервного копирования в нижнюю панель. Таким образов в ней будет расположено 5 строк:
Проанализируйте значение в поле JobId, включающее в себя номера необходимых копий для восстановления. Объясните полученные значения.
Каждое JobId связано с конкретным заданием резервного копирования в Bacula и может быть использовано для восстановления данных на основе того, что было включено в этот резерв. Ваша цель — восстановить файлы, которые были изменены или добавлены в разные моменты времени.
JobId для полного копирования охватывает все данные на момент резервного копирования.
JobId для дифференциального копирования включает только те изменения, которые произошли после последнего полного копирования.
JobId для инкрементального копирования включает только те изменения, которые произошли после предыдущего резервного копирования (будь то полное или дифференциальное).
Пример:
JobId 6 (Full) — это первое полное копирование.
JobId 9 (Differential) — это дифференциальное копирование, которое сохраняло изменения после последнего полного.
JobId 10 (Incremental) — это инкрементальное копирование, сохраняющее изменения после последнего резервного копирования (любого типа).
JobId 17 (Differential) — это второе дифференциальное копирование.
JobId 18 (Incremental) — это инкрементальное копирование, выполняющееся после второго дифференциального.
JobId в графическом интерфейсе bRestore и перетащите файлы на панель восстановления. Это позволит вам понять, какие файлы были восстановлены в зависимости от выполненных резервных копий и типа каждого задания.