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

в 11:54, , рубрики: backup, bacula, linux, резервное копирование, системное администрирование, метки: , ,

Доброго времени суток всем тем, кто собирается делать Backup'ы постоянно.

В этом посте я попытаюсь облегчить жизнь тем, кто пробует познакомится с этой системой. Ничего сверхъестественного я не расскажу, просто добавлю то, что мне бы самому пригодилось. За основу взят отменно написанный пост, так что переписывать и копировать нет смысла.
И так, открываем статью, изучаем, понимаем что в голове каша и открываем схемы и вперед! Схемы получились большие, потому что в них указаны все параметры из выше указанной статьи. Вам останется вбить в схему свои данные, проследить по стрелкам зависимости (все что отмечено любым видом стрелочек надо проверить/заменить), ну и скопировать текст в свои конфиги. Одинаковые блоки копировать много раз не надо, если такой блок есть его просто оставляем (ну мало ли, вдруг кто не понял)!
Все в схемах и картинках, для простоты потребления информации. Надеюсь это облегчит вам жизнь!

Предыстория или как я перешел на сторону админов которые регулярно делают backup'ы

Июнь месяц, жена получила водительские права и закрыла сессию, и надо ехать забирать ее с ребенком из Пензенской губернии (живем в Москве). Я взял первый двух недельный отпуск за последние 5 лет жизни, скопировал все бухгалтерские базы на NAS, сделал резервный архив с почтой Zimbra и положил на второй NAS и с чистой душой поехал к жене.
День пятницы не предвещал ни каких событий, но в 5 вечера звонит коллега и говорит что почта не пашет. Тонкие нотки волнения пробежались по мне, потому что подключится к серверам было проблематично — я в глухом лесу в «секретном» военном городке! Я за 3G модем — а он глючит и отказывается подключатся. Я за телефон — только EDGE. И тут я замечаю, что ноут сообщил о WIFI сетях — самое смешное есть несколько без пароля. Ну кому еще придет в голову паролить WIFI в глухом лесу. Дальше веселее — первый же тест говорит что это 10мб/с до Пензы. Но счастье было не полным: подключившись к компьютеру я понимаю что админка VMWare жестко тупит, потом вообще выдала, что подключится не может ни к одной виртуалке на одном из серверов. Отправил сервер в перезагрузку из которой он так и не вышел. Прошу коллегу перегрузит сервер жестко и за одно подключить монитор. Через пару минут коллега перезванивает и говорит что сервер не может найти операционку и какие то 2 лампочки горят на передней панели. Да те самые лампочки которые намекнули, что меня ждет быстрое возвращение в Москву для воскрешение сервера.
Вечером перед выездом меня покусали пчелы опухла морда лица и затек глаз, по этому пришлось ехать пассажиром. Но новоиспеченный водитель отлично справилась с дорогой и уже через день я был на работе.
Страхи подтвердились — упали 2 HDD из 8 в Raid 50. Понятно что на том серваке я потерял все. Я полез на NAS где лежал архив с почты — но NAS оказался не в сети! Я полез под потолок (там хранятся NAS) и притащил его к себе, а он с заводскими настройками. Что произошло не знаю, но он сбросился и отформатировал HDD. Почтовик был утерян окончательно. Пока я ждал гарантийные HDD воскрешал все на втором сервер. Но с тех пор я решил, что системой резервирования надо заняться по полной программе. Меня спасло то что мои пользователи используют почтовые клиенты, из которых была воскрешена вся переписка. Но это долго муторно и не приятно. Теперь я отношусь к тем, кто уже делает backup'ы централизованно.
Как итог: raid теперь 51 и HDD про запас лежат. За полгода в 2х серверах я потерял еще 6 HDD. Причины так и не ясны. HP тоже не смогли сказать с чем это связано.

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

Схема для клиента Kubuntu в формате odg

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

Схема для клиента Windows в формате odg

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

Схема для сервера Bacula в формате odg

Пояснения к схемам

