Quién no recuerda con cierta nostalgia el famoso Comandante Norton
, las utilidades de compresión en línea de comandos arj
o esas versiones de la herramienta Ghost
para hacer copias de nuestros discos duros y mantener nuestra información a buen recaudo en caso de catástrofe, que tantas veces nos salvaron el día.
Quizás, a día de hoy, estas utilidades no sean de uso común pero siempre encontramos una nueva herramienta, un nuevo cli o una nueva app que guarda parte de su esencia.
Antes de que me tildéis de abuelo cebolleta y de irme con las cabras al monte (y con razón) os explicaré que una de esas herramientas que han sido imprescindibles para mi día a día, se llama Bacula, un sistema centralizado de backup multiplataforma desarrollado por Kern Sibbald; y de la que os hablaré a continuación.
Los componentes de Bacula
Bacula está formado por cuatro componentes principales:
- Director Daemon
- Storage Daemon
- File Daemon
- Catalog
El Director Daemon se encarga de gestionar al resto de componentes y de planificar, ejecutar y almacenar las copias de seguridad según la agenda de copia que nosotros le hayamos configurado. El cliente de copia llamado File Daemon provee de los datos de la copia al Storage Daemon que guarda y deja un registro en el Catalog para su posterior uso, recuperación, reciclado, etc.
El componente Catalog puede ser un SGDB al uso, tal como: MySQL o PostgreSQL. Normalmente suelo recomendar esta última por su capacidad y facilidad de mantenimiento.
La configuración se realiza mediante ficheros donde se definen cada uno de los componentes, sus puertos de escucha, sus distintas opciones y los comportamientos, que nosotros queramos definir a la hora de configurar un sistema de copia: frecuencia, origen, destino, tipo de backup, compresión, cifrado, etc.
Aunque la curva de aprendizaje que requiere la configuración de un sistema de backup como Bacula es algo alta, comparada con la utilidad restic
de nuestro anterior post, su capacidad de personalización y su funcionamiento, verdaderamente rock solid, son sus puntos fuertes.
Bacula nos permite guardar datos de sistemas, tan distintos como: Solaris, IRIX, todos los sabores de Unix BSD y, por supuesto, Linux y Microsoft Windows. Para este último, la empresa Bacula Systems (la empresa detrás del proyecto Bacula) provee unos binarios para el File Daemon que nos permitirán copiar nuestras máquinas de trabajo sin ningún tipo de problema. El almacenamiento lo podemos realizar sobre unidades de cinta, discos duros o incluso, mediante plugins, sobre almacenamiento Amazon S3.
Con respecto a medias de seguridad irrenunciables, hoy en día, a la hora de implantar un sistema de backup, Bacula incluye soporte TLS para la comunicación entre sus componentes, así como los distintos File Daemon, o clientes de copia que configures dentro del sistema. El cifrado de los datos se puede configurar mediante algoritmos como AES128/192/256 y el hash de los datos se realiza mediante SHA1/SHA256.
Una de las características más interesantes añadidas a este proyecto es la deduplicación de los datos o, como se llama en Bacula, deduplicación en volúmenes alineados. Esta característica permite un ahorro considerable de espacio a la hora de almacenar grandes cantidades de información.
Por último, y quizás una parte de las más importantes del proyecto, es su extensa y detallada documentación, así como una comunidad activa y dummy-friendly (algo que se agradece enormemente si os tenéis que enfrentar al despliegue de un proyecto de backup con Bacula y es la primera vez que oís hablar del proyecto).
Bacula en funcionamiento
La interfaz por defecto para gestionar un sistema Bacula es el cli bconsole
con el que podremos operar el sistema desde la más básica funcionalidad hasta la más compleja de las restauraciones. Aunque existen otras interfaces de tipo web que funcionan y vienen incluidas en el proyecto, la utilidad bconsole
es la herramienta ideal por su simplicidad y su facilidad de uso.
# consultando el estado del Director Daemon *status Status available for: 1: Director 2: Storage 3: Client 4: Scheduled 5: Network 6: All Select daemon type for status (1-6): 1 betelgeuse.gtk.local-dir Version: 9.0.6 (20 November 2017) amd64-portbld-freebsd11.1 freebsd 11.1-RELEASE-p10 Daemon started 03-Jun-18 20:20, conf reloaded 03-Jun-2018 20:20:49 Jobs: run=627, running=0 mode=0,0 Heap: heap=0 smbytes=257,715 max_bytes=535,768 bufs=1,182 max_bufs=1,618 Res: njobs=38 nclients=13 nstores=4 npools=22 ncats=1 nfsets=29 nscheds=13 Scheduled Jobs: Level Type Pri Scheduled Job Name Volume =================================================================================== Incremental Backup 10 06-Aug-18 21:00 GTKfjfunes *unknown* Incremental Backup 10 06-Aug-18 21:00 GTK-dc-primavera *unknown* Full Backup 11 06-Aug-18 23:10 BackupCatalog Vol-0203 ==== Running Jobs: Console connected using TLS at 06-Aug-18 19:04 No Jobs running. ==== Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 10488 Incr 102 71.01 M OK 03-Aug-18 22:24 GTKfjfunes 10489 Full 1 3.394 G OK 05-Aug-18 23:12 BackupCatalog ====
# ejecución de un trabajo de copia incremental sobre el cliente gtk-scanserver-fd *run Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. The defined Job resources are: 1: GTKDC-servidor 2: GTKScanFolder Select Job resource (1-2): 2 Run Backup job JobName: GTKScanFolder Level: Full Client: gtk-scanserver-fd FileSet: GTKScanFolder Pool: Default (From Job resource) Storage: LocalChgr (From Job resource) When: 2018-08-06 19:25:01 Priority: 10 OK to run? (yes/mod/no): mod Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Client 6: When 7: Priority 8: Pool 9: Plugin Options Select parameter to modify (1-9): 1 Levels: 1: Full 2: Incremental 3: Differential 4: Since 5: VirtualFull Select level (1-5): 2 Run Backup job JobName: GTKScanFolder Level: Incremental Client: gtk-scanserver-fd FileSet: GTKScanFolder Pool: Default (From Job resource) Storage: LocalChgr (From Job resource) When: 2018-08-06 19:25:01 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=10498
# resultado de la ejecución del trabajo de copia incremental 06-Aug 19:25 betelgeuse.gtk.local-dir JobId 10498: Bacula betelgeuse.gtk.local-dir 9.0.6 (20Nov17): Build OS: amd64-portbld-freebsd11.1 freebsd 11.1-RELEASE-p10 JobId: 10498 Job: GTKScanFolder.2018-08-06_19.25.10_20 Backup Level: Incremental, since=2018-08-03 22:00:06 Client: "gtk-scanserver-fd" 7.4.0 (16Jan16) Microsoft (build 9200), 64-bit,Cross-compile,Win64 FileSet: "GTKScanFolder" 2016-06-15 19:40:54 Pool: "GTK-inc" (Fjrom Job IncPool override) Catalog: "MyCatalog" (From Client resource) Storage: "LocalChgr" (From Pool resource) Scheduled time: 06-Aug-2018 19:25:01 Start time: 06-Aug-2018 19:25:17 End time: 06-Aug-2018 19:25:54 Elapsed time: 37 secs Priority: 10 FD Files Written: 5 SD Files Written: 5 FD Bytes Written: 38,815 (38.81 KB) SD Bytes Written: 39,941 (39.94 KB) Rate: 1.0 KB/s Software Compression: 73.9% 3.8:1 Comm Line Compression: None Snapshot/VSS: yes Encryption: no Accurate: no Volume name(s): GTK-Incremental-2018-07-30 Volume Session Id: 585 Volume Session Time: 1528402423 Last Volume Bytes: 40,796 (40.79 KB) Non-fatal FD errors: 0 SD Errors: 0 FD termination status: OK SD termination status: OK Termination: Backup OK
bconsole
.
La longitud del post y la cierta complejidad de la herramienta en sí, me impide hacer una descripción completa del proceso de instalación, configuración y puesta en marcha de un sistema Bacula pero al final disponéis de enlaces que os llevará a otras presentaciones. Espero que os sean de ayuda a la hora de adentraros en su uso.
«He cruzado océanos de tiempo para encontrarte», es la frase que el Conde Drácula pronuncia en la escena de la película «Drácula, de Bram Stoker» que dirigió Francis Ford Coppola donde Gary Oldman, con una prominente perilla, rapta a Mina (Winona Ryder) con la intención de morderla en el cuello y hacerla inmortal.
Más información