Los ficheros de configuración de bacula
Continuamos con la serie. Esta vez hablamos como prometí de los diferentes ficheros de configuración de este estupendo vampiro.
Vamos a ir de los más fáciles a los más dificiles:
- /etc/console.conf
La consola de bacula es el medio por el cual nos vamos a comunicar con el sistema director. Su fichero de configuración es este:
gandalf:/etc/bacula# cat console.conf
#
# Bacula User Agent (or Console) Configuration File
#
Director {
Name = maquinadirectora-dir
DIRport = 9101
address = maquinadirectora.x.com
Password = "clave"
}
El nombre ha de ser el mismo que más tarde definiremos en el fichero de configuración del director. Lo siguiente es el puerto donde escucha el director. El FQDN o bien su dirección IP. Y finalmente la password que se necesita para
conectar al director.
/etc/bacula-fd.conf
El fichero de configuración de los clientes
gandalf:/etc/bacula# cat bacula-fd.conf
#
# List Directors who are permitted to contact this File daemon
#
Director {
Name = maquinadirectora-dir
Password = "clave"
}
#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = gandalf-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = maquinadirectora-dir = all, !skipped
}
Los comentarios del fichero aunque estén en ingles, son bastante aclaratorios, así que no voy a entrar en detalles. Basicamente, se autoriza al director a conectar con nosotros por el puerto 9102.Definimos el nombre de nuestro cliente, y se definen el tipo de mensajes que queremos hacer llegar al director.
/etc/bacula-sd.conf
El demonio encargado de escribir en los dispositivos de cinta tiene su propio fichero:
maquinadirectora:/etc/bacula# cat bacula-sd.conf
# You may need to change the name of your tape drive
# on the "Archive Device" directive in the Device
# resource. If you change the Name and/or the
# "Media Type" in the Device resource, please ensure
# that dird.conf has corresponding changes.
#
Storage { # definition of myself
Name = maquinadirectora-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
}
#
# List Directors who are permitted to contact Storage daemon
#
Director {
Name = maquinadirectora-dir
Password = "clave"
}
#
# Devices supported by this Storage daemon
# To connect, the Director's bacula-dir.conf must have the
# same Name and MediaType.
#
Device {
Name = DLT4-0
Media Type = DLT4
Archive Device = /dev/nst0
LabelMedia = Yes; # lets Bacula label unlabeled media
RandomAccess = yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = yes;
AlwaysOpen = no;
}
Device {
Name = DLT4-1 #
Media Type = DLT4
Archive Device = /dev/nst1
AutomaticMount = yes; # when device opened, read it
LabelMedia = Yes;
AlwaysOpen = no;
RemovableMedia = yes;
RandomAccess = yes;
}
#
# Send all messages to the Director,
# mount messages also are sent to the email address
#
Messages {
Name = Standard
director = maquinadirectora-dir = all
}
Esto se va complicando un poquillo ;-P. En este fichero se definen varios recursos:
- Storage
Definimos el nombre del demonio y el puerto de escucha
- Director
Al igual que en los otros, el nombre del director que se nos va a conectar, con su password.
- Devices
Definimos los dispositivos físicos de escritura. En este caso los de cinta. Sé que se pueden definir otro tipo de dispositivos, pero como es algo que no uso, no me he molestado en averiguar. Ya sabeis, RTFM. En este recurso vemos que le damos un nombre al dispositivo, indicamos el tipo de medio, y el nombre físico del cacharro tal y como se ve desde el sistema de ficheros. Lo demás son diferentes opciones, como que se monten automaticamente las cintas o que se permitan etiquetar. Hay un montón de ellas que conviene revisar en la documentación para escojer las que másnos convengan. En este ejemplo, yo defino 2 dispositivos, correspondientes a las dos bocas de mi unidad de cintas.
- Messages
El tipo de mensajes que queramos recibir.
/etc/bacula-dir
Ya comenté que este fichero es excesivamenta largo, por lo que no voy a poner el mio entero, iré comentando sus secciones por orden y le vais añadiendo lo que necesiteis.
#Definición del director
Director { # define myself
Name = maquinadirectora-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 1
Password = "clave" # Console p$ Messages = Standard
}
Definimos el nombre del director, su puerto de escucha y la clave. Además vemos una opción que permite fijar cuantos trabajos se realizarán simultaneamente. En la documentación se recomienda poner a 1. Vosotros vereis.
Job {
Name = cliente1-diaria
Client = cliente1-fd
Type = backup
Level = Incremental
FileSet = Diaria
Schedule = Diaria
Messages = Standard
Pool = Diaria
Storage = tape1
# JobDefs = "Diaria"
}
Comenzamos con lo realmente interesante. Esto de arriba es una definición completa de un trabajo.En donde definimos su nombre, el nombre del cliente, el tipo de trabajo, su nivel, los ficheros a los que se accede,el calendario, los mensajes que manda, el pool a utilizar y el dispositivo de escritura. La mayoría de estos campos los definiremos en este mismo fichero más adelante, no os preocupeis. Pero lo realmente lastimoso es que hay que escribir esta definición por cada tipo de trabajo y cliente. Os comenté que en versiones recientes se había simplificado mucho este problema al permitir definir un modelo de trabajo que luego se utilizaba en todas las definiciones. Si os daís cuenta, tengo ese campo comentado, porque tras escribir el fichero de configuración de esa manera, pude comprobar como la versión instalada en el servidor no permitía esas definiciones. Para los que dispongais de una versión más reciente
con que hagais esto os valdría:
#Backup diario
JobDefs {
Name = Diaria
Type = Backup
Level = Incremental
FileSet = Diaria
Schedule = Diaria
Messages = Standard
Pool = Diaria
Storage = tape0
}
Haceis una sola definición por cada tipo de trabajo y despues:
Job {
Client = dell1-fd
JobDefs = "Diaria"
}
Se simplifica ¿verdad? Cuando solo tienes un par de máquinas, no hay problema, pero cuando llegas a la treintena te puedes acordar de la madre del programador que no pensó en ello antes. Pasamos al siguiente recurso
FileSet {
Name = "Diaria"
Include = signature=MD5 {
/var
/etc
/root
/home
}
Exclude = { /proc /tmp /.journal /.fsck /var/run }
}
Fácil ¿no?. Le decimos que directorios o ficheros queremos que nos respalde, incluyendo una suma md5 y cuales queremos excluir. Y por supuesto le damos un nombre que lo identifique en los trabajos
Schedule {
Name = "Diaria"
Run = Incremental mon-sat at 20:00
}
Los calendarios de los trabajos y su tipo, aunque no es necesario indicarlo porque ya lo tengo definido en los trabajos. Se pueden hacer un montón de diabluras con las fechas y las horas, que ejecute un trabajo el tercer jueves de cada mes, el último domingo de Mayo, etc. En el ejemplo realiza un trabajo de lunes a sábado a las 20:00 horas
Client {
name = cliente1-fd
Address = cliente1.x.com
FDPort = 9102
Catalog = MyCatalog
Password = "clave"
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Pasamos a la definición de los clientes, se necesita una de estas por cada uno de ellos. Le ponemos un nombre, que será obligatoriamente el que ya pusimos en el demonio que se ejecuta en la máquina a respaldar, su dirección en la red,
el puerto donde escucha, el catálogo (la base de datos), su clave, el tiempo que retendrá los ficheros salvados, el tiempo que quedará registrado el trabajo en la base de datos, y si queremos que se borren automaticamente los registros de la base de datos pasado el tiempo definido.
Storage {
Name = tape0
Address = maquinadirectora # N.B. Use a fully qualified name here
SDPort = 9103
Password = "clave"
Device = DLT4-0
Media Type = DLT4
}
En esta parte nombramos los recursos para conectar con el demonio de almacenamiento. Le damos un nombre, su dirección en la red, el puerto de escucha y su clave de acceso. Además le indicamos el dispositivo y tipo de medio.
Catalog {
Name = MyCatalog
User = bacula
dbname = bacula
password = "clave"
}
El recurso relacionado con la base de datos que creamos previamente a la instalación de bacula. El nombre, el usuario permitido en la base, la base misma y el password.
Messages {
Name = Standard
mailcommand = "/usr/lib/bacula/smtp -h localhost -f \"\(Bacula\) %r\" -s
\"Ba$ operatorcommand = "/usr/lib/bacula/smtp -h localhost -f \"\(Bacula\)
%r\" -s $ mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}
Todos los mensajes que genera el director y a donde mandarlos, se configuran aquí. Tal y como está puesto, genera bastante ruido (un mensaje por trabajo), pero a mi particularmente me gusta enterarme de todo.
Pool {
Name = Diaria
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 100 days
Accept Any Volume = yes # write on any volume in the pool
}
Definiciones de los pools. En mi caso tengo, un pool para las copias diarias, otro para las semanales y otro para las mensuales, cada uno con sus cintas diferentes.
Y esto es todo de momento, seguiremos proximamente con el manejo de bacula desde la consola.