1. Я использовал как хранилище NAS D'Link DNS 323, подмонтирован он в папку /media/, каждый диск NAS в свою папку /media/nfs_linbackup_v1/ и /media/nfs_linbackup_v2/.
2. В отличии от статьи в схеме иные названия серверов и пунктов. Я так и не смог разобраться в названиях из статьи (в принципе по этой причине и появилась схема).
3. Выложены 3 схемы: для Linux, Windows и отдельно для сервера. Схема 3 (Schem_center) является схемой настройки резервного копирования самого сервера и основана на дефолтных настройках из шаблонов. Я это не реализовывал за ненадобностью лично мне. Но если решили это делать, то просто добавляете в уже созданные файлы недостающие блоки кода.

Секция Director /etc/bacula/bacula-dir.conf

1. Center.domain.local — сервер резервных копий он же 192.168.1.100;
2. Пароль Director «Center.domain.local» — «Passdir_1»;
3. Файл конфигурации для клиента kub-fd — @/etc/bacula/client-conf/client-dir-kubuntu.conf

Для клиента Kubuntu

Секция /etc/bacula/client-conf/client-dir-kubuntu.conf

1. kub-fd — клиент он же 192.168.1.20 (ОС Kubuntu 13.10);
2. Пароль клиента «PassClient_3»;
3. Имя хранилища — «Kubunt-nfs» (используется в задании для общего описания хранилища и указания на устройства хранения самих данных);
4. Имя «девайса» — «KubFileStorage» (используется как ссылка на конкретное физическое устройство хранения в файле /etc/bacula/bacula-sd.conf);
5. Имя File-set — «KubFileSet» (описывает то, что именно мы будем копировать или исключать из копирования);
6. Имя пула — «poolkubnfs» (описывает тип пула, какого размера должны быть базы бэкапов и сколько их хранить).
7. Имя планировщика (он же шедулер ) — «KubDiff» (устанавливает расписание и тип выполняемой операции т. е. полная по субботам, дифференциальная по всем остальным дням);

Секция /etc/bacula/bacula-sd.conf

1. Имя хранилища сервер — «center-sd»
2. Адрес сервера на котором запущен сервис STORAGE — SDAddress = 192.168.1.100
3. Ссылка на файл конфигурации клиента KubFileStorage @/etc/bacula/client-conf/client-sd-kubuntu.conf

Для клиента WinSrv cекция /etc/bacula/client-conf/client-dir-winsrv.conf

1. winsrv-fd — клиент он же 192.168.1.40 (ОС WinServ2003)

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

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

bacula-dir.conf

Director {
  Name = center.domain.local-dir
  # какой порт слушать, у нас default
  DIRport = 9101
  # путь к скрипту, где лежат sql запросы для работы 
  # с Bacula Catalog(mysql database)
  QueryFile = "/etc/bacula/scripts/query.sql"
  # здесь хранятся статус файлы демона
  WorkingDirectory = "/var/lib/bacula"
  # pid файл демона
  PidDirectory = "/var/run/bacula"
  # сколько заданий может запускаться одновременно
  Maximum Concurrent Jobs = 1
  # пароль для доступа в BC и управления демонами 
  Password = "Passdir_1"  
  # куда слать mail'ы, описано в ресурсе Messages
  Messages = Daemon
   # на какой адрес биндится процессу
  DirAddress = 192.168.1.100
}

Messages {
 # это имя прописано в ресурсе Director  
Name = Daemon
# команда для отправки email
mailcommand = "/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula daemon message" %r"
# шлем все на майл админам(root алиас на admins@domain.ru) 
# высылаются только алярмы, ероры и прочую важность
mail = milo@mydomena.ru = alert,error,fatal,terminate, !skipped    
# что выводить на консоль     
console = all, !skipped, !saved
# что в лог
append = "/var/log/bacula/bacula.log" = all, !skipped
}

Console {
  Name = center.domain.local-mon
  Password = "Passdir_1"
  CommandACL = status, .status
}

Messages {
  Name = Standard
  mailcommand = "/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: %t %e of %c %l" %r"
  operatorcommand = "/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: Intervention needed for %j" %r"
  mail = root = all, !skipped            
  operator = root = mount
  console = all, !skipped, !saved
  append = "/var/log/bacula/bacula.log" = all, !skipped
  catalog = all
}

