Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > bacula > Bacula: el recurso pool

Pools

En la jerga de bacula un pool es un conjunto de volúmenes de almacenamiento (cintas ó discos) utilizados por el programa para guardar datos.

Si se crean diferentes pools se pueden asignar volúmenes independientes para cada tipo de copia (completa, incremental, ...) ó para máquinas diferentes. Además, engloban un conjunto de atributos comunes para cada volumen, por lo que es sencillo compartir límites como el número máximo de trabajos, los periodos de retención, el indicador de reciclado, ...

Para usar un pool existen tres pasos:

  1. Los pool deben definirse en el director de copias, el cual los guarda en el catálogo cada vez que comienza su funcionamiento, siendo posible también usar la consola mediante la orden create.
  2. El medio físico debe ser etiquetado. Bien mediante la orden label de la consola, bien mediante el programa btape.
  3. Se deben añadir nombres de volúmenes (y sus atributos) al pool. Estos volúmenes deben ser del mismo tipo (atributo Media Type) que los que se solicitan en el trabajo. Es decir, si vamos a salvar datos a una cinta DLT en un trabajo, debe existir algún volumen asociado al pool de ese tipo, puesto que no es posible montar un CD sobre una cinta, por ejemplo. Cuando se ejecuta un trabajo de copia se debe especificar el pool a utilizar y Bacula determinará desde él cuál es el siguiente volumen a usar, asegurándose de que el tipo de medio (Media Type) corresponde al que require el recurso de almacenamiento (Storage) del trabajo.

Aunque Bacula mantenga automáticamente las definiciones de pools en el catálogo cuando inicia su ejecución, es recomendable utilizar update pool en la consola si cambiamos alguna de ellas.

Periodos de retención

Existen varias directivas que nos permiten acotar el tiempo que bacula conserva los archivos y la información sobre ellos.

File Retention

En un cliente, esta directiva determina el tiempo que Bacula conservará la información sobre los archivos en el catálogo. Una vez alcanzado el límite, y si la directiva Auto Prune está activa, Bacula purgará los registros del catálogo. En caso contrario se deberá hacer a mano.

Si cualquier de las dos directivas Job Retention ó Volumen Retention especifican un periodo menor que éste, se usará el más breve para efectuar la purga de información.

El valor predeterminado es de 60 días, y se puede expresar en segundos, minutos, horas, días, semanas, meses, trimetres y años.

Job Retention

También en la definición de un cliente, esta directiva establece el límite de tiempo que Bacula conservará registros del trabajo de copia y, al igual que en el resto de los periodos de retención, sólo afecta a los registros y no a los archivos en las copias.

En cuanto un trabajo se selecciona para purgarlo toda la información referente a archivos y medios de copia relacionados con él se purga también, sin importar lo que diga la directiva File Retention. También es posible que este valor sea ignorado en favor de lo que indique la directiva Volume Retention, puesto que ambos valores son evaluados de forma independiente y se toma el que menor valor tenga.

El valor predeterminado para retención de trabajos (información sobre) es de 180 días.

Volume Retention

Esta directiva establece el tiempo que Bacula conservará registros de trabajos asociados con el volumen en el catálogo. En el momento de alcanzar este valor, Bacula purgará los datos del trabajo si es absolutamente imprescindible para reciclar un volumen.

El purgado de esta información también afectará a los registros de trabajos y archivos, y puede llegar a producirse cuando se solicita un estado del director mediante la consola (status dir), puesto que se usan algoritmos similares para determinar el siguiente volumen para un trabajo de copia.

Es importante tener en cuenta que Bacula hará todo lo posible para retener los datos de una copia el mayor tiempo posible, y que no sobreescribirá un volumen hasta que no tenga otro remedio para obtener uno nuevo.

El periodo predeterminado para retener información sobre volúmenes es de 365 días, un año.

