Bacula: el miedo a los vampiros

25
6808

Hola a todos.

Quería hablaros un poco de bacula, ese programa al que todo el mundo le coge miedo porque se les viene grande y/o a primera vista parece complicado.


Realmente es un programa grande, pero una vez te explican (a grandes rasgos) su funcionamiento, todo va rodado.

Introducción

Bacula es un programa que gestiona backups (copias de respaldo en castellano). Su enorme potencial reside en lo bien que maneja y automatiza las tareas de respaldo, sobre todo en entornos grandes (véase el mantenimiento de varios servidores).

Cierto es que si simplemente quieres hacer backups de tu equipo personal, olvídate, te llevará demasiado tiempo configurarlo. Pero si te encuentras en la posición de tener que ocuparte de varios equipos/servidores, Bacula es tu solución. Al principio tendrás que echarle muchas horas, pero una vez que dejes todo configuradito, pueden pasar años sin que tengas que volver a tocarlo; además una vez que aprendes a usarlo, los cambios que realizarás serán pequeños y fáciles.

Arquitectura

Lo primero que hay que entender de este programa es su diversificación: está dividido en varias partes que se interrelacionan entre ellas. Estas partes pueden estar instaladas en diferentes máquinas o en la misma, dando la opción de guardar los backups en una máquina diferente a la que los gestiona (por ejemplo).

Existen 3 partes principales, cada cual además es un paquete de instalación diferente: el Director, el Storage y el File. Como podréis deducir, el File es la máquina cliente (la que necesita que se le hagan copias), el Storage es la máquina que guarda dichas copias y el Director es la máquina que orquesta todo el proceso. Por supuesto pueden existir varias máquinas cliente (File), varias Storage (por si se quiere separar las copias) y Director (aunque lo lógico sería una, se pueden especificar varias).

Archivos, herramientas y demonios

Si todo esto se automatiza es por el uso de los demonios. Cada parte tiene su propio demonio: bacula-director, bacula-fd (file-daemon) y bacula-sd (storage-daemon). Y cada demonio funciona según la configuración de su archivo, alojados en /etc/bacula: bacula-dir.conf, bacula-fd.conf, bacula-sd.conf.

Estos archivos de configuración son generados automáticamente durante la instalación, y solo hace falta modificar un par de parámetros (IP de la máquina remota, certificados propios, planificación de backups automáticos…). La configuración del director es la más difícil y extensa, ya que es el que se ocupa de todo; normalmente se divide en varios archivos para no romperse uno la cabeza, luego en el archivo principal se unen todos (parecido a los includes de Apache2).

Ahora bien, aunque los archivos de configuración es donde está toda la “chicha”, bacula nos ofrece varias herramientas para su manejo, puesto que muchas veces habrá que realizar tareas “a mano”. Solamente voy a centrarme en la herramienta de consola bconsole, ya que es la más útil y además el resto (las gráficas) se basan en ella. Como su propio nombre indica, es un intérprete de órdenes, que de forma interactiva permite realizar diversos trabajos.

Cabe decir que existen varios servicios web que uno puede instalar el la máquina Director para el manejo y la monitorización de Bacula. Por ejemplo, Bacula-Web te ofrece con gráficas y tablas información sobre el estado de los backups, la ocupación del Storage… etc.

También hay que mencionar que el funcionamiento de Bacula se basa en un catálogo: una base de datos (a elegir entre MySQL, SQLite y PostgreSQL) donde quedan registrados todos los eventos, volúmenes, clientes… No se debe tocar a mano esta base de datos, a través de bconsole se ofrecen varios comandos para interactuar con el catálogo sin necesidad de usar sintáxis SQL.

Seguridad

Uno de los puntos fuertes de Bacula es la seguridad. Cada Cliente, Storage y el Director tiene su propia clave, y según la conexión ésta es cifrada con dicha clave. Cada uno puede inventarse esta clave a su gusto, aunque el propio programa te genera una aleatoria de 30 caracteres.

Además del propio cifrado que ofrece el programa, Bacula acepta conexiones seguras mediante el uso de TLS. Por lo tanto a nuestor anterior cifrado hay que añadirle otro cifrado más de certificado y de clave SSL. Si ya nos ponemos más serios, se debe crear un certificado y clave únicos para cada máquina. Esta parte de la configuración es un poco más compleja.

