%%
%%

\chapter{El estado actual de Bacula}
\label{StateChapter}
\index[general]{Estado actual de Bacula }

En otras palabras, que está y que no está implementado y funcional..

\section{Que está implementado}?
\index[general]{Implemented!What}
\index[general]{Que está implementado?}

\begin{itemize}
\item Control de trabajos (jobs) 

   \begin{itemize}
   \item Respaldos y restauraciones en red con un director centralizado.
   \item Scheduler interno para ejecución automática de los 
      \ilink{Jobs}{JobDef}.  
   \item Scheduling de múltiples jobs al mismo tiempo.  
   \item Se puede correr uno o múltiples jobs en forma simultánea 
         (algunas veces, esto se denomina multiplexado (multiplexing)).
   \item Uso de prioridades para la secuencialidad de los jobs.
   \item \ilink{Interfaz de Consola}{UADef} con el director, permitiendo un control completo
      de las operaciones. Diferentes versiones de programas de consola están disponibles,
      tales como línea de comandos, Qt4 GUI, GNOME GUI y wxWidgets. Hay que destacar, que
      el programa de Qt4 GUI, se denomina bacula administration tool o bat, y ofrece mas
      funcionalidades adicionales al programa de shell.
   \end{itemize}

\item Seguridad 
   \begin{itemize}
   \item Verificación de archivos, que han sido previamente catalogados, permitiendo con esto, 
      un conjunto de funcionalidadaes como las ofrecidas con Tripwire (sistema de detección
      de vulnerabilidades)(\url{http://es.wikipedia.org/wiki/Tripwire} ).  
   \item Autenticación con password CRAM-MD5 entre cada uno de los componentes (demonios).
   \item Encriptación configurable de comunicaciones 
      \ilink{TLS (SSL)}{CommEncryption} entre cada uno de los componentes.
   \item Encriptación configurable de la 
   \ilink{Data (en un Volumen)}{DataEncryption}
      definidas cliente por cliente.
   \item Firmas de MD5 y SHA1 de la data de los archivos, de ser necesaria.   
   \end{itemize}

\item Funcionalidades para las restauraciones
   \begin{itemize}
   \item Recuperación de uno o más archivos, seleccionados interativamente desde el backup
      actual o previos a una hora y fecha indicada.  
   \item Restauración de un sistema completo, para un equipo nuevo (bare metal). 
      Este procedimiento está completamente automatizado para sistemas Linux y 
      parcialmente automatizado para Solaris. Vea el capítulo de 
      \ilink{Disaster Recovery utilizando Bacula}{RescueChapter}. También se ha reportado que 
      funciona en sistemas con Win2K/XP.   
   \item Listado y recuperación de archivos stand-alone, utilizando programas utilitarios como {\textbf bls} and  
      \textbf {bextract}. Entre otras cosas, estos permiten la extracción
      de archivos cuando bacula y/o el catálogo no están disponibles. Hay que tener presente,
      que la manera adecuada para recuperar archivos es utilizando el comando restore en
      la consola. Estos programas están diseñados para ser usados como un último recurso. 
   \item Capacidad para restaurar la base de datos del catálogo de manera rápida con el uso
      de archivos bootstrap (grabados previamente).
   \item Capacidad para restaurar la base de datos del catalogo utilizando el programa 
      \textbf {bscan}, a traves del escaneo de los volúmenes de backup.  
   \end{itemize}

\item Catálogo SQL
   \begin{itemize}
   \item Base de datos de catálogo para almacenar información de: volúmenes, pools, jobs y
      archivos respaldados. 
   \item Soporte para el catálogo con bases de datos MySQL, PostgreSQL y SQLite.  
   \item Consultas de usuario extensibles a las bases de datos MySQL, PostgreSQL y SQLite.  
   \end{itemize}

\item Administración avanzada de pools y de volúmenes
   \begin{itemize}
   \item Etiquetado de volúmenes, para prevenir la sobreescritura accidental de los mismos
      (al menos por Bacula).
   \item Cualquier número de jobs y de clientes pueden ser respaldados a un simple volumen.
      Es decir, se puede hacer backup y recuperaciones de máquinas Linux, Unix, Sun y Windows
      a un mismo volumen.  
   \item Backup multivolumen. Cuando un volumen está full, \textbf {Bacula}  automáticamente
      busca el siguiente volumen y continúa el respaldo.  
   \item La administración de la librería de
      \ilink{pools y de volumenes}{PoolResource}  
      brinda una gran flexibilidad para el manejo de estos últimos, y permite manejar:
      conjuntos de volúmenes diarios, semanales y clasificados por cliente, entre otros). 
   \item El formato de la data del volumen es independiente de la máquina. Los clientes Linux,
      Solaris y Windows pueden ser respaldados en el mismo volumen, si se desea. 
   \item El formato de data del volumen es compatible hacia arriba, para que los volúmenes
      viejos siempre puedan ser leidos.
   \item Un manejador flexible de
      \ilink{mensajes}{MessagesChapter},  que incluye
      el enrutamiento de mensajes desde cualquier demonio hacia el director y correo de
      reporte de notificación automático. 
   \item Spooling de la data en disco durante el backup, con la escritura subsiguiente de
      los archivos grabados en el spool a la cinta. Esto previene el uso intensivo del
      tape durante los respaldos incrementales y diferenciales.  
   \end{itemize}

\item Soporte avanzado para la mayoría de los dispositivos de almacenamiento
    \begin{itemize}
   \item Soporte a Autochanger, utilizando una interfaz simple de comandos que interactúa 
      virtualmente con cualquier programa de autoloader. Un script para  {\textbf mtx} se
      copia durante la instalación.   
   \item Soporte para autochangers con códigos de barras, y etiquetado automático de cintas
      desde los códigos de barras.  
   \item Soporte automático para múltiples librerías de recambio automático, utilizando código
      de barras o por la lectura de los tapes.  
   \item Soporte para múltiples unidades de autochangers.
   \item Backup y restauración de dispositivos crudos (raw devices). La recuperación debe
      hacerse al mismo dispositivo. 
   \item Todos los bloques de los volúmenes (aproximadamente 64K bytes) contienen un checksum
         de la data.  
   \item Soporte a migración – movimiento de la data de un pool a otro o de un volumen a otro.
   \item Soporte para escritura en DVD.
   \end{itemize}

\item Soporte para múltiples sistemas operativos
   \begin{itemize} 
   \item Programado para el manejo arbitrario de nombre largos de archivos y mensajes.  
   \item Compresión tipo GZIP archivo por archivo, hecha por el programa cliente, si se ha
      configurado, antes de la copia en red.  
   \item Grabado y recuperación de ACLs tipo POSIX en la mayoría de los sistemas operativos,
      si está activadas. 
   \item Listas de control de accesos para las consolas que permiten restringir a los usuarios
      el acceso a su datos únicamente.  
   \item Soporte para guardar y recuperar archivos más grandes que 2GB.  
   \item Soporte para máquinas con 64 bits, tales como, amd64, Sparc.
   \item Soporte para etiquetas de cintas ANSI e IBM.
   \item Soporte para nombres de archivos Unicode (tales como chino) en equipos con Win32
         a partir de la versión 1.37.28 y superiores.
   \item Backup consistente de archivos abiertos en sistemas Win32 (WinXP, Win2003 y Vista), 
         pero no en Win200, utilizando el Volume Shadow Copy (VSS).
   \item Soporte para longitudes de nombres de archivo y path hasta 64K en máquinas Win32
         (esta capacidad es ilimitada equipos con Unix/Linux).
   \end{itemize}

\item Misceláneos
   \begin{itemize}
   \item Implementación multi-threaded. 
   \item Un  
      \ilink{archivo de configuración}{DirectorChapter} comprensible y extensible
      para cada servicio o demonio.  
   \end{itemize}
\end{itemize}

\section{Ventajas sobre otros programas de backup}
\index[general]{Ventajas sobre otros programas de backup }
\index[general]{Programs!Advantages of Bacula Over Other Backup }

\begin{itemize}
\item Debido que existe un cliente por cada máquina, se puede hacer backup y recuperaciones
   de clientes de cualquier tipo, asegurando que todos los atributos de archivos, son
   grabados y restaurados de manera adecuada.
\item Es posible respaldar clientes sin la instalación del software para el file daemon,
   utilizando NFS o Samba. Sin embargo, se recomienda la instalación del mismo en cada
   equipo a respaldar.
\item Bacula maneja respaldos multi-volúmenes.  
\item Base de datos SQL estándar con un registro completo de todos los archivos grabados.
   Esto permite una visualización en línea de los archivos para cualquier volumen particular.  
\item Pruning automático de la base de datos (eliminación de registros viejos), simplificando 
   con esto la administración de la misma.  
\item Cualquier engine de base de datos puede ser utilizado, logrando con esto que bacula  
      sea muy flexible. Aunque actualmente, existen drivers para MySQL, PostgreSQL y SQLite.
\item El diseño modular, pero integrado, hace de bacula una solución muy escalable.  
\item Debido a que bacula utiliza archivos clientes para los servidores, cualquier base
   de datos o aplicación pueden ser detenidas haciendo uso de las herramientas nativas
   del sistema, luego hacer el backup y reiniciarlas, todo dentro un job de bacula.
\item Bacula cuenta con un scheduler interno para la planificación de los jobs.  
\item El formato del volumen está documentado y existen programas sencillos en lenguaje 
   C que leen o escriben en ellos.  
\item Bacula utiliza puertos TCPI/IP conocidos (registrados en IANA) -- no se utiliza rpc
   ni memoria compartida.  
\item La instalación y configuración de bacula es relativamente sencilla.
\item De acuerdo a un usuario de bacula, es tan rápido como las más grandes aplicaciones
   comerciales de backup.  
\item De acuerdo con otro usuario de bacula, es cuatro veces más rápido que otra aplicación
   comercial, probablemente, esto se debe a que esta última almacena la información
   del catálogo en un gran número de archivos individuales, en vez de una base de datos
   SQL, como lo hace bacula.  
\item Adicional a las interfaces administrativas en modo gráfico (GUI), bacula cuenta con
   una interfaz de línea de comandos muy comprensible, que permite el uso de herramientas,
   tales como ssh para gestionar cualquier componente de bacula desde cualquier sitio (incluso
   desde la casa). 
\item Bacula cuenta con un CD de rescate para sistemas Linux, con las siguientes funcionalidades: 
   \begin{itemize}
   \item Permite construir el sistema original luego de un desastre con un simple comando:
      make -- por supuesto, luego hay que hacer la copia. 
   \item Utiliza su propio kernel. 
   \item Captura los parámetros actuales del disco, y construye scripts que permiten el particionamiento
      automático y formateo del mismo, y colocarlo en el estado original que se tenía.
   \item Cuenta con un script que permite reiniciar los servicios de red (con la dirección
      IP correcta).
   \item Cuenta con un script que monta automáticamente los discos configurados.  
   \item Cuenta con el software de bacula FD enlazado de manera estática. 
   \item Se puede adicionar cualquier programa o data al disco de manera fácil.  
   \end{itemize}

\end{itemize}

\section{Restricciones de la implementación actual}
\index[general]{Restricciones de la implementación actual }
\index[general]{Restrictions!Current Implementation }

\begin{itemize}
\item Es muy inusual restaurar dos jobs diferentes en la misma operación de restauración,
   si estos jobs corrieron en forma simultánea, a menos que se haya habilitado el spooling
   de la data y esta mantenga el contenido completo de ambos jobs. En otras palabras,
   bacula no puede restaurar dos jobs en el mismo restore, si los bloques de datos de
   los jobs están entremezclados en el medio de backup. El problema se resuelve simplemente
   ejecutando dos restauraciones, una para cada Job.
\item Bacula puede restaurar cualquier backup hecho desde un cliente a otro cliente. Sin
   embargo, si la arquitectura es completamente diferente (tales como, arquitectura
   de 32 bits a 64 bits, o de Win32 a Unix), algunas restricciones pueden aplicar (por
   ejemplo, en Solaris existen archivos especiales que no existen en otros equipos Unix
   o Linux; hay reportes que indican que la compresión de Zlib escrita con máquinas
   de 64 bits no siempre es leida correctamente en una máquina de 32 bits).
\end{itemize}

\section{Restricciones y limitaciones de diseño}
\index[general]{Restrictions!Design Limitations or }
\index[general]{Restricciones y limitaciones de diseño }

\begin{itemize}
\item Los nombres (recursos de nombres, nombres de volúmenes, entre otros) definidos en
   los archivos de configuración de bacula están limitados a un número fijo de caracteres.
   Actualmente, el límite está definido a 127 caracteres. Hay que tener en cuenta, que
   esto no aplica a nombres de archivos, los cuales pueden ser arbitrariamente largos. 
\item La entrada para la línea de comandos de algunas de las herramientas stand alone, 
   -- tales como btape, bconsole, está restringida a un máximo de varios cientos de caracteres. 
\end{itemize}

\section{Items para tener en cuenta}
\index[general]{Items para tener en cuenta}
\begin{itemize}
\item Los respaldos \textsl{normales} de Bacula incrementales y diferenciales, están basados en 
  modificaciones de tiempo. Por esto, si usted mueve archivos en un directorio existente
  o mueve un directorio completo dentro del fileset de respaldo, después de la ejecución
  de uno de tipo Full, probablemente no sean respaldados por los incrementales, puesto
  que tienen fechas de modificación antiguas. Este problema se corrige utilizando el
  modo Accurate en los backups o modificando de manera explícita la fecha y hora de
  modificación de todos los archivos movidos.
\item En versiones previas de Bacula ($<=$ 3.0.x), si usted está cerca de las 4 billones
  de entradas de archivos almacenadas en el catálogo, la base de datos FileId probablemente
  pueda hacer overflow.
\item Cuando no se utiliza el modo \textsl{Accurate}, los archivos borrados después de un respaldo
  Full no serán incluidos en la restauración. Esto es común en la mayoría de los programas
  de backup similares.
\end{itemize}