Mediante el uso de pools múltiples es posible tener conjuntos diferentes de cintas que se reciclan semanal y mensualmente. Y es importante también tener en cuenta que si el periodo de retención es muy corto es posible purgar la última copia completa y dejar el sistema en precario, sin copia de todos los archivos, hasta que se ejecute el siguiente trabajo completo. Es más, la siguiente copia incremental ó diferencial son ascendidas inmediatamente a copias completas, por lo que es necesario tenerlo en cuenta.

Así pues, es aconsejable que este valor sea, como mínimo, dos veces mayor que el intervalo entre dos copias completas. Es decir, si se hace una copia completa cada mes, este límite de tiempo debería estar en dos meses mínimo.

Los volúmenes que ya están archivados conservan una copia del periodo de retención, por lo que cambiar éste valor en el archivo de configuración no garantiza que los cambios se propaguen a los volúmenes. Para ello se debe usar la orden update en la consola.

Reciclado de volúmenes

Consiste en reutilizar los volúmenes antiguos para (sobreescribiéndolos) crear nuevas copias.

Una vez que Bacula comienza a escribir un volumen de datos puede añadir información al mismo, pero no escribirá sobre datos existentes hasta que no marca el volumen como reciclado (recycled). En este caso el volumen queda disponible para un futuro uso y todos los datos que contiene se perderán cuando comience una copia con él.

La anulación del mecanismo de reciclado automático de volúmenes es posible en Bacula, aunque en ese caso el operador tendrá que hacerlo manualmente.

Cuando Bacula encuentra un volumen lleno y necesita guardar más cosas:

  1. Busca un volumen en el pool al que pueda añadir datos y si lo encuentra lo usa.
  2. Si no lo encuentra busca volúmenes con el indicador de reciclado (Recycle flag) y la marca de volumen completo (Full). En este caso procede al reciclado en las siguientes fases:
    1. Purga el catálogo para el volumen seleccionado, eliminando todos los registros de archivos y trabajos.
    2. El volumen se purgará cuando expire el periodo de tiempo indicado en VolumeRetention, lo que significa que se borrarán todos los registros referentes a él en el catálogo y se marca como Purged.
    3. Se procede con el reciclado físico una vez que el volumen está purgado:
      • Si se trata de una cinta, ésta será rebobinada y la grabación se situará al principio de la misma.
      • En el caso de un archivo será truncado antes de usarlo.

Visto lo anterior se deduce que los datos de un volumen permanecen intactos hasta que el reciclado se hace efectivo en el dispositivo físico.

Si no encuentra ningún volumen apto para reutilizar se solicitará la intervención del operador para que etiquete uno nuevo.

Por ejemplo es posible tener un pool de cintas para copias diarias que se reciclan semanalmente, otro pool para copias completas semanales y que se reciclan una vez al mes y, por último, otro pool más para copias completas mensuales que se reciclan cada año ó dos años. De esta forma el número de cintas permanece constante, quitando aquellas que deben retirarse por el deterioro normal en estos casos.

El reciclado automático de volúmenes se define, en la definición del pool, por estas tres directivas:

  • AutoPrune = yes
  • VolumeRetention =
  • Recycle = yes

Esto es todo lo que se necesita, asumiendo que se quiera agotar el espacio en los volúmenes y esperar a que llegue la fecha límite de retención para reciclarlos.

Si lo que se quiere es controlar el número de volúmenes menospreciando su llenado se deberán usar una ó mas de las siguientes directivas:

  • Para utilizar un volumen por vez, esto es, un trabajo en cada volumen (aunque por lo visto se dejará de utilizar en futuras versiones) usar:

    Use Volume Once = yes

  • Para guardar N trabajos por volumen emplear:

    Maximum Volume Jobs = N

  • Para limitar el tamaño en bytes de cada volumen utilizar:

    Maximum Volume Bytes = NNN

  • Para limitar el uso de un volumen a N días (un periodo de tiempo en realidad) añadir:

    Volume Use Duration = ttt