Backups con Bacula (II)

Bueno, continuemos. La primera parte del artículo esta aquí.

Una vez hecha la copia de seguridad de todos los archivos de configuración, vamos a instalar el paquete necesario para que Bacula use MySQL para guardar su base de datos.

Primero, instalemos el servidor MySQL:

aptitude install mysql-server

Durante la instalación, nos pedirá la contraseña del usuario root de MySQL y algunas cosas más.

Luego, instalaremos el paquete necesario para que Bacula use MySQL:

aptitude install bacula-director-mysql

A mi, personalmente, me gusta usar phpmyadmin para gestionar las bases de datos de MySQL. Para instalarlo:

aptitude install phpmyadmin

Una vez esté todo instalado, ya podemos empezar a configurar Bacula.

Lo primero que hago es saber donde voy a almacenar mis copias de seguridad. En mi caso, lo haré en un disco de red al que accederé montando una carpeta en Debian que apunta a un recurso compartido por el disco de red.

Para montar esa unidad, primero creo el directorio con el siguiente comando:

mkdir /mnt/bacula

Una vez creado, monto en ese diectorio la carpeta del disco de red con el siguiente comando:

mount -t smbfs -o usuario@dominio,password=Password //192.168.1.240/bacula /mnt/bacula

Lo probamos, y si funciona, creamos un script que contenga el comando anterior y lo copiamos en la carpeta /etc/init.d. Luego, ejecutamos el siguiente comando para que el script se ejecute siempre al arranque de nuestro sistema:

update-rc.d montar_carpetas_bacula.sh defaults

Aclaración: montar_carpetas_bacula.sh es el nombre que le he dado al script que he creado. Luego le di permisos 744 y de ejecución, antes de copiarlo a la carpeta /etc/init.d

Ahora, vamos a empezar a tocar los archivos de configuración de Bacula. Vamos a empezar por los más sencillos, pero antes debemos modificar unos parámetros del archivo principal. Para ello:

nano /etc/bacula/bacula-dir.conf

Aquí modificamos el nombre del demonio Director y le ponemos una IP (En este caso el propio ordenador) y le establecemos una contraseña.

Continuemos editando los archivos más sencillos. Nos vamos a editar el bconsole.conf:

Le ponemos el nombre y la contraseña del Director. Guardamos y salimos (Si usamos nano sería un CTRL+O y CTRL+X, respectivamente)

Ahora vamos a por el bacula-sd.conf:

En el punto 1, configuramos el nombre y la IP del propio demonio. En el 2, le ponemos los datos del Director. En el 3, ponemos los datos para el Tray Monitor (Ya lo veremos más adelante). En punto 4 es un ejemplo de un dispositivo donde guardar las copias de seguridad. (En nuestro caso, es un archivo). Si queremos guardar las copias de cada equipo/servidor en carpetas diferentes, deberemos crear un dispositivo por cada equipo/servidor.configuración

Continuamos con el bacula-fd.conf. La configuración es muy parecida al archivo anterior:

En el punto 1, configuramos los datos del director. En el 2, los del Tray Monitor. En el 3, el nombre y la IP del propio demonio y en el 4, la configuración de los envíos de alertas por email. Este archivo es el que tendremos que modificar en cada cliente del que hagamos copias de seguridad. Ya lo iremos viendo…

El archivo que nos queda por configurar, el bacula-dir.conf, es el principal. En el vamos a poner cuando se hacen las copias, de que clientes, que tipo de copias, etc. Voy a poner una breve descripción de cada apartado que configuraremos dentro de este archivo y un ejemplo de cada uno:

Director

En el configuraremos (Aunque ya lo hicimos anteriormente) los datos del propio demonio (Su IP, nombre, puerto a usar, etc.) En mi caso, la configuración quedó así:

Director { # define myself

Name = vSRVDebian-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 = 3

Password = “*****************” # Console password

Messages = Daemon

DirAddress = 127.0.0.1

}