Volúmenes

Voy a hacer un poco de incapié en cómo se gestionan las copias a través del catálogo, ya que puede resultar un poco lioso al principio.

Las copias se guardan empaquetadas en volúmenes cifrados, por lo que uno no puede acceder directamente a los archivos. Es una especie de .tar.gz (ya que admite compresión), pero propio; sin el catálogo es imposible rescatar los datos a pelo. Existen herramientas avanzadas para ello, pero siempre necesitan algún componente de la base de datos, y para el usuario principiante se vuelven muy complejas. Por eso se debe mimar y cuidar el catálogo (por defecto Bacula hace un propio backup del catálogo después de completar los trabajos que tenía planificados).

Para ayudarnos en la organización de múltiples backups, Bacula agrupa los Volúmenes en Pools. Por poner un ejemplo, se define un Pool por cliente, asi todas las copias (Volúmenes) de cada cliente pueden diferenciarse fácilmente puesto que pertenecen a diferentes familias (Pools).

Además Bacula admite reutilización/reciclado de los volúmenes. Por lo que si tú solamente quieres un Full Backup mensual, pero sólo quieres que exista uno, puedes configurar Bacula para que sobreescriba el Volumen que anteriormente contenía esa copia, así te evitas llenar el disco innecesariamente y te olvidas de tener que borrar tú los datos viejos a mano.

Nivel de copia y restauraciones

Uno puede definir diferentes trabajos con sus horarios respectivos. Es decir, si todos los días hacemos un Full Backup, nuestras tareas de mantenimiento no serían muy eficazes… pero Bacula nos permite hasta 3 niveles diferentes a la hora de realizar copias de seguridad: Full, Differential e Incremental.

El Full backup es la copia clásica, todo lo que se quiera respaldar es copiado. Mientras que el Differential sólo copia los arhivos que hayan cambiado (o los nuevos) desde el último Full. Con las copias Incremental pasa lo mismo pero un nivel por debajo, sólo compara los cambios desde el último Differential, o desde el último Full si éste es más reciente. Esto es muy cómodo si se quiere mantener un equilibrio entre optimización de recursos y utilidad de los mismos. Con esto podemos conseguir archivos de diferentes fechas sin necesidad de ocupar mucho espacio. Es muy útil cuando alguien mete la pata y necesita el backup específico de un día.

Un ejemplo: planificamos backups Incrementales a diario, Diferenciales cada semana y Full cada mes. Si en algún momento necesitamos usar dichas copias (porque alguna de nuestras máquinas cliente se ha estropeado), simplemente tenemos que realizar un trabajo de Restore (a través de bconsole) pudiendo especificar la copia mas reciente para determinada fecha, y Bacula solito te monta un árbol de directorios basándose en la concatenación del último Full con los cambios aportados por los Differential e Incremental.

Automatización

Aquí viene el punto fuerte de Bacula. Todas las tareas de respaldo se planifican en el Director, admitiendo además niveles de prioridad. Por lo tanto es normal planificar varias tareas para el mismo día y la misma hora. Una vez que el Director haya conectado con la máquina cliente (con su FileDaemon) éste le pone en contacto con el Storage asociado a dicha tarea, prepara la conexión cifrada y los archivos que deben ser copiados.

Además no solo permite especificar los archivos/carpetas que deben ser copiados, también admite ejecutar comandos/scripts antes, durante y después de cada trabajo. Por lo tanto si uno quiere hacer un backup de una base de datos, puedes especificar la ruta del script que te da el dump y posteriormente copiar ese dump. También te permite especificar los archivos a copiar de forma genérica, pudiendo añadir archivos más concretos desde la propia máquina cliente. Es normal tener un FileSet común para todos los sistema UNIX (donde se definen las carpetas a copiar, /etc, /usr, /home /var…), y luego cada cliente puede especificar archivos propios que quieran ser copiados.

