Dentro de nuestra función como administradores de sistemas, existe una tarea que siempre nos resulta tediosa, pero que al mismo tiempo, es la mas importante para el resguardo de nuestra información, el respaldo de datos.
El respaldo de datos sin duda alguna es una función vital para poder recuperar nuestra información en caso de que surja algún problema, ya sea de hardware o de software; por lo cual, es importante contar con políticas y herramientas adecuadas para dicha actividad.
Hace algunos meses comencé a utilizar bacula, que como su pagina dice, "es un conjunto de programas Open Source, listos para la empresa, que te permiten manejar respaldos, recuperación, y verificación de datos de la computadora entre una red de computadoras de diferentes clases".
Básicamente, es una aplicación de respaldo basada en red. Su esquema de funcionamiento es ideal para mantener respaldo de diferentes equipos (clientes), con control centralizado en un servidor (director), y almacenamiento de datos en otro (storage).
Para este articulo asumiremos que se tiene una red con 3 equipos, el servidor de respaldo y almacenamiento con el nombre ometeotl, y 2 equipos cliente, meztli y nanahuatzin. El almacenamiento de datos se realizará sobre un directorio en el disco duro de ometeotl.
Instalación y configuración
El primer paso para utilizar bacula es instalarlo en el servidor central (director), para instalarlo en FreeBSD desde ports, solo hay ejecutar los siguientes comandos:
cd /usr/ports/sysutils/bacula-server
make install clean
echo "bacula_dir_enable=\"YES\"" >> /etc/rc.conf
echo "bacula_sd_enable=\"YES\"" >> /etc/rc.conf
Bacula almacena la lista de trabajos, archivos y volúmenes asociados, en una base de datos. Al momento de hacer la instalación desde ports hay que seleccionar que bases de datos se desean utilizar, en mi caso y para mantener las cosas lo mas simple y ligeras posibles, solo active sqlite3.
Las lineas que se agregan al rc.conf son para activar el director y el storage al iniciar el sistema.
El siguiente paso es configurar bacula, el archivo de configuración del director se encuentra en la ruta /usr/local/etc/bacula-dir.conf. Por defecto, al realizar la instalación desde ports, se crea un archivo /usr/local/etc/bacula-dir.conf.sample, el cual nos servirá como base para realizar la configuración inicial.
Las opciones de configuración del director y de bacula en general, son muchas y no ahondaremos en ellas, sin embargo, hay que destacar que se encuentran muy bien documentadas en la documentación.
Para poder seguir puntualmente lo descrito a continuación, se recomienda tener abierto el archivo de configuración mientras se realiza la lectura.
En la sección o recurso "Director" dentro del archivo de configuración, se define el nombre del director, que es con el que se identificara ante los clientes. Es muy importante tomar nota de este dato ya que es causa de muchas confusiones al configurar a los clientes.
El recurso "Job" define un "trabajo" de respaldo como tal, aquí se define bajo que cliente se realizará el respaldo, el conjunto de datos a respaldar (FileSet), y el "pool" donde se almacenaran los datos. Mas adelante se extenderá el concepto de "pool".
El recurso "FileSet" es donde se define la lista de archivos y directorios que se respaldaran, así como los que serán excluidos de respaldo, aquí también se definen algunas opciones de almacenamiento y verificación de datos, por ejemplo, para comprimir los archivos usando gzip o verificar los datos usando md5 o sha1.
Recurso "Schedule", este especifica el tipo, fecha y hora en que se realizara el trabajo de respaldo.
Aquí el tipo de respaldo es importante, se cuenta con respaldos completos e incrementales entre otros. Los respaldos incrementales solo agregan los datos que fueron modificados o agregados a partir del último proceso de respaldo asociado al cliente.
Por defecto en FreeBSD, cada semana se realiza un proceso de respaldo completo para cada cliente lo cual puede consumir mucho espacio, mi recomendación es reducir los respaldos completos a una vez al mes.
El recurso "Client" corresponde al cliente sobre el cual se realizará el respaldo, aquí se especifica la contraseña que se utilizara para conectarse y obtener los datos a respaldar. También se define la política de retención de datos y procesos/trabajos.
Dentro del recurso "Storage" se especifica el servidor de almacenamiento y la contraseña para conectarse al mismo. También se define el "dispositivo" donde se realizará el respaldo, este debe de corresponder al definido en la configuración del servidor "storage".
El recurso "Catalog" define el servicio de catalogo donde se almacenara la lista de trabajos realizados. Aquí se especifica el usuario y contraseña de la base de datos.
Por último, el recurso "Pool" define el conjunto de volúmenes asociados a un trabajo. Los volúmenes es donde se escribirán los datos. Aquí algo que nos ayudara mucho para automatizar la creación de volúmenes es definir un tamaño máximo de volumen, en nuestro caso de 7GB, y el formato de la etiqueta, por ejemplo, el nombre del servidor.
Es importante mencionar que se pueden tener múltiples "jobs", "filesets", "schedule" y "clients"; y asociarlos de la forma que mejor se adapte a nuestras necesidades, por ejemplo, la documentación de bacula recomienda que cuando se tienen múltiples clientes, estos utilicen un pool diferente para evitar escribir sobre el mismo volumen y llegar a tener inconsistencias con tareas concurrentes; volviendo a nuestra situación, se crearon 2 pools llamadas meztli y nanahuatzin, una para cada cliente.
Ya que tenemos configurado el director, a continuación hay que configurar el storage. Para configurarlo utilizaremos como base el archivo creado en el proceso de instalación, en este caso el nombre del archivo es bacula-sd.conf.sample, que tiene que ser copiado como bacula-sd.conf.
Dentro de este archivo, al igual que en el director, se definen varios recursos, en el recurso "Director" se especifica el nombre del director y la contraseña con que se debe de conectar.
El recurso importante del storage es "Device", donde se define el dispositivo o ruta donde se almacenaran los datos, en nuestro caso la directiva "Archive Device" quedó definida como "/mnt/raid/bacula"; que es el directorio donde se almacenaran los volúmenes con los datos.
Bacula puede hacer almacenar los datos respaldados en diferentes tipos de medios como son unidades de cinta o disco duro. El respaldo en disco puede ser sobre un directorio o directamente sobre la partición raw.
Ya que tenemos configurado el director y el storage, ejecutamos los demonios con los siguientes comandos:
/usr/local/share/bacula/make_sqlite3_tables
chown -R bacula:bacula /var/db/bacula
/usr/local/etc/rc.d/bacula-dir start
/usr/local/etc/rc.d/bacula-sd start
El siguiente paso para llevar a cabo nuestros respaldos, es configurar los clientes, lo primero que hay que hacer es instalar el port bacula-client, esto se logra con los siguientes comandos:
cd /usr/port/sysutils/bacula-client
make install clean
echo "bacula_fd_enable=\"YES\"" >> /etc/rc.conf
A menos que se este instalando en un equipo con entorno gráfico, no hace falta activar ninguna opción, si acaso el uso de openssl cuando así se requiera. La linea que se agrega al rc.conf activa el demonio al inicio del sistema.
La configuración del cliente es mucho mas sencilla comparada contra la del director, y se realiza en el archivo bacula-fd.conf, el cual podemos crear a partir del bacula-fd.conf.sample generado durante la instalación del port.
El recurso importante es "Director", donde se define el nombre y contraseña con que se autenticara el director.
Después de todo lo anterior ya debemos de tener funcionando nuestro director, storage y clientes, pero como sabemos que todo esta funcionando correctamente ?
Para saber el estado de nuestra estructura de respaldos utilizamos el comando bconsole, el cual se instala junto con el port bacula-client. Al igual que con los demás servicios de bacula, es necesario configurarlo, el archivo de configuración bconsole.conf lo podemos crear a partir del bconsole.conf.sample.
Aquí solo se define el recurso "Director", donde especificamos la dirección del servidor que ejecuta el director, y su contraseña.
Una vez configurado simplemente hay que ejecutar el comando y nos aparecerá un prompt en el cual podemos comenzar a interactuar con nuestra infraestructura de respaldos.
Para ver los comandos se puede teclear "help", con lo cual aparece la lista de comandos y parámetros, y la forma en que se pueden invocar.
Para saber el estatus de nuestra infraestructura, se puede ejecutar el comando "status all".
Una lista mas detallada de comandos y algunas formas de uso aparece en la documentación.
Restauración de archivos
El objetivo de mantener un respaldo es poder recuperar y restaurar los datos lo mas rápido posible. Esta tarea se vuelve trivial desde bacula, lo único que se requiere es tener correctamente configurados los demonios y tener a la mano el comando bconsole.
Se me olvidaba comentar, dentro de la lista de recursos del director, debe de haber un "job" que sea del tipo "Restore" que es el utilizado para hacer la restauración de archivos. El punto importante de este recurso es "Where", que es la ruta donde se almacenaran los archivos restaurados en el cliente seleccionado.
Supongamos que ya se esta respaldando el directorio /home del servidor meztli, y que por error lo borramos, la lista de pasos para restaurarlo es la siguiente:
- Ejecutar bconsole
- Dentro de bconsole ejecutar el comando "restore"
- Seleccionar de la lista el proceso del cual nos gustaría recuperar datos
- Navegar la estructura de directorios
- Seleccionar los archivos y directorios a respaldar, esto se hace escribiendo "mark" y después el nombre del archivo o directorio
- Terminar ejecutando el comando "done"
Esos son los pasos necesarios, a grandes rasgos, para restaurar datos, cuando esta por ejecutar el proceso, bacula nos solicita confirmación y nos da la opción de modificar la ruta (where) donde se restauraran los datos. Si le especificáramos "/" en lugar de "/bacula-restores" como viene por defecto, restauraría los archivos en el directorio en que se encontraban originalmente.
Conclusión
Bacula es una excelente herramienta para llevar el control de respaldos automatizados de una red agregando muy poca carga en los clientes y manteniendo centralizado el control. A mi parecer, es una de esas herramientas que todos los administradores de sistemas deben de tener marcadas como indispensables para su operación. La mayor complicación que noté, es la gran cantidad de opciones y la curva de aprendizaje que implica. Pero una vez comprendido, de verdad te puede salvar de muchos desastres, y ahorrarte tiempo en la restauración de tus sistemas.
Como comentario final, hay que hacer hincapié en que aunque bacula nos facilite la labor de respaldo, es muy importante contar con políticas de respaldo y retención de datos bien definidas para aprovechar al máximo nuestros recursos.
Referencias
Autor
Angel Gabriel León Rodríguez