Catalog {
  Name = MyCatalog
  dbname = "bacula"; DB Address = ""; dbuser = "bacula"; dbpassword = "SQL_pass"
}

# Что бы основные файл конфигов не разрастались, удобнее и лучше 
# делать на них ссылки - @ и далее путь к файлу,
#  где лежит конфиг для конкретного клиента
@/etc/bacula/client-conf/client-dir-kubuntu.conf
@/etc/bacula/client-conf/client-dir-winsrv.conf

bacula-sd.conf

/etc/bacula/bacula-sd.conf (на стороне сервера)             
Storage { 
  # имя для SD
  Name = center-sd 
  # порт стандартный
  SDPort = 9103 
  # рабочая директория процесса(для статус файлов)
  WorkingDirectory = "/var/lib/bacula" 
  # pid будет здесь
  Pid Directory = "/var/run/bacula" 
  # биндится на этом ip
  SDAddress = 192.168.1.100 
} 
Director {
  # имя DD, того самого, который был описан ранее
  Name = center.domain.local-dir
  # пароль  
  Password = "Passtor_2"
}
# Что бы основные файл конфигов не разрастались, удобнее и лучше 
# делать на них ссылки - @ и далее путь к файлу где лежит конфиг для
# конкретного клиента
@/etc/bacula/client-conf/client-sd-kubuntu.conf 
@/etc/bacula/client-conf/client-sd-winsrv.conf

bacula-fd.conf

Director {
  Name = center.domain.local-dir
  Password = "PassClient_01"
}

FileDaemon { 
  Name =  center.domain.local-fd
  FDport = 9102 
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = 192.168.1.100  # адрес или имя клиента
}

Messages {
  Name = Standard
  director = center.domain.local-dir = all, !skipped, !restored
}

bconsole.conf

Director {
  Name = center.domain.local-dir
  DIRport = 9101
  Address = 192.168.1.100
  Password = "Passdir_1"
}

client-dir-kubuntu.conf

Client {
  # имя 
  Name = kub-fd
  # ip адрес клиента
  Address = 192.168.1.20
  # порт, который клиент слушает
  FDPort = 9102
  # имя mysql базы данных Bacula
  Catalog = MyCatalog
  # пароль для FD
  Password = "PassClient_3"
  # период в течении которого информация о файлах задания
  # хранится в базе данных, по истечению периода эта
  #  информация удаляется(но не сами данные!!)
  File Retention = 30 days
  # тоже самое, только для самого задания
  Job Retention = 2 months
  # удалять записи из каталога(бд mysql) старше
  # вышеуказанных значений
  AutoPrune = yes
}

Storage {
  # имя хранилища и пароль
  Name = Kubunt-nfs
   Password = "Passtor_2"
  # fqdn имя сервера
  Address = 192.168.1.100
  # порт оставляем стандартный
  SDPort = 9103
  # имя девайса описанного в конфиге SD 
  Device = KubFileStorage
  # у нас все пишется на софтовый рэйд в файлы собственного
  # формата bacula(например
  # /media/nfs_linbackup_v1/kubuntu/Vol0001)
  Media Type = File
}

Schedule {
Name = "KubDiff"
Run = Level=Full on sat at 15:01
Run = Level=Differential on tue-fri at 15:02
} 

Pool {
  # имя пула, указывается в заданиях резервного копирования
  Name = poolkubnfs
  # тип пула, емнип  этой версии только такой поддерживается
  Pool Type = Backup
  # повторно использовать тома (сначала пишет в 1-ый,
  #потом в 2-ой, потом 3-й, 3-й закончился - снова в 1-й)   
   AutoPrune = yes 
  # удалять записи из bacula catalog (из mysql базы бакулы) 
  # старше нижеуказанных значений
   Recycle = yes                       
  # период в течении которого информация о томах(Voumes)
  # хранится в базе данных, по истечению периода эта 
  # информация удаляется
  Volume Retention = 5 days     
  Maximum Volume Bytes = 1G          
  Maximum Volumes = 3
  LabelFormat = "Kubvol"
}

