Bacula es una solución de backup de red, de código abierto, que nos permite crear backups y reestablecer los datos salvaguardados en nuestros sistemas. Es flexible y robusto.
En este artículo:
—> Los componentes principales del servidor bacula son:
—> Para el cliente Bacula:
un cliente bacula ejecuta el componente File Daemon (FD), se trata del software que permite al servidor bacula acceder a los archivos que serán salvaguardados.
Instalamos bacula y los paquetes del servidor MariaDB en CentOS con yum:
sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server
Iniciamos mySQL:
sudo systemctl start mariadb
Ahora que MariaDB está instalado y en ejecución, crearemos el usuario de la base de datos Bacula y las tablas:
/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database -u root
/usr/libexec/bacula/make_mysql_tables -u bacula
ejecutamos un script de seguridad para eliminar algunos valores predeterminados peligrosos:
sudo mysql_secure_installation
nos pedirá la contraseña de root actual;si acabamos de instalar mySQL es probable que no tengamos una. Lo dejamos en blanco y pulsamos enter.
Después nos preguntará si queremos establecer una contraseña para root;
la establecemos y configuramos el resto de opciones:
Establecemos la contraseña para el usuario de la base de datos bacula:
mysql -u root -p
MariaDB [(none)]> UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
Habilitamos MariaDB para que arranque de forma automática en el inicio:
sudo systemctl enable mariadb
Configuramos bacula para usar la biblioteca mySQL (por defecto bacula está configurado para usar PostgreSQL).
ejecutamos:
sudo alternatives --config libbaccats.so
Veremos el siguiente mensaje (seleccionamos la primera opción, num 1)
Hay 3 programas que proporcionan 'libbaccats.so'.
Selección Comando
-----------------------------------------------
1 /usr/lib64/libbaccats-mysql.so
2 /usr/lib64/libbaccats-sqlite3.so
*+ 3 /usr/lib64/libbaccats-postgresql.so
Presione Intro para mantener la selección actual[+], o escriba el número de la selección: 1
Ya tenemos correctamente instalados los componentes del servidor bacula y del cliente bacula.
Ahora tenemos que crear los directorios de backup y restauración.
Bacula necesita un directorio para almacenar las copias de seguridad, y un directorio donde colocar los archivos restaurados.
Creamos entonces estos dos directorios:
sudo mkdir -p /bacula/backup /bacula/restore
Modificamos permisos para que solo el usuario bacula y un superusuario puedan acceder a dichos directorios
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula
Editamos el archivo de configuración de Bacula Director:
sudo vi /etc/bacula/bacula-dir.conf
Configuramos el recurso Director para escuchar sobre localhost, añadiendo la línea “DirAddress”:
DirAddress = 127.0.0.1
De forma que el archivo de configuración quede así:
Director { # define myself
Name = bacula-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "@@DIR_PASSWORD@@" # Console password
Messages = Daemon
DirAddress = 127.0.0.1
}
Un job se usa para definir trabajos de copia de seguridad y restauración de archivos. Ahora definimos los jobs que se usarán para realizar backups de los ficheros locales:
Buscamos el recurso “Job” con el nombre de “BackupClient1“, y cambiamos el valor a “BackupLocalFiles”
Job {
Name = "BackupLocalFiles"
JobDefs = "DefaultJob"
}
Ahora localizamos el recurso “Job” que se llama “RestoreFiles“, y modificamos los valores de “Name” y “Where“:
Job {
Name = "RestoreLocalFiles"
Type = Restore
Client=BackupServer-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula/restore
}
Así hemos configurado el job “RestoreLocalFiles” para restaurar ficheros en /bacula/restore, el directorio que creamos previamente.
“FileSet” define un conjunto de directorios que deseamos incluir o excluir de la copia de seguridad.
Encontramos esta opción con nombre “Full Set“.
Aquí podemos hacer varios cambios interesantes:
/usr/sbin
a
/
File = /bacula
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /
}
Exclude {
File = /var/lib/bacula
File = /proc
File = /tmp
File = /.journal
File = /.fsck
File = /bacula
}
}
Hemos de definir el daemon de almacenamiento al que Bacula Director se conectará.
Reemplazamos el valor de “Address“, localhost, por la IP del servidor de backups, o un nombre FQDN.
Storage {
Name = File
# Do not use "localhost" here
Address = localhost, IP, o nombre FQDN del servidor
SDPort = 9103
Password = "@@SD_PASSWORD@@"
Device = FileStorage
Media Type = File
}
Localizamos el recurso de Catálogo, llamado “MyCatalog” y actualizamos el valor de “dbpassword” con el valor de la password que tenga el usuario bacula de la base de datos.
# Generic catalog service
Catalog {
Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport =
dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password"
}
Un Pool define el conjunto de almacenamiento utilizado por bacula para escribir copias de seguridad. Podemos modificar el valor “label” para identificar correctamente nuestras backups.
Añadimos
Label Format = Local-
De forma que esta sección quede así:
# File Pool definition
Pool {
Name = File
Pool Type = Backup
Label Format = Local-
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
}
Hecha toda la configuración, vamos a revisar que no haya fallos.
sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
Si no hay errores no recibiremos ningún mensaje.
Si tenemos errores de configuración, veremos un mensaje de advertencia con los errores que debemos corregir:
[root@centos7 ~]# sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
bacula-dir: dird.c:1015-0 Could not open Catalog "MyCatalog", database "bacula".
bacula-dir: dird.c:1020-0 mysql.c:210 Unable to connect to MySQL server.
Database=bacula User=bacula
MySQL connect failed either server not running or your authorization is incorrec t.
13-abr 11:38 bacula-dir ERROR TERMINATION
Please correct configuration file: /etc/bacula/bacula-dir.conf
Casi hemos terminado de configurar nuestro servidor bacula, pero aún nos fañta configurar el daemon de almacenamiento, necesario para indicar a bacula dónde ha de guardar las copias de seguridad.
Abrimos y editamos el archivo de connfiguración del daemon de almacenamiento:
sudo vi /etc/bacula/bacula-sd.conf
Buscamos el recurso “Storage“. Aquí se define dónde escuchará el proceso SD (Storage Daemon / Demonio de almacenamiento) para establecer conexiones.
Añadimos el parámetro “SDAddress” , y lo asignamos a la IP de nuestro servidor de backups o nuestro nombre FQDN
Storage { # definition of myself
Name = BackupServer-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
SDAddress = localhost, IP, o nombre FQDN del servidor.
}
Lo siguiente es localizar el recurso llamado “FileStorage”, y actualizar el valor de “Archive Device” para que coincida con nuestro directorio de backups:
Device {
Name = FileStorage
Media Type = File
Archive Device = /bacula/backup
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}
sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
Todos los componentes de Bacula, como el Director, FD y SD, usan passwords para comunicarse.
Podemos configurar manualmente dichos passwords, pero también podemos generarlos de forma aleatoria (estos passwords no necesitamos conocerlos, y no tendremos que introducirlos en ningún otro caso).
bconsole conecta a Director, así que también hemos de establecer la password.
DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf
SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf
Director conecta a SD, así que también hemos de establecer la contraseña.
Director conecta a FD, así que también hemos de establecer la contraseña.
FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf
Ahora podemos iniciar Bacula Director, el Daemon de Almacenamiento (SD), y el daemon de archivos locales (FD):
sudo systemctl start bacula-dir
sudo systemctl start bacula-sd
sudo systemctl start bacula-fd
Si se inician correctamente, ya podemos habilitarlos para que inicien junto con el sistema:
sudo systemctl enable bacula-dir
sudo systemctl enable bacula-sd
sudo systemctl enable bacula-fd
Ahora ya podríamos comenzar a configurar backups de Bacula.