Bacula también admite reutilización/reciclado de los volúmenes. Por lo que si tú solamente quieres un Full Backup mensual, pero sólo quieres que exista uno, puedes configurar Bacula para que sobreescriba el Volumen que anteriormente contenía esa copia, así te evitas llenar el disco innecesariamente y te olvidas de tener que borrar tú los datos viejos a mano. Un uso muy extendido es el de reutilizar los Pools asignados a copias Incrementales y Diferenciales, ya que simplemente sirven para almacenar los archivos modificados/nuevos, cada vez que haya un nuevo Full esos volúmenes quedan inservibles, asi que los reutilizas para los nuevos Incrementales/Diferenciales.

Y todo esto… ¿cómo funciona?

Después del ladrillazo que os acabo de soltar, muchos se preguntarán como carajos se maneja esto. Pues bien, TODO se especifica en los archivos de configuración antes mencionados, y todo queda automatizado en ellos. Después de tirarte varias horas configurándolos, una vez hecho eso te vale para toda la vida, se vuelve incluso aburrido.

Lo único que requiere hacerse a mano son las tareas de restauración, ya que no tendría mucho sentido automatizarlas… aunque se puede hacer. Aún así, el hacerlas a mano es bastante sencillo, con la herramienta bconsole se ofrecen varias opciones y solamente tienes que ir eligiendo los detalles. También es un uso extendido el de definir los Pools a mano, por lo tanto en los archivos de configuración sólo tienes que decir a qué Pool pertenecen los Volumenes, sin tener que crear una directiva para crearlos/buscarlos.

No he entrado en detalles técnicos ya que este post se está volviendo muy extenso, además quería dar una vista global del funcionamiento del programa. Si veo mucho feedback quizás me curre un tutorial.

Espero que os haya gustado y ¡hasta la próxima!