FileSet {
  Name = "KubFileSet" 
  Include {
    Options {
      # разработчики яро рекомендуют юзать это опцию, 
      # создается сигнатура забекапленных файлов в md5
      signature = MD5 
    }
    # перечисляем то, что нужно бекапить
    File = /var/backups/opt/ 
    File = /etc/hosts 
    File = /etc/host.conf 
    File = /etc/network/interfaces 
    File = /etc/dnsmasq.conf 
    File = /etc/resolv.conf 
    File = /etc/ntp.conf 
    File = /home/rk/testbackup/
  }
  Exclude {
    # а это бекапить нет нужды
    File = /home/rk/testbackup/NTFS.dmg
 }
} 

Job {
  # имя задания 
  Name = "BackupKubFull"
  # тип(backup or restore)
  Type = Backup
  # уровень(полный, диференциальный или
  # инкрементный)
  Level = Full
  # имя SD ресурса                            
  Storage = Kubunt-nfs 
  # имя файл-сета(там рассказано что 
  # бекапить, а что не бекапить)
  FileSet="KubFileSet"
  # имя шедулера
  Schedule = "KubDiff"
  # имя пула(для разных клиентов разные пулы
  # томов(volume) куда пишутся сами  бекапы)
  Pool = poolkubnfs
  # имя клиента 
  Client=kub-fd
  # в этом файле содержится информация о том,
  # какие файлы должны будут востанавливаться, 
  #на каком вольюме находятся файлы, где конкретно
  # они находятся - это очень важные файлы, их
  # нужно бэкапить
  Write Bootstrap = "/var/lib/bacula/%n.bsr"
  # имя ресурса messages, который будет 
  # использоваться для этого задания
  Messages = Standard
  # скрипт запускающийся ДО выполнения задания 
  #(путь до скрипта  - это путь НА КЛИЕНТЕ!)
  ClientRunBeforeJob = "/root/sh/before_bg_db_backup.sh" 
  # скрипт запускающийся ПОСЛЕ выполнения задания            
  ClientRunAfterJob = "/root/sh/after_bg_db_backup.sh" 
  # УБРАТЬ ЕСЛИ НЕ ИСПОЛЬЗУЕТЕ СКРИПТЫ!!! 
}

Job {
# Имя задачи для восстановления данных
   Name = "RestoreKub"
   Type = Restore
   Client=kub-fd 
   FileSet="KubFileSet"
   Storage = winsrv-nfs
   Pool = poolkubnfs
   Messages = Standard
# Папка куда будут складывать восстановленные
# данные на клиенте. И что не затереть новую версию
# файлов, лучше их восстанавливать в отдельную папку
   Where = /home/rb/1/
}

client-dir-WinSrv.conf

Client {
  # имя 
  Name = winsrv-fd
  # ip адрес клиента
  Address = 192.168.1.40
  # порт, который клиент слушает
  FDPort = 9102
  # имя mysql базы данных Bacula
  Catalog = MyCatalog
  # пароль для FD
  Password = "PassClient_3"
  # период в течении которого информация о файлах задания
  # хранится в базе данных, по истечению периода эта
  #  информация удаляется(но не сами данные!!)
  File Retention = 30 days
  # тоже самое, только для самого задания
  Job Retention = 2 months
  # удалять записи из каталога(бд mysql) старше
  # вышеуказанных значений
  AutoPrune = yes
}

Storage {
  # имя хранилища и пароль 
  Name = winsrv-nfs
   Password = "Passtor_2"
  # fqdn имя сервера
  Address = center.domain.local
  # порт оставляем стандартный
  SDPort = 9103
  # имя девайса описанного в конфиге SD 
  Device = winsrvFileStorage
  # у нас все пишется на NFS NAS  в файлы собственного
  # формата bacula(например /backup/bgbilling/Vol0001)
  Media Type = File
}

Schedule {
Name = "WinDiff"
Run = Level=Full on sat at 00:02
Run = Level=Differential on tue-fri at 00:03
} 

