Bacula es un servidor de backup del que
ya hablamos e hicimos alguna que otra cosa en este blog. Entre otras muchas facilidades permite conectarnos de forma transparente a una cabina de cintas y tener programadas una serie de tareas de backup que realiza automáticamente.
Como todo servicio de backup, si un día es necesario recuperar un archivo debe facilitarnos esa tarea, por lo tanto, vamos a ver cómo recuperar archivos que necesitemos de un equipo. Para ello haremos uso del comando bconsole, la consola de conexión y control de Bacula.
shell> bconsole
Connecting to Director backup.local.net:9101
1000 OK: backup-dir Version: 5.0.2 (28 April 2010)
Enter a period to cancel a command.
*
Este comando nos abrirá un pequeño promt con comandos específicos para el manejo de Bacula El objetivo de este post no es otro que enseñar a recuperar un archivo desde backup, así que emplearemos el comando restore. Si deseamos más información de lo que se puede o no hacer, tenemos el comando help.
Al seleccionar el modo de recuperación, nos aparecerán las siguiente opciones.
* restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Select full restore to a specified Job date
13: Cancel
Select item: (1-13): 5
Aquí tenemos que elegir una y en nuestro caso, como nos interesa recuperar un archivo de un equipo concreto, la mejor forma es seleccionando la opción 5, "Select the most recent backup for a client". A continuación se nos mostrará un listado de todos los equipos de los que hacemos backup, seleccionaremos el que deseemos.
Defined Clients:
1: backup-fd
2: bacula-fd
3: dhcp-fd
4: mail-fd
5: mirror-fd
6: zabbix-fd
Select the Client (1-6): 6
Tras la selección, Bacula hará un reescaneo de todos los datos que tiene de ese equipo. Puesto que el catálogo lo almacena en base de datos, no habrá que consultarlo en disco/cinta, por lo que será más rápido. Tras recuperar todo el catálogo se nos dará acceso a un promt especial, similar a la navegación en shell de GNU/Linux. De esta forma veremos los archivos de los que tenemos backup y podremos navegar por carpetas y ficheros. Los comandos más importantes y necesarios aquí son cd, ls, mark, markdir y done. En especial estos últimos 3, que se emplearán para marcar los archivos o carpetas que deseemos recuperar y done, que indicará que la selección ha finalizado y se procederá a la recuperación de los datos.
Automatically selected FileSet: zabbix-fs
+-------+-------+----------+----------+------------------+------------+
| JobId | Level | JobFiles | JobBytes | StartTime | VolumeName |
+-------+-------+----------+----------+------------------+------------+
| 6,644 | F | 2,219 | 940,846 | 2013-01-13 02:06 | 368BGLL4 |
| 6,671 | I | 12 | 786,796 | 2013-01-14 02:05 | 365BGLL4 |
| 6,698 | I | 13 | 253,813 | 2013-01-15 02:05 | 365BGLL4 |
| 6,725 | I | 12 | 287,815 | 2013-01-16 02:05 | 365BGLL4 |
+-------+-------+----------+----------+------------------+------------+
You have selected the following JobIds: 6644,6671,6698,6725
Building directory tree for JobId(s) 6644,6671,6698,6725... ++++++++++++
1,943 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
cwd is: /
$ ls
etc/
usr/
var/
$ cd etc
cwd is: /etc/
$ ls
aide/
bacula/
group
hostname
passwd
postfix/
puppet/
ssh/
zabbix/
$ cd zabbix/
cwd is: /etc/zabbix/
$ ls
zabbix_agent.conf
zabbix_agentd.conf
$ mark zabbix_agentd.conf
1 file marked.
$ done
Bootstrap records written to /var/lib/bacula/zabbix-dir.restore.1.bsr
The job will require the following
Volume(s) Storage(s) SD Device(s)
===========================================
*368BGLL4 ULT3580-HH4 ULT3580-HH4
Volumes marked with "*" are online.
1 file selected to be restored.
Run Restore job
JobName: RestoreFiles
Bootstrap: /var/lib/bacula/zabbix-dir.restore.1.bsr
Where: /tmp/bacula-restores
Replace: always
FileSet: Full Set
Backup Client: zabbix-fd
Restore Client: zabbix-fd
Storage: ULT3580-HH4
When: 2013-01-16 19:56:16
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): yes
Como se puede observar, al escribir done nos indica que se va a proceder a recuperar los ficheros seleccionados y creará un nuevo trabajo de restauración para tal efecto. Si no modificamos ninguna de las opciones, por defecto nos dejará los ficheros seleccionados en /tmp/bacula-restores del equipo remoto. Ya luego tendremos manualmente que moverlos a donde corresponda si procede.
En mi caso, puesto que empleo cintas de backup como medio de almacenamiento, esta tarea se puede demorar algo más, puesto que debe ir buscando los archivos solicitados entre los más recientes en las cintas que procedan. Si empleas disco como medio, será mucho más rápido.
Leer más