Bacula + MySql en Debian Sarge


Con la finalidad de instalar un sistema de respaldos que haga uso
apropiado de una unidad de Tape Backup [1] fue
necesario probar varios programas para determinar cual se ajusta mejor
a las necesidades concretas.

Tras leer documentación, buscar en Internet y preguntar el
programa seleccionado fue bacula, sin embargo antes de poder
utilizarlo en Sarge fue necesario resolver algunos problemas. A
continuación se describen los principales, así
como las soluciones encontradas a los mismos.

Estos han sido los pasos seguidos por alguien que nunca
antes había utilizado una unidad de Tape Backup, por lo que
los problemas comenzaron con saber cual era el funcionamiento normal de
ésta, ¿dónde está el
dispositivo?, ¿Se monta y puede verse como un disco
compacto?, entre otras.

Indice

1.-
Preguntas iniciales y sus respuestas
(1)
2.-
El primer problema, el Tape se quedaba pegado después de
almacenar un
par de archivos pequeños.
(2)
3.-
¿El Tape Backup funciona apropiadamente, ahora cual programa
utilizo?
(3)
3.1-
Componentes de la solución seleccionada (bacula)
(4)
3.2-
Instalando los componentes
(5)
3.2.1.- El problema(6)
3.2.2.-
La solución
(7)

3.3-
Configurando bacula
(8)
3.3.1.- Entendiendo
el archivo de configuración del director
(9) 
3.3.2.-
Entendiendo el archivo de configuración del proceso
encargado de almacenar
(10) 
3.3.3.-
Entendiendo el archivo de configuración del cliente.
(11)

3.4.-
Primeros pasos en bacula
(12)
3.4.1.- Ejecutando
una tarea de respaldo sin esperar que se cumpla la hora establecida.
(Para probar que todo esté bien)
(13)
3.4.2.-
Limpiando la cinta para comenzar de nuevo
(14)
3.4.3.- Respaldando
una base de datos de MySql
(15)

3.5.- Más
información de bacula
(16)

1.- Preguntas iniciales y sus respuestas

La primer duda, ¿dónde
está el Tape?.
Luego de leer un poco se encontró que es posible acceder el
Tape en /dev/st0 y también en /dev/nst0. Es el mismo
dispositivo con la diferencia que el primero rebobina el tape
después de cada uso y en el caso del segundo no.

Otra pregunta, ¿Se
puede montar el dispositivo para ver lo que tiene?.
Lo que se entiende hasta este momento es que no. Es posible utilizar
herramientas como el tar, cpio, y otras para agregarle archivos al tape
y luego con esas mismas herramientas se puede ver lo que tiene. Un
ejemplo para tratar de explicarlo mejor:

mi_tarrito#
tar -cvf /dev/st0 /backup/*

Ese comando crearía un archivo en la cinta que
podría ser examinado posteriormente con

mi_tarrito#
tar -tvf /dev/st0

Tercer pregunta, ¿Los
archivos están siendo reescritos cada vez que
se utiliza el comando tar?.
Si se utiliza el dispositivo /dev/st0 si. Se debe usar el dispositivo
/dev/nst0 para que no se reescriban los archivos agregados
anteriormente.

Cuarta, Cuando se utiliza el dispositivo /dev/nst0,
¿Cómo
acceder los archivos  incluidos en la ocasión
anterior?.
Un ejemplo para ser más concreto

mi_tarrito# tar
-cvf /dev/nst0 /Archivos_para_backup/*

mi_tarrito# tar
-cvf /dev/nst0 /Otros_Archivos_para_backup/*

Si se realiza un listado de archivos en este punto solo se
mostrarán los que corresponden a la carpeta
Otros_Archivos_para_backup. Para moverse por la cinta se debe utilizar
este comando

mi_tarrito# mt
-f /dev/nst0 bsf 1  para retroceder y
mi_tarrito# mt
-f /dev/nst0 fsf 1 para avanzar.

Hay que agregar varios archivos a la cinta en varias ocasiones y
moverse atrás y adelante para entender de que se trata.

Quinto, ¿Cómo
saber si el tape está listo para ser utilizado?.

El comando es el siguiente

mi_tarrito# mt
-f /dev/nst0 status

2.- El primer problema, el Tape se
quedaba pegado
después de almacenar un par de archivos pequeños.

Al realizar la copia de archivos pequeños el Tape dejaba de
responder y aparecía un mensaje de error de entrada y
salida. Este es el mensaje que aparecía con el dmesg [2] .
Luego de múltiples pruebas, preguntas y búsqueda
en Internet
finalmente la solución a este obstáculo fue
recompilar el kernel.
Se estaba utilizando la versión 2.4.27 y
luego de descubrir que el 2.6.8 da problemas con el Magaraid2 que
controla el arreglo de discos scsi del Dell Power Edge 2800,
se compiló el kernel 2.6.10 el cual
resolvió el problema del Tape y además
dejó funcionando el arreglo de discos apropiadamente..

Nota:
 Para que el arreglo de discos Scsi funcione al
recompilar el Kernel (y evitar un Kernel Panic) es necesario:

A.
Descomprimir el paquete que contiene las fuentes del Kernel
B. cd
/usr/src/kernel-source-2.6.10/
C. make
menuconfig
D. Device
Drivers
E. SCSI
device Support
F. SCSI
low-level drivers
G.
 [*] LSI Logic New Generation RAID Device Drivers
     <M>  
LSI Logic Management Module (New Driver)
   
 <M>     LSI
Logic MegaRAID Driver (New Driver)

3.- ¿El Tape
Backup funciona apropiadamente, ahora cual programa utilizo?

Luego de analizar la idea de crear scripts propios que
realizaran los backups y de ver la documentación de varios
programas de respaldo se encontró que el que más
se ajusta a las necesidades concretas en este momento es bacula.

3.1.-
Componentes de la solución seleccionada (bacula)

Bacula está compuesto por tres programas que en
términos generales son:

bacula-director
(Encargado de dirijir el proceso de backup)
bacula-sd
(Encargado de manejar el proceso de almacenamiento)
bacula-fd
(Cliente, encargado de transmitir al director los archivos a
respaldar)

Nota: Los
clientes pueden ser computadoras corriendo Linux o incluso
otro sistema operativo.

3.2.-
Instalando los componentes

Bacula puede ser instalado utilizando diversos manejadores de base de
datos, en este caso se realizó la instalación
utilizando mysql

apt-get install bacula-director-mysql
apt-get install  bacula-sd
apt-get install bacula-fd

3.2.1.-
El problema:

La instalación del primer programa (bacula-director-mysql)
tiene un error en el script de post instalación y finaliza
con un 1045 Access Denied for user root@’localhost’
using password YES

3.2.2.-
La solución:

Luego de buscar y buscar en Internet se encontró un
documento
de Iván Bao Fernández quién
había resuelto este problema. A
continuación se transcriben algunas de las líneas
del documento de Iván (Las utilizadas) y se agregan algunos
comentarios:

1. Parece
que el script de instalación no consigue acceder a MySQL
para crear algunas de las tablas necesarias. Para simplificar las
cosas, se anulan las restricciones de acceso a MySQL
añadiendo la siguiente línea en el archivo
/etc/mysql/my.cnf:
skip-grant-tables

Nota1: Está
línea debe ser agregada después de la
línea skip-external-locking, pues fue agreguada en otro
lugar y no se obtuvieron los efectos deseados.

Nota2: Esta
modificación implica dejar totalmente al descubierto MySQL.
Cualquiera podrá entrar con privilegios de
administración y hacer lo que le salga en gana. Es MUY IMPORTANTE
deshacer este cambio cuando se indique un poco más abajo.

2. Reiniciar demonio
/etc/init.d/mysql para que los cambios del paso anterior surtan efecto.

3. Ejecutar el script
/usr/share/bacula-director/make_mysql_tables. Esto creará
las tablas necesarias en la base de datos bacula ya creada por el
script de instalación.

4.Comentar o eliminar la
línea que añadimos a
/etc/mysql/my.cnf y reiniciar el demonio /etc/init.d/mysql. Esto
rehabilitará las tablas de privilegios que deshabilitamos en
el paso 1 restableciendo el control de accesos a MySQL. El siguiente
paso pretende realizar cambios sobre esta tabla, por lo que no
funcionará si no esta habilitada.

5. Añadir el usuario
bacula a mysql con todos los permisos para la base de datos bacula.

$ mysql -u root -p

$ Password:
contraseña_root

mysql> \u
mysql

mysql>
GRANT ALL privileges ON bacula.* TO bacula@localhost IDENTIFIED BY
‘password_bacula’;

mysql>
FLUSH PRIVILEGES;

mysql> quit

6. Anular todas las líneas
comprendidas entre las siguientes secciones (incluidas estas) en el
script de postinstalación
(/var/lib/dpkg/info/bacula-director-mysql.postinst):

db_get
bacula-director-mysql/create_tables || true

if [ “$RET” =
“true” ]; then

# Create DB

.

.

.

echo -e “GRANT
ALL privileges ON $CATALOG.* TO $MYSQL_USER@$MYSQL_HOST_URI ” \

“$MYSQL_USER_PSWD_STRING;\nFLUSH
PRIVILEGES;” \

| $MYSQL -h
$MYSQL_HOST -u $MYSQL_ROOT_USER $MYSQL_PSWD_STRING mysql

fi
bacula-director-mysql/create_tables == “true”

Nota: No
olvide incluir la línea del if y el fi. Recuerde que el
caracter utilizado para anular las líneas es #

7. Reconfigurar el paquete
para que realice el resto de tareas automáticamente (# dpkg
–configure bacula-director-mysql). Aparece el siguiente mensaje de
error:

Starting Bacula
Director: 14-Sep 18:07 bacula-dir: ERROR TERMINATION at lex.c:591

Config error:
expected a string, got T_EOL: =

: line 191, col
51 of file /etc/bacula/bacula-dir.conf

dbname = bacula;
DB Address = localhost; user = ; password = “”

failed.

Importante:
El dpkg –configure ni dpkg –reconfigure funciono. Se
realizó otra vez un apt-get
install como si se estuviera instalando de nuevo para
que  apareciera éste mensaje de error.

8. Modificar el archivo
/etc/bacula/bacula-dir.conf y añadir
línea
dbname=… los datos que se ajusten a los introducidos durante la
instalación:

 #
Generic catalog service

Catalog {

Name = MyCatalog

dbname = bacula;
DB Address = localhost; user = bacula; password = “password_bacula”

}

9. Por
último, reinicie
los tres scripts
de bacula

/etc/init.d/bacula-director
restart

/etc/init.d/bacula-sd
restart

/etc/init.d/bacula-fd
restart

3.3.-
Configurando bacula

3.3.1.-
Entendiendo el archivo de configuración del director
(/etc/bacula/bacula-dir.conf)

Sarge contiene la versión 1.36.2  de bacula. A
continuación se detallan las secciones que es necesario
comprender para poder ajustar el bacula a las necesidades propias.

Existe un trabajo llamado Client1
el cual está relacionado con una definición
más completa, en este caso llamada DefaultJob

Job {

  Name =
“Client1”

 
JobDefs = “DefaultJob”

  Write
Bootstrap = “/var/lib/bacula/Client1.bsr”

}

La siguiente es la definición más
completa a la que se hizo refencia anteriormente.

JobDefs {

  Name =
“DefaultJob”

  Type =
Backup

  Level
= Incremental

  Client
= mideplan4-fd

 
FileSet = “Full Set”

 
Schedule = “Ciclo”

 
Storage =  File

 
Messages = Standard

  Pool =
Diario

 
Priority = 10

}

Los componentes de ésta son:

Un nombre (DefaultJob)
Un Tipo y un nivel (Type, Level). Datos que no se modificaron.
Un cliente (Client). Definido con detalle más abajo.
Un FileSet. Definido con detalle más abajo, indica que es lo
que se va a respaldar.
Schedule. Definido con detalle más abajo. Indica
¿Cuándo se va a respaldar?
Storage. Definido con detalle más abajo. Indica en que
dispositivo se va a almacenar.
Pool. Indica cuál es el pool predeterminado.
Priority. Con que prioridad se ejecutará este proceso.

A continuación se muestran en detalle las secciones a las
que se hizo referencia en el anterior JobDef.

La definición del cliente (Client = mideplan4-fd)

Client {

  Name =
mideplan4-fd

 
Address = mideplan4

  FDPort
= 9102

 
Catalog = MyCatalog

 
Password =
“***”         
           #
password for FileDaemon

  File
Retention = 30
days           
# 30 days

  Job
Retention = 6
months           
# six months

 
AutoPrune =
yes                    
# Prune expired Jobs/Files

}

La definición de lo que se va a respaldar y lo que se va a
excluir del respaldo (FileSet = “Full Set”)

FileSet {

  Name =
“Full Set”

 
Include {

   
Options {

     
signature = MD5

   
}

    
File = /trabajos/publicos

    
File = /home/usuarios

 
   File = …

  }

# If you backup
the root directory, the following two excluded

#  
files can be useful

 
Exclude {

   
File = /proc

   
File = /tmp

   
File = /.journal

   
File = /.fsck

  }

}

A que hora se va a respaldar (Schedule = “Ciclo”)

Schedule {

  Name =
“Ciclo”

  Run =
Level=Full Pool=Mensual 1st sun at 1:05

  Run =
Level=Full Pool=Semanal 2nd-5th sun at 1:05

  Run =
Level=Incremental Pool=Diario  mon-thu at 1:05

}

Dónde se va a respaldar

Storage {

  Name =
File

# Do not use
“localhost” here

 
Address =
mideplan4               
# N.B. Use a fully qualified name here

  SDPort
= 9103

 
Password = “***”

  Device
= FileStorage

  Media
Type = SDX-450V

}

Nota: Es importante resaltar
que tanto los parámetros Device como Media Type deben coincidir con
aquellos definidos en el archivo /etc/bacula/bacula-sd.conf

3.3.2.-
Entendiendo el archivo de configuración del proceso
encargado de almacenar (bacula-sd.conf)

Este archivo contiene la definición de las diferentes
unidades de almacenamiento, las cuales pueden ser unidades de cinta o
bien discos duros. La parte modificada para utilizar la unidad de
cinta  fue la siguiente:

Device {

  Name =
FileStorage

  Media
Type = SDX-450V

 
Archive Device = /dev/nst0

 
LabelMedia =
yes;                  
# lets Bacula label unlabeled media

  Random
Access = Yes;

 
AutomaticMount =
yes;              
# when device opened, read it

 
RemovableMedia = no;

 
AlwaysOpen = no;

}

Notas:
* El nombre (Name) puede ser el que uno prefiera, y será el
utilizado en el archivo bacula-dir.conf
* El Media Type de la unidad de cinta se obtuvo haciendo un cat
/proc/scsi/scsi

3.3.3.-
Entendiendo el archivo de configuración del cliente.
(bacula-fd.conf)

En este se definen los directores que pueden contactar este proceso,
así como la contraseña.

Director {
  Name = mideplan4-dir
  Password = “***”
}

Note que los parámetros hasta aquí mencionados NO son los
únicos que deben ser modificados. Esta es una
guía que presenta solo los parámetros esenciales
para comprender el funcionamiento de bacula.

3.4.-
Primeros pasos en bacula

3.4.1.-
Ejecutando una tarea de
respaldo sin esperar que se cumpla la hora establecida.
(Para probar que todo esté bien)

Bacula tiene una consola se utiliza para interactuar con el director.
Una vez que ha realizado la configuración de los archivos de
bacula puede probar que los respaldos se ejecuten apropiadamente
 ingresando a la consola con el comando bconsole y ejecutando
seguidamente run. Este le permitirá seleccionar el trabajo
que desea ejecutar. Una vez hecho esto puede escribir el comando status
client para ver que pasó con el trabajo. Cuando el respaldo
finalice, o  en caso que ocurra un error, recibirá
un correo electrónico informándole.

Nota: De manera predeterminada el correo es enviado a la persona que
recibe los correos dirigidos al root

3.4.2.-
Limpiando la cinta para comenzar de nuevo (Luego de las
pruebas)

A.- Use el
comando list volumes para verificar que el campo recycled sea igual a
uno.
B.- use el
comando purge para purgar los trabajos
C.- use el
comando purge para purgar el volumes

Seguidamente es posible utilizar el comando relabel en caso que desee
cambiarle la etiqueta a la cinta.

Importante: Es posible que el comando relabel diga que la cinta ya
está etiquetada y no permita cambiarle la etiqueta. Para
solucionar esto es necesario ejecutar como root estos comandos

mi_tarro# mt
-f /dev/nst0 rewind
mi_tarro# mt
-f /dev/nst0 weof

3.4.3.- Respaldando
una base de datos de MySql

Una de las necesidades que se debían cumplir con
este sistema de respaldos era realizar un respaldo de una
pequeña base de datos (MySql) que contiene un sistema
utilizado para control interno. La solución encontrada fue
crear un script que hace un dump de la base de datos
automáticamente (cron) unas horas antes de que bacula
ejecute su tarea.
Es un script de bash muy sencillo, lo escribo a continuación
pues todas las sugerencias son bienvenidas 😀

#!/bin/bash

######################################################################

# Script para
respaldar archivos.

# Es posible
especificar cuantos respaldos antiguos desea guardar.

# Elidier Moya R.

#####################################################################



######################
Variables #############################



# Directorio
donde quiere almacenar el respaldo

cd
/trabajo/respaldo/bd



# Nombre del
archivo que se crea, formado por la fecha + una constante

Constante=Resp_Mi_base_de_datos.sql

Archivo=`/bin/date
+%F.%H%M%S`.$Constante



#
Ubicación y nombre de la base de datos a respaldar

Origen=mi_base_de_mysql



#
¿Cuantos respaldos desea guardar?

Guardar=1



#Variable para
contar la cantidad de respaldos almacenados en una carpeta

Contador=0



######################
Borrado resp anterior ##################



for lista in $(ls
*$Constante -t) # -t los ordena por fecha

do

 
Contador=$(($Contador+1))

  if [
$Contador -ge $Guardar ]

  then

   
rm -f $lista&TASK0=$! # aquí borra el o los mas
viejos

   
wait $TASK0

  fi

done



######################
Creación  ##############################





#
Creación del archivo

mysqldump –opt
$Origen > $Archivo&TASK1=$!



# Espera a que la
creación del archivo finalice

wait $TASK1



# Escribe en la
bitacora

echo $Archivo’
(‘$Origen’) ‘ >> bitacora.log


3.5.-
 Más información de bacula

Estas son algunas notas en cuanto a la instalación,
configuración y uso de bacula. Sin embargo para ponerlo a
trabajar de acuerdo a las necesidades propias de cada uno es mejor leer
la documentación del sitio oficial.

Aquí
un manual corto
(17), en inglés. (bueno para iniciar)

y aquí uno
más completo
(18).

[1]
Host: scsi0 Channel: 01 Id: 00 Lun: 00
Vendor: SONY     Model:
SDX-450V        
Rev: 0100
Type:  
Sequential-Access               
ANSI SCSI revision: 02

[2]
st0: Error with sense data: Current st09:00: sense key Not Ready

Additional sense indicates Medium not present

st0: Error with sense data: Info fld=0x1, Current st09:00: sense key
Hardware Error

Additional sense indicates Internal target failure

st0: Error on write filemark.

Lista de enlaces de este artículo:

  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=2#1.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=2#2.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=3#3.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=3#3.1.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=3#3.2.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=3#3.2.1.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=3#3.2.2.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=4#3.3.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=4#3.3.1.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=4#3.3.2.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=4#3.3.3.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=5#3.4.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=5#3.4.1.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=5#3.4.2.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=5#3.4.3.-
  • http://bulma.net/body.phtml?nIdNoticia=2279&nIdPage=5#3.5.-
  • http://bacula.org/dev-manual/Brief_Tutorial.html#SECTION000121000000000000000
  • http://bacula.org/rel-manual/Contents.html
  • Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=2279 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.