Pool {
  # имя пула, указывается в заданиях резервного копирования
  Name = poolwinsrvnfs
  # тип пула, емнип  этой версии только такой поддерживается
  Pool Type = Backup
  # повторно использовать тома (сначала пишет в 1-ый,
  #потом в 2-ой, потом 3-й, 3-й закончился - снова в 1-й)   
  AutoPrune = yes 
  # удалять записи из bacula catalog (из mysql базы бакулы) 
  # старше нижеуказанных значений
   Recycle = yes                       
  # период в течении которого информация о томах(Voumes)
  # хранится в базе данных, по истечению периода эта 
  # информация удаляется
  Volume Retention = 5 days     
  Maximum Volume Bytes = 1G          
  Maximum Volumes = 3
  LabelFormat = "winvol"
}

FileSet {
  Name = "WinFileSet" 
#VSS при востановлении дает ошибку, посему отключил 
#Причина мне не ясна
  Enable VSS = no
  Include {
    Options {
      compression = GZIP
      signature = MD5
      portable=yes
      noatime = yes
      checkfilechanges = yes
      Ignore Case = yes
      wildfile = "*.avi"
      wildfile = "*.wmv"
      wildfile = "*.mp3"
      wilddir = "System Volume Information"
     exclude = yes
    }
    # перечисляем то, что нужно бекапить
    File = "C:/Buh"
    File = "C:/Supply"
    File = "C:/Doc"
  }
 Exclude {
     File = "C:/Doc/myphoto/"
  }
} 

Job {
  # имя задания 
  Name = "BackupWinFull"
  # тип(backup or restore)
  Type = Backup
  # уровень(полный, диференциальный или
  # инкрементный)
  Level = Full
  # имя SD ресурса                            
  Storage = winsrv-nfs 
  # имя файл-сета(там рассказано что 
  # бекапить, а что не бекапить)
  FileSet="WinFileSet"
  # имя шедулера
  Schedule = "WinDiff"
  # имя пула(для разных клиентов разные пулы
  # томов(volume) куда пишутся сами  бекапы)
  Pool = poolwinsrvnfs
  # имя клиента 
  Client=winsrv-fd
  # в этом файле содержится информация о том,
  # какие файлы должны будут востанавливаться, 
  #на каком вольюме находятся файлы, где конкретно
  # они находятся - это очень важные файлы, их
  # нужно бэкапить
  Write Bootstrap = "/var/lib/bacula/%n.bsr"
  # имя ресурса messages, который будет 
  # использоваться для этого задания
  Messages = Standard
}

Job {
# Имя задачи для восстановления данных
   Name = "ResotreWinsrv"
   Type = Restore
   Client=winsrv-fd 
   FileSet="WinFileSet"
   Storage = winsrv-nfs
   Pool = poolwinsrvnfs
   Messages = Standard
# Папка куда будут складывать восстановленные
# данные на клиенте. И что не затереть новую версию
# файлов, лучше их восстанавливать в отдельную папку
   Where = /1/
}

client-sd-kubuntu.conf

Device {
# имя, о соответствии имен и паролей будет сказано ниже
Name = KubFileStorage
# тип
Media Type = File
# директория где лежат файлы этого устройства(тома, volumes)
Archive Device = /media/nfs_linbackup_v1/kubuntu
# новые тома будут обзываться согласно настроек Pool'а(здесь Vol*) см.
# конфиг DD
LabelMedia = yes;
# для устройства типа File должно быть так
Random Access = Yes;
# если устройство открыто, использовать его
AutomaticMount = yes;
# думаю понятно =)
RemovableMedia = no;
# открывать только тогда, когда стартует соответствующие задание
AlwaysOpen = no;
}

client-sd-winsrv.conf

Device {
# имя, о соответствии имен и паролей будет сказано ниже
Name = winsrvFileStorage
# тип
Media Type = File
# директория где лежат файлы этого устройства(тома, volumes)
Archive Device = /media/nfs_linbackup_v2/winsrv
# новые тома будут обзываться согласно настроек Pool'а(здесь Vol*) см.
# конфиг DD
LabelMedia = yes;
# для устройства типа File должно быть так
Random Access = Yes;
# если устройство открыто, использовать его
AutomaticMount = yes;
# думаю понятно =)
RemovableMedia = no;
# открывать только тогда, когда стартует соответствующие задание
AlwaysOpen = no;
}

ClientPCKUBUNT_usr_local_etc_bacula-fd.conf

