Introducción
Bacula es un software libre para la creación, ejecución y mantenimiento de salvas automáticas de archivos a través de la red en diversos medios de almacenamiento (disco duro, DVDs, memorias flash, cintas, etc.).
Instalación
Director
# Máquina donde va el servidor centralizado de bacula, # desde el cual se manejan los jobs. yum install bacula-console bacula-director-sqlite
Paquetes alternativos del director:
- bacula-director-sqlite
- bacula-director-mysql
- bacula-director-postgresql
Clientes
# Máquinas con el origen de los datos que se quieren salvar. yum install bacula-client
Almacenes
# Máquinas con el destino de los datos que se quieren salvar. yum install bacula-storage-sqlite
Paquetes alternativos del storage:
- bacula-storage-sqlite
- bacula-storage-mysql
- bacula-storage-postgresql
Configuración
El home de Bacula por defecto es /var/spool/bacula. Aquí se escriben los registros de operaciones, el catálogo de Bacula y los mensajes para el administrador.
El directorio base de la configuración es /etc/bacula/. Dentro, están los siguientes archivos:
- bacula-dir.conf: Director (servidor de bacula)
- bacula-fd.conf: File daemon (cliente, origen del backup)
- bacula-sd.conf: Storage daemon (almacenamiento, destino del backup)
- bconsole.conf: Consola de administración
- query.sql: Querys del catálogo
Definiendo los recursos
Debemos tener en cuenta, primero que todo, las siguientes relaciones de dependencia entre recursos:
Job --> Client -> Catalog |-> FileSet |-> Pool |-> Storage -> Device |-> Schedule
Es aconsejable ir de lo más simple a lo más complejo, para armar las relaciones a medida que definimos los recursos.
1. Recurso FileSet: Define el conjunto de archivos de la máquina cliente que se incluyen y se excluyen a la hora de salvarse. Cuando es una carpeta, por defecto se incluyen todos los archivos y carpetas contenidos recursivamente. Ejemplo:
FileSet { Name = "face-blocks" Include { Options { signature = MD5 } File = /var/lib/disklocal } Exclude { File = /var/lib/disklocal/lost+found } }
2. Recurso Device: Por lo general, sirven para definir el camino en el sistema de archivos de la partición en el que se monta el dispositivo en la máquina almacén. En este dispositivo serán guardados los volúmenes (la salva) de manera binaria. No tiene que definirse en el director, pero sí debe estarlo en el almacén.
Device { Name = FileStorage Media Type = File Archive Device = /var/lib/backup LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; }
3. Recurso Catalog: Da conectividad con la base de datos que contiene los metadatos de nuestras salvas.
Catalog { Name = "MyCatalog" # Uncomment the following line if you want the dbi driver #dbdriver = "dbi:sqlite3"; dbaddress = 127.0.0.1; dbport = dbname = "bacula"; dbuser = "bacula"; dbpassword = "" }
4. Recurso Pool: Permite utilizar uno o varios volúmenes (archivos o cintas) de almacenamiento, además de recilar y definir tamaño y cantidad de los volúmenes.
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-" # Volume names: vol-0001, vol-0002, etc. }
5. Recurso Schedule: Define los rangos de tiempo en los que se ejecutará una tarea.
# When to do the backups, full backup on first sunday of the month, # differential (i.e. incremental since full) every other sunday, # and incremental backups other days 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 }
6. Recurso Client: Define los datos de la(s) máquina(s) fuente de los archivos en un FileSet a salvar.
Client { Name = bacula-fd Address = workers-arg2 FDPort = 9102 Catalog = MyCatalog Password = "datys1" # password for FileDaemon File Retention = 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files }
7. Recurso Storage: Define los datos de la(s) máquina(s) destino de las salvas (donde están los dispositivos y se crean los volúmenes).
Storage { Name = face-storage Address = workers-arg2 # N.B. Use a fully qualified name here SDPort = 9103 Password = "datys1" Device = face-device Media Type = File }
8. Recurso Job: Define la tarea a realizar, teniendo en cuenta los recursos disponibles.
Job { Name = "backup-face-blocks" Type = Backup Level = Incremental # Do "Full" the first time, save changed after Client = bacula-fd FileSet = "face-blocks" Schedule = "DailyAt2315" Storage = face-storage Messages = Standard Pool = File Priority = 10 # Default, 1-99999... 1 (highest priority) Write Bootstrap = "/var/spool/bacula/%c.bsr" } Job { Name = "restore-face-blocks" Type = Restore Client = bacula-fd FileSet = "face-blocks" Storage = face-storage Pool = Default Messages = Standard Where = /tmp/face-restores # Restore files at this location }
Configuración del director (bacula-dir.conf)
- Generar un password aleatorio, para que dondequiera que aparezca password, actualizarlo.
- Si se desea mantener los recursos Client y los Storage por defecto, debe actualizarse Address al nombre de las máquinas clientes y almacenes, respectivamente.
- Se puede comentar los jobs de salvas del catálogo y los servicios de /usr/sbin.
- Para poder incluir otros archivos de configuración en el principal, creamos
el directorio /etc/bacula/conf.d y adicionamos la siguiente línea al final de
bacula-dir.conf:
@|"sh -c 'for f in /etc/bacula/conf.d/*.conf; do echo @${f} ; done'"
- Correr los scripts de creación de las bases de datos ubicados en /usr/libexec/bacula/
./create_bacula_database ./make_bacula_tables
- Definir nuestros archivos de configuración (terminados en .conf) en
/etc/bacula/conf.d/. Los recursos que debemos definir, en caso de no existir son:
- Job
- Schedule
- FileSet
- Client
- Catalog
- Storage
- Pool
Configuración del cliente (bacula-fd.conf)
- Usar el mismo password para el cliente definido en el director.
Configuración del almacén (bacula-sd.conf)
- Usar el mismo password para el storage definido en el director.
- Definir los dispositivos que se usarán para el almacén.
Device { Name = face-device Media Type = File Archive Device = /var/lib/face-backup LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; }
Administración usando bconsole
Cuando instalamos el paquete bacula-console, podemos acceder a la administración de bacula a través de la aplicación bconsole, la cual debe estar configurada con los datos del director:
# /etc/bacula/bconsole.conf Director { Name = bacula-dir DIRport = 9101 address = localhost Password = "datys1" }
Cuando ejecutamos esta consola podemos:
- Obtener ayuda de uso de la consola:
help
- Ver el estado del director, clientes y almacenes:
status all #status clients #status dir #status storage #status jobs
- Ejecutar jobs:
run
- Cancelar jobs:
cancel
- Restaurar archivos con jobs de restauración:
restore
- Recargar la configuración del director:
reload
- Nombrar un volumen a ser usado por el pool (necesario para iniciar un job si no
se especifica Label Format en el recurso Pool):
label
Referencias
- Kern Sibbald, Bacula Main Reference, Febrero 1, 2013.