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.