Catalogo

Aquí vamos a definir los datos del Catálogo, que es la base de datos que usa Bacula. Pondremos el nombre de la base de datos, así como su usuario y contraseña. (Estos datos los pusimos cuando instalamos el paquete bacula-director-mysql). En mi caso queda así:

# Generic catalog service

Catalog {

Name = Catalogo

dbname = “bacula”; dbuser = “bacula”; dbpassword = “************”

}

Clientes (File Services)

En este apartado tendremos que “dar de alta” a todos los clientes de los que realizaremos copia de seguridad:

# Client (File Services) to backup

Client {

Name = vSRVDebianWS1-fd

Address = 192.168.1.103

FDPort = 9102

Catalog = Catalogo

Password = “*******************” # password for FileDaemon

File Retention = 30 days # 30 days

Job Retention = 6 months # six months

AutoPrune = yes # Prune expired Jobs/Files

}

Client {

Name = vSRVApliWeb-fd

Address = 192.168.1.47

FDPort = 9102

Catalog = Catalogo

Password = “************” # password for FileDaemon

File Retention = 30 days # 30 days

Job Retention = 6 months # six months

AutoPrune = yes # Prune expired Jobs/Files

}

Client {

Name = vSRVDebian-fd

Address = 192.168.1.115

FDPort = 9102

Catalog = Catalogo

Password = “**************” # password for FileDaemon

File Retention = 30 days # 30 days

Job Retention = 6 months # six months

AutoPrune = yes # Prune expired Jobs/Files

}

JobDefs

En un Jobdef podemos tener las mismas directivas que un job (Tarea). Al crear un jobdef, no estamos creando una tarea, sino que estamos configurando una serie de directivas “por defecto” que podremos usar para configurar uno o varios jobs, ahorrándonos muchas líneas de configuración. Por ejemplo: Tenemos varios servidores Linux de los que deseamos hacer copias de seguridad completas. En vez de crear varios jobs con todas sus directivas en cada uno, creamos varios jobs a los que le decimos que se “alimenten” de las directivas del jobdef. Si repetimos una directiva en el job, que ya esté referenciada en el jobdef, Bacula usará la opción que hayamos puesto en el job.

JobDefs {

Name = “JD-vSRVDebianWS1”

Type = Backup

Level = Incremental

Client = vSRVDebianWS1-fd

FileSet = “LinuxCompleto”

Schedule = “CicloSemanal”

Storage = FS-vSRVDebianWS1

Messages = Standard

Pool = Pool-vSRVDebianWS1

Priority = 10

}

JobDefs {

Name = “JD-vSRVApliWeb”

Type = Backup

Level = Incremental

Client = vSRVApliWeb-fd

FileSet = “Alfresco”

Schedule = “CicloSemanal”

Storage = FS-vSRVApliWeb

Messages = Standard

Pool = Pool-vSRVApliWeb

Priority = 10

}

JobDefs {

Name = “JD-vSRVDebian”

Type = Backup

Level = Incremental

Client = vSRVDebian-fd

FileSet = “LinuxCompleto”

Schedule = “CicloSemanal”

Storage = FS-vSRVDebian

Messages = Standard

Pool = Pool-vSRVDebian

Priority = 10

}

Jobs

Los jobs son las “tareas” que deberá realizar Bacula. Pueden ser de backup, restauración, etc. Como dije antes, las tengo referenciadas a jobdefs.

# Define the main nightly save backup job

# By default, this job will back up to disk in /nonexistant/path/to/file/archive/dir

Job {

Name = “Backup-vSRVDebianWS1”

JobDefs = “JD-vSRVDebianWS1”

Write Bootstrap = “/mnt/bacula/vSRVDebianWS1/vSRVDebianWS1.bsr”

}

Job {

Name = “Backup-vSRVApliWeb”

JobDefs = “JD-vSRVApliWeb”

Write Bootstrap = “/mnt/bacula/vSRVApliWeb/vSRVApliWeb.bsr”

}

