Llegó la hora de poner en producción mi servidor de backup implementado con Bacula en Debian. Es por ello que, luego de clonar e instalar la nueva máquina virtual en el cluster de producción, es necesario realizar una limpieza (reset) del catálogo (base de datos) del Director de Bacula y los archivos (backups) del Storage Deamon, para comenzar nuevamente con un inicio fresco.

Antes de comenzar, detener los servicios en el Director:

root@backup:~# service bacula-fd stop
Stopping Bacula File Daemon: bacula-fd
root@backup:~# service bacula-dir stop
Stopping Bacula Director: bacula-dir
root@backup:~# service bacula-sd stop
Stopping Bacula Storage Daemon: bacula-sd

Si se desea, crear un nuevo directorio para los archivos del Storage Deamon en una ubicación adecuada para un entorno de producción:

root@backup:~# cd /backups
root@backup:/backups# ls
root@backup:/backups# mkdir bacula
root@backup:/backups# ll
total 12
drwxr-sr-x  3 root staff 4096 dic  1 09:48 .
drwxr-sr-x 17 root staff 4096 oct 18 12:18 ..
drwxr-sr-x  2 root staff 4096 dic  1 09:48 bacula

Y luego modificar la configuración del Storage Deamon para que utilice este nuevo directorio:

root@backup:/backups# nano bacula-sd.conf

Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /backups/bacula/

Eliminar backups y archivos del Director y Storage Deamon

El primer paso en la tarea de "limpieza" del servidor de backup consiste en borrar todos los backups, restauraciones, logs, y archivos de trabajo del Director y Storage Deamon.

Primero borrar los archivos del Storage Deamon (backups):

root@backup:/backups# cd /usr/local/bacula/
root@backup:/usr/local/bacula# ll
total 32
drwxr-sr-x  8 root staff 4096 oct 27 10:37 .
drwxr-sr-x 17 root staff 4096 oct 18 12:18 ..
drwxr-sr-x  2 root staff 4096 oct 27 12:01 backup
drwxrwsr-x  2 root staff 4096 oct 25 11:12 etc
drwxr-sr-x  2 root staff 4096 oct 18 12:19 lib
drwxr-sr-x  3 root staff 4096 nov  4 11:37 restore
drwxr-sr-x  2 root staff 4096 oct 18 12:19 sbin
drwxr-sr-x  4 root staff 4096 oct 18 12:18 share
root@backup:/usr/local/bacula# ll backup/
total 27164
drwxr-sr-x 2 root staff     4096 oct 27 12:01 .
drwxr-sr-x 8 root staff     4096 oct 27 10:37 ..
-rw-r----- 1 root staff 27800757 nov 21 23:10 Local-0001
root@backup:/usr/local/bacula# rm -r backup
root@backup:/usr/local/bacula# ll
total 28
drwxr-sr-x  7 root staff 4096 dic  1 09:48 .
drwxr-sr-x 17 root staff 4096 oct 18 12:18 ..
drwxrwsr-x  2 root staff 4096 oct 25 11:12 etc
drwxr-sr-x  2 root staff 4096 oct 18 12:19 lib
drwxr-sr-x  3 root staff 4096 nov  4 11:37 restore
drwxr-sr-x  2 root staff 4096 oct 18 12:19 sbin
drwxr-sr-x  4 root staff 4096 oct 18 12:18 share

(Tengo la zonza costumbre de listar luego de borrar, como si no confiara en rm XD)

También borrar restauraciones (en caso de que existan):

root@backup:/usr/local/bacula# rm -r /usr/local/bacula/restore/*

Luego borrar el log y los archivos dentro del directorio de trabajo del Director y Storage Deamon:

root@backup:/usr/local/bacula# rm /opt/bacula/log/bacula.log 
root@backup:/usr/local/bacula# rm /opt/bacula/working/*

Actualizar la configuración de los servicios

Al migrar a producción, seguramente se haya cambiado el hostname del servidor. Editar los archivos de configuración del File Deamon, Storage Deamon y Director para reflejar este cambio. Revisar todas las variables "Name", "address", etc. en los archivos de configuración dentro del directorio de instalación (/usr/local/bacula/etc/):

nano bacula-fd.conf 
nano bacula-sd.conf 
nano bacula-dir.conf 
nano bconsole.conf

Además, en la configuración del Director (bacula-dir.conf), borrar todos los clientes y trabajos.

Reiniciar el catálogo de Bacula

Para resetear el catálogo de Director es necesario borrar la base de datos de Bacula.

root@backup:/usr/local/bacula# su - postgres
postgres@backup:~$ psql -h localhost -p 5432
psql (9.3.4)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding  |   Collate   |    Ctype    |   Access privileges   
-----------+----------+-----------+-------------+-------------+-----------------------
 bacula    | bacula   | SQL_ASCII | C           | C           | 
 postgres  | postgres | UTF8      | es_AR.UTF-8 | es_AR.UTF-8 | 
 template0 | postgres | UTF8      | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
(4 rows)

postgres=# drop database bacula;
DROP DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | es_AR.UTF-8 | es_AR.UTF-8 | 
 template0 | postgres | UTF8     | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

Luego volver a crear la base de datos, tal como se hizo durante la instalación del Director de Bacula:

postgres=# \q
postgres@backup:~$ cd /usr/local/bacula/etc/
postgres@backup:/usr/local/bacula/etc$ ./create_postgresql_database -U postgres -h localhost
CREATE DATABASE
ALTER DATABASE
Creation of bacula database succeeded.
Database encoding OK
postgres@backup:/usr/local/bacula/etc$ psql -h localhost -p 5432 -c '\l'
                                  List of databases
   Name    |  Owner   | Encoding  |   Collate   |    Ctype    |   Access privileges   
-----------+----------+-----------+-------------+-------------+-----------------------
 bacula    | postgres | SQL_ASCII | C           | C           | 
 postgres  | postgres | UTF8      | es_AR.UTF-8 | es_AR.UTF-8 | 
 template0 | postgres | UTF8      | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
(4 rows)

Crear nuevamente las tablas:

postgres@backup:/usr/local/bacula/etc$ ./make_postgresql_tables -U postgres -h localhost
CREATE TABLE
ALTER TABLE
CREATE INDEX
CREATE TABLE
ALTER TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
CREATE TABLE
CREATE INDEX
INSERT 0 1
Creation of Bacula PostgreSQL tables succeeded.
postgres@backup:/usr/local/bacula/etc$ psql -h localhost -p 5432 -d bacula -c '\dt'
             List of relations
 Schema |      Name      | Type  |  Owner   
--------+----------------+-------+----------
 public | basefiles      | table | postgres
 public | cdimages       | table | postgres
 public | client         | table | postgres
 public | counters       | table | postgres
 public | device         | table | postgres
 public | file           | table | postgres
 public | filename       | table | postgres
 public | fileset        | table | postgres
 public | job            | table | postgres
 public | jobhisto       | table | postgres
 public | jobmedia       | table | postgres
 public | location       | table | postgres
 public | locationlog    | table | postgres
 public | log            | table | postgres
 public | media          | table | postgres
 public | mediatype      | table | postgres
 public | path           | table | postgres
 public | pathhierarchy  | table | postgres
 public | pathvisibility | table | postgres
 public | pool           | table | postgres
 public | restoreobject  | table | postgres
 public | snapshot       | table | postgres
 public | status         | table | postgres
 public | storage        | table | postgres
 public | unsavedfiles   | table | postgres
 public | version        | table | postgres
(26 rows)

Y otorgar los permisos para el usuario "bacula":

postgres@backup:/usr/local/bacula/etc$ ./grant_postgresql_privileges -h localhost -p 5432
psql:<stdin>:2: ERROR:  role "bacula" already exists
ALTER DATABASE
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
Privileges for user bacula granted on database bacula.
postgres@backup:/usr/local/bacula/etc$ exit
logout
root@backup:/usr/local/bacula#

Notar que arroja un error al principio, al intentar crear el rol. Esto es correcto porque el usuario "bacula" ya existe, pero no es problema porque el script continúa normalmente.

Reiniciar los servicios y verificar el funcionamiento

En este punto ya es posible reiniciar los servicios:

root@backup:/usr/local/bacula# service bacula-sd start
root@backup:/usr/local/bacula# service bacula-dir start
root@backup:/usr/local/bacula# service bacula-fd start
root@backup:/usr/local/bacula/etc# netstat -tulpn | grep bacula
tcp        0      0 0.0.0.0:9101            0.0.0.0:*               LISTEN      4007/bacula-dir 
tcp        0      0 0.0.0.0:9102            0.0.0.0:*               LISTEN      4024/bacula-fd  
tcp        0      0 192.168.147.193:9103    0.0.0.0:*               LISTEN      3989/bacula-sd

De manera opcional, y por comodidad, es posible agregar el directorio /usr/local/bacula/sbin/ a la variable $PATH:

root@backup:/usr/local/bacula/etc# nano /etc/profile

Agregar la ruta a los binarios de Bacula:


PATH="${PATH}:/usr/local/bacula/sbin"
export PATH

De esta forma es posible ejecutar la consola sin especificar la ruta completa.

Luego, lanzar un trabajo para verificar que tanto el Director como el Storage Deamon funcionen correctamente:

root@backup:/usr/local/bacula/etc# source /etc/profile
root@backup:/usr/local/bacula/etc# cd
root@backup:~# bconsole
Connecting to Director backup:9101
1000 OK: 102 backup-dir Version: 7.4.4 (28 September 2016)
Enter a period to cancel a command.
*run
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
     1: BackupArchivosLocales
     2: BackupCatalog
     3: RestoreArchivosLocales
Select Job resource (1-3): 2
Run Backup job
JobName:  BackupCatalog
Level:    Full
Client:   backup-fd
FileSet:  Catalog
Pool:     File (From Job resource)
Storage:  File1 (From Job resource)
When:     2016-12-01 10:58:42
Priority: 11
OK to run? (yes/mod/no): yes
Job queued. JobId=1
*list jobs
+-------+---------------+---------------------+------+-------+----------+----------+-----------+
| jobid | name          | starttime           | type | level | jobfiles | jobbytes | jobstatus |
+-------+---------------+---------------------+------+-------+----------+----------+-----------+
|     1 | BackupCatalog | 2016-12-01 10:58:48 | B    | F     |        1 |   58,985 | T         |
+-------+---------------+---------------------+------+-------+----------+----------+-----------+
You have messages.
*quit
root@backup:~# ll /backups/bacula/
total 68
drwxr-sr-x 2 root staff  4096 dic  1 10:58 .
drwxr-sr-x 3 root staff  4096 dic  1 09:48 ..
-rw-r----- 1 root staff 59720 dic  1 10:58 Local-0001

¡Éxito!


Tal vez pueda interesarte


Compartí este artículo