25 COMENTARIOS

  1. Unos links al sitio hombre, que no se diga. 😉

    http://www.bacula.org/es/
    http://www.bacula.org/en/?page=documentation

    Yo ultimamente estoy adicto al rsync para tareas domésticas, tengo mis repos y doc duplicadas en desktop y laptop y las sincronizo frecuentemente, así mi laptop siempre tiene un mirror del desktop.

    Para servidores supongo que un buen script con rsync ejecutado por cron hará el truco, pero la ventaja de bacula es que guarda por revisiones, no solo lo último.

  2. Muy bueno, yo soy usuario de bacula por algun tiempo en el datacenter en el cual trabjo pero aca doy usa soluciona tan potente igual a bacula y mucho mucho mas facil a la hora de implementar y configurar

    BackupPC
    http://backuppc.sourceforge.net/

    Actualmente hemos migrado casi todos los server de respaldo a esta plataforma

  3. Hace varios años estaba yo buscando alguna aplicación para hacer los backups de mis servidores en mi anterior trabajo … intenté con Bacula pero, uff, es un monstruo, excelente opción sin dudas pero, era demasiado para lo que yo necesitaba. Al final terminé programando mi propio sistemita (scripts bash) que hacían justo lo que yo quería 😀

  4. Muy buen articulo, e intentado instalarlo pero al verse tan laborioso prefiero hacer los respaldos con rsync y crontab, si puedes poner una artículo sobre la instalación y configuración, te lo agradecería eternamente.

    Gracias por la buena explicación.

  5. Hola, hace varias semanas estoy configurando Bacula en la compañía para la que trabajo, estoy aprendiendo mucho de esta herramienta me parece fantástica. Sin embargo, tengo una duda que no he podido resolver y espero que alguien pueda colaborarme. Puedo almacenar los volúmenes o pools en algún disco externo para respaldo offsite y luego restaurar desde estos archivos?.

    • Hola, claro que puedes almacenar los volumenes en un disco externo, pero para restaurarlos necesitas tenecer acceso a bconsole, ya que para restaurar un archivo hay que descifrar el volumen según el catálogo.
      Con el comando restore se te dan una serie de pasos para seleccionar el volumen etc… luego se contruirá el árbol de directorios para que tu puedas seleccionar manualmente los archivos. Además te deja elejir la máquina y el directorio donde restaurarlos (incluso te da la opción de restaurar en el origen, sobreescribiendo datos, aunque se desaconseja).
      Es pero que esto te sirva de ayuda http://www.bacula.org/en/dev-manual/main/main/Restore_Command.html

      • Gracias por la pronta respuesta. Intentaré explicarme con un ejemplo para aclarar un poco mas el panorama 😉 . Actualmente Bacula ya esta configurado realizando copias en disco, que sucede si tomo uno de los volúmenes y lo copio directamente a un disco externo que guardaré fuera del datacenter para restaurar en caso de algún evento. ¿Es posible recuperar los datos almacenados en este volumen si reconecto el disco externo e intento abrirlo con Bacula?.

        • La cosa es que el disco externo tendrías que “darlo de alta” como un Device en la configuración del storage daemon (archivo bacula-sd.conf) para que bacula pueda verlo. Una vez hecho esto no creo que tengas mayor problema… aún así yo haría pruebas por si acaso el catálogo no encuentra el volumen. Me explico, cuando mueves un volumen “físicamante” (es decir, mueves el archivo desde tu sistema operativo) el catalogo no sabe esto, asi que tienes que borrar también el volumen del catalogo. Luego seguramente debas agregarlo nuevamente al catálogo ya que su ruta de acceso ha cambiado, en bconsole escribe help para ver un resumen de los comandos que manejan el catálogo.
          Hay dos soluciones sencillas si no quieres meterte a toquetear el catálogo. La primera es que bacula escriba directamente en el disco externo, y cuando te canses de él agregas un nuevo Device en bacula-sd.conf y guardas el disco en otro sitio; así cuando necesites restaurar algo esos volumenes siguen reflejados y bien configurados en el catalogo. La otra opción es hacer un restore hacia el disco externo, lo que te guarda los archivos directamente en el disco, sin cifrado ni archivado ni compresión ni nada, por lo que siempre serán accesibles.

  6. Aprender Bacula es un poco engorroso en un principio, pero luego que conoces el funcionamiento todo va mejorando…
    Yo llevo 3 días estudiando este programa gestionandolo desde webmin, bconsola, etc…
    Quizás sería bueno un tuto mas extensivo… Por mi parte los problemas que me he encontrado (para entender el programa) los estoy documentando.
    Ejemplo:
    – El cliente de windows cuando lo instalas te otorga una password de acceso por defecto, que si la cambias antes de conectarte al servidor no te dará acceso… Osea se tiene que ocupar ese mismo password y luego de reconocer el dispositivo puedes cambiar la clave.

    BackupPC es bueno pero creo que de momento Bacula me parece as robusto para un entorno de producción con muchos servidores y estaciones de trabajo.

    Saludos

    • El instalar y configurar un cliente Windows es todo un reto, aunque en principio todo funciona perfectamente, cuando empiezas a meterte en configuraciones TLS con certificados autofirmados… la pesadilla comienza. Yo lo he conseguido, pero la primera vez me costó tiempo, enfados y sudor!

  7. hola buenas tardes.

    he me podrian ayudar por favor. he instalado bacula y corre en mis servidores y respalda sin problemas puedo restarurar. pero mi duda es hay alguna manera de guardar todo el sistema operativo ? como una imagen o un clon gracias desde antemano.

  8. Me gustó mucho el artículo, claro, sencillo, completo y agradable de leer. Mi pregunta es: ¿Cuál es la versión y sabor de Linux que más recomienda para Bácula? Saludos.

  9. Estimado muy bueno, el articulo con algunos tutoriales logre instalar bacula en Centos 6.6, instale cliente en un Windows 7, que tiene comunicación con el director, ademas instale Webmin, ya que a traves de esto gestiono todas las configuraciones de clientes y respaldo.
    Todo bien hasta hay pero al momento de hacer respaldo, no funciona no realiza nada, por favor solicito alguna luz que me ilumine en que estoy fallando, desde ya muchas gracias desde Chile.

  10. Buen día, hace un par de años que trabajo con bacula, no había tenido problemas, pero un dia, bacula ya no arranco, busque y no pude levantar el servicio, se me hizo facil copiar los ficheros y la carpeta /etc/bacula, pero he buscado con la web y me doy cuenta que mi error fue no copiar la carpeta donde se graba el bootstrap..
    Conocen alguna forma para solucionar este problema

    Saludos desde mexico
    Jesus

Dejar una respuesta