Job {

Name = “Backup-vSRVDebian”

JobDefs = “JD-vSRVDebian”

Write Bootstrap = “/mnt/bacula/vSRVDebian/vSRVDebian.bsr”

}

# Backup the catalog database (after the nightly save)

Job {

Name = “Backup-Catalog”

JobDefs = “JD-Catalogo”

# This creates an ASCII copy of the catalog

# WARNING!!! Passing the password via the command line is insecure.

# see comments in make_catalog_backup for details.

# Arguments to make_catalog_backup are:

# make_catalog_backup

RunBeforeJob = “/etc/bacula/scripts/make_catalog_backup bacula bacula ********* 127.0.0.1”

# This deletes the copy of the catalog

RunAfterJob = “/etc/bacula/scripts/delete_catalog_backup”

Write Bootstrap = “/var/lib/bacula/BackupCatalog.bsr”

Priority = 11 # run after main backup

}

#

# Standard Restore template, to be changed by Console program

# Only one such job is needed for all Jobs/Clients/Storage …

#

Job {

Name = “Restaurar-vSRVDebianWS1”

Type = Restore

Client=vSRVDebianWS1-fd

FileSet=”LinuxCompleto”

Storage = FS-vSRVDebianWS1

Pool = Pool-vSRVDebianWS1

Messages = Standard

Where = /mnt/bacula/restaurar/vSRVDebianWS1

}

Job {

Name = “Restaurar-vSRVApliWeb”

Type = Restore

Client=vSRVApliWeb-fd

FileSet=”Alfresco”

Storage = FS-vSRVApliWeb

Pool = Pool-vSRVApliWeb

Messages = Standard

Where = /mnt/bacula/restaurar/vSRVApliWeb

}

Job {

Name = “Restaurar-vSRVDebian”

Type = Restore

Client=vSRVDebian-fd

FileSet=”LinuxCompleto”

Storage = FS-vSRVDebian

Pool = Pool-vSRVDebian

Messages = Standard

Where = /mnt/bacula/restaurar/vSRVDebian

}

Job {

Name = “Restaurar-Catalogo”

Type = Restore

Client=vSRVDebian-fd

FileSet=”Catalogo”

Storage = FS-Catalogo

Pool = Pool-Catalogo

Messages = Standard

Where = /mnt/bacula/restaurar/catalogo

}

Schedules

Los “schedules” son las programaciones horarias con las que se realizaran los trabajos. Yo he optado por dejar la que trae Bacula, ya que me parece buena para los servidores de los que tengo que realizar copias de seguridad. Por defecto, hace copias completas el primer domingo de cada mes, diferenciales el resto de domingos del mes e incrementales todos los demás días.

Schedule {

Name = “CicloSemanal”

Run = Full 1st sun at 02:00

Run = Differential 2nd-5th sun at 02:00

Run = Incremental mon-sat at 02:00

}

# This schedule does the catalog. It starts after the WeeklyCycle

Schedule {

Name = “CicloSemanalDespuesBackup”

Run = Full sun-sat at 23:10

}

Filesets

Los filesets son las listas de archivos de los que queremos hacer copias de seguridad. Aquí incluyo listas de ejemplo de servidores Linux y de servidores Windows.

# List of files to be backed up

FileSet {

Name = “LinuxCompleto”

Include {

Options {

signature = MD5

}

File = /

}

Exclude {

File = /proc

File = /tmp

File = /.journal

File = /.fsck

}

}

FileSet {

Name = “Alfresco”

Enable VSS = yes

Include {

Options {

signature = MD5

}

File = “C:/Alfresco”

}

}

FileSet {

Name = “Catalogo”

Include {

Options {

signature = MD5

}

}

File = /var/lib/bacula/bacula.sql

}

}

Storages

Aqui damos de alta los dispositivos que pusimos en el archivo bacula-sd.conf.

# Definition of file storage device

Storage {

Name = FS-vSRVDebianWS1

Address = 192.168.1.115 # N.B. Use a fully qualified name here

SDPort = 9103

Password = “***************”

Device = FS-vSRVDebianWS1

Media Type = File

}

Storage {

Name = FS-vSRVApliWeb

Address = 192.168.1.115 # N.B. Use a fully qualified name here

SDPort = 9103

Password = “***************”

Device = FS-vSRVApliWeb

Media Type = File

}

Storage {

Name = FS-vSRVDebian

Address = 192.168.1.115 # N.B. Use a fully qualified name here

SDPort = 9103

Password = “***************”

Device = FS-vSRVDebian

Media Type = File

}

Storage {

Name = FS-Catalogo

Address = 192.168.1.115 # N.B. Use a fully qualified name here

SDPort = 9103

Password = “***************”

Device = FS-Catalogo

Media Type = File

}

Pools

Un Pool es un “almacén” de volúmenes. Un volumen es un dispositivo donde Bacula almacenará las copias de seguridad (Una cinta, un archivo, un DVD, etc.). Los volúmenes no los creamos aquí, lo haremos posteriormente desde la consola de Bacula.

# Default pool definition

Pool {

Name = Pool-vSRVDebianWS1

Pool Type = Backup

Recycle = yes # Bacula can automatically recycle Volumes

AutoPrune = yes # Prune expired volumes

Volume Retention = 365 days # one year

}

Pool {

Name = Pool-vSRVApliWeb

Pool Type = Backup

Recycle = yes # Bacula can automatically recycle Volumes

AutoPrune = yes # Prune expired volumes

Volume Retention = 365 days # one year

}

Pool {

Name = Pool-vSRVDebian

Pool Type = Backup

Recycle = yes # Bacula can automatically recycle Volumes

AutoPrune = yes # Prune expired volumes

Volume Retention = 365 days # one year

}

Pool {

Name = Pool-Catalogo

Pool Type = Backup

Recycle = yes # Bacula can automatically recycle Volumes

AutoPrune = yes # Prune expired volumes

Volume Retention = 365 days # one year

}

Emails

Esta es la última directiva que tendremos que configurar. Es la que nos permitirá enviar los emails a través de Bacula. Para ello, Bacula usa bsmtp. Con solo añadir nuestros servidor de correo electrónico e introducir las direcciones a las que queremos que lleguen los emails, estará todo listo.

# Reasonable message delivery — send most everything to email address

# and to the console

Messages {

Name = Standard

#

# NOTE! If you send to two email or more email addresses, you will need

# to replace the %r in the from field (-f part) with a single valid

# email address in both the mailcommand and the operatorcommand.

# What this does is, it sets the email address that emails would display

# in the FROM field, which is by default the same email as they’re being

# sent to. However, if you send email to more than one address, then

# you’ll have to set the FROM address manually, to a single address.

# for example, a ‘no-reply@mydomain.com’, is better since that tends to

# tell (most) people that its coming from an automated source.

#

mailcommand = “/usr/lib/bacula/bsmtp -h mail.tu-dominio.com -f \”\(Bacula\) \\” -s \”Bacula: %t %e of %c %l\” %r”

operatorcommand = “/usr/lib/bacula/bsmtp -h mail.tu-dominio.com -f \”\(Bacula\) \\” -s \”Bacula: Intervention needed for %j\” %r”

mail = alertas@tu-dominio.com = all, !skipped

operator = alertas@tu-dominio.com = mount

console = all, !skipped, !saved

#

# WARNING! the following will create a file that you must cycle from

# time to time as it will grow indefinitely. However, it will

# also keep all your messages if they scroll off the console.

#

append = “/var/lib/bacula/log” = all, !skipped

}

Una vez hecho esto, solo tendremos que reiniciar los demonios de Bacula e instalar los clientes en los equipos/Servidores que queramos. En los clientes, modificaremos en el archivo bacula-fd.conf y le pondremos los datos del demonio Director de Bacula.