Director {
Name = center.domain.local-dir
Password = «PassClient_3»
}
FileDaemon {
Name = kub-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = 192.168.1.20 # адрес или имя клиента
}
Messages {
Name = Standard
director = center.domain.local-dir = all, !skipped, !restored
}

ClientPCWIN_backup_bacula_winsrv-fd.conf

# Client (File Services) to backup
Client {
Name = winsrv-fd
Address = 192.168.1.40
FDPort = 9102
Catalog = MyCatalog
Password = «PassClient_3»
File Retention = 30 days
Job Retention = 2 months
AutoPrune = yes
}

ClientPCWIN_ProgramFiles_Bacula_bacula-fd.conf

Director {
Name = center.domain.local-dir
Password = «PassClient_3»
}
FileDaemon {
Name = winsrv-fd
FDport = 9102
WorkingDirectory = «C:\Program Files\Bacula\working»
Pid Directory = «C:\Program Files\Bacula\working»
# Plugin Directory = «C:\Program Files\Bacula\plugins»
Maximum Concurrent Jobs = 10

Messages {
Name = Standard
director = center.domain.local-dir = all, !skipped, !restored
}

Как управлять этим локомотивам

Наш паровоз завелся и вроде помчался в наше счастливое будущее. Но нужно всегда за ним посматривать. Для этого умные люди придумали Bacula Administration Tool (BAT). Что бы им пользоваться вам его надо установить из репозитариев. Так как дистрибутивы у всех разные вдаваться в подробности не станем. Но вот настроить следует. Для этого открываем файл /etc/bacula/bat.conf на компьютере с которого будем управлять и вносим изменения:

Director {
  Name = center.domain.local-dir
  DIRport = 9101
  address = 192.168.1.100
  Password = "Passdir_1"
}

Если все правильно настроено запускаем Bacula Administration Tool и видим подобное окно:

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

Далее нам нужно посмотреть какие все таки задания мы сделали — вкладка JOBS. Особенно данная вкладка нам пригодится когда мы будем что либо восстанавливать.

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

Далее нам будет интересно глянуть что же техника уже успела натворить — вкладка Jobs Run

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

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

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

Обязательно забредем во вкладку Media, где нам наглядно покажут заполняемость наших файликов и их перезапись (Крайне удобная штука, которая позволяет определить все ли хорошо у нас с местом. А то я количество вольюмов перебрал и мой NAS быстро переполнился.)

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

А теперь самое важное — как восстанавливать. Уже известная нам вкладка JOBS_RUN и выбираем ту выполненную задачу, в которой есть нужный нам файл. Но бывает такое что мы не знаем, есть ли там нужный нам файл. Нажав правой кнопкой получаем меню, в котором нужно выбрать «List files on job».

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

Убедившись что там есть нужный нам файл, возвращаемся к «Jobs Run» и на нужном нам задании вызываем контекстное меню и выбираем «Restore from Job» — восстановить из задания или «Restore from Time» — восстановить по времени. В появившемся окне можно выбрать — по номеру задания, ну или вообще по заданию за одно проверив все настройки.

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

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

Нажимаем «ОК» и через несколько секунд нашему взору предстанет дерево файлов, сохраненные в этом задании, где нам галочками нужно отметить интересующие нас файлы.

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

После выбора файлов система предложит нам выбрать задание, которым мы будем восстанавливать. Интересная особенность — если у вас для данного конкретного клиента нету задачи на восстановление, то можно использовать любое задание на восстановление, лишь изменив параметры задачи перед ее применением (см. ниже). Жмем «ОК» и наслаждаемся выполнением задания.

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

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

Вот впринципе и все. Надеюсь статья найдет своего читателя. Все файлы использованные в статье лежат на моем диске.
Возможно слишком много картинок и текстов, возможно есть ошибки, возможно не хватает каких-то серьезных деталей, но я пытался облегчить использование программы для тех кто не хочет сильно углубляться (ну или для тех, у кого мало опыта, например для меня).
P.S. Главное что бы это работало, а все остальное не важно

Автор: leon_3

Источник

Поделиться

* - обязательные к заполнению поля