Para probar todo, arrancamos la consola de bacula con el comando “bconsole”, creamos los volúmenes con el comando “label” y escribimos “run” desde dentro de esta consola. Nos saldrá una lista con todos nuestros trabajos y solo tendremos que elegir uno.

Si queremos comprobar el estado de los demonios de bacula, ejecutaremos el comando “status”.

Y, por último, para restaurar algo, o bien usamos las tareas de restauración que hemos creado, o bien ejecutamos el comando “restore”.

De este modo es como lo he configurado. Seguro que hay mejores modos de hacerlo, pero a mí de este me funciona bien. Una última cosa, tened siempre a mano una copia del catálogo de Bacula y los archivos bootstrap intentad ponerlos en un sitio que también tengáis a mano. Harán falta si queremos recuperarnos de un desastre.


14 comentarios en “Backups con Bacula (II)

  1. Buenas.
    Me ha parecido un tutorial brutalmente bueno, ya tengo funcionando mi bacula gracias a ti, pero tengo un problema, al principio dices que utilizas samba para montar el dispositivo de almacenamiento… yo estoy teniendo muchos problemas con eso, porque aunque monto correctamente el recurso, bacula no puede crear los archivos con los permisos apropiados de lectura y escritura para los backups… ¿me podrias indicar como tienes configurado samba para que esto sea posible?

    Muchisisisimas gracias!!

    • Antes que nada muchas gracias y perdón por tardar en contestar, pero no había visto el comentario. En Samba no he tocado nada, simplemente lo he instalado y he creado un script para que monte la carpeta compartida en un disco de red cada vez que se inicia el sistema operativo. Eso si, en el script, el usuario con el que me autentico ante Windows es un usuario con derechos de administrador…no se si esto te ayuda en algo o no. Para cualquier cosa que pueda ayudarte, aquí estoy.

    • Por lo que he leido en otros lugares bacula trabaja localmente con el usuario bacula, no obstante puedes probar mirando que usuario ejecuta los demonios de bacula para así asignarle los permisos.

  2. Hola!
    Excelente tutorial, explicado paso a paso. Tengo un problema, he hecho toda la configuración guiándome de todos los pasos, pero no consigo ingresar a la consola de bacula con el comando bconsole! Me sale que está conectando: Connecting to Director 127.0.0.1:9101, pero se queda ahí, en consola negra y luego regresa a la consola del debian, no sale el asterisco para poder ingresar los comandos.
    He probado cambiando la ip 127.0.0.1 por localhost y por la ip de mi servidor en el archivo bconsole.conf pero nada.

    Espero me puedas ayudar con este problema ya que me parece que bacula es una excelente solución al sistema de backups!

    Gracias!

  3. Si! en realidad solo fue un problema de instalación, me olvidé de ver la primera parte del post! lo siento jajaja, te felicito por el excelente tutorial, te comento que ya pronto tendré mi bacula en producción! Gracias!!!

  4. I leave a response when I like a article on a site or I have something to valuable to contribute to the conversation.
    Usually it’s caused by the fire communicated in the article I looked at. And after this post Backups con Bacula (II) | El blog de German Albalate. I was moved enough to drop a thought😉 I do have a couple of questions for you if it’s allright.

    Is it just me or do some of the responses appear like written by brain dead individuals?😛 And, if you are writing at additional online sites, I would like to keep up with you.

    Could you make a list all of all your community pages like your
    Facebook page, twitter feed, or linkedin profile?

  5. Hola chevere tu tutorial pero yo tengo una pregunta al momento de configurar el messages no me sale tus indicaciones quiero que el correo me llegue a gmail como configuraria eso

  6. Have you ever thought about including a little bit more than just your articles?
    I mean, what you say is valuable and everything. However think about if you added some great images or
    videos to give your posts more, “pop”! Your content is excellent but with images and clips, this website could undeniably be one of the greatest in its field.
    Very good blog!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s