Ir para o conteúdo
ou

Software livre Brasil

Heitor Medrado de Faria

Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

Tutorial Deduplicação Sistema de Arquivos em Nível de Blocos com Volumes Alinhados (Bacula 9.0.8 e superior)

20 de Outubro de 2018, 21:16, por Bacula Backup Brasil - 0sem comentários ainda

Observações preliminares:

  • Esse recurso está disponível para o Bacula Community (9.0.8 ou superior) e Enterprise.
  • A compressão do software Bacula não deve ser habilitada com o formato Alinhado, resultando em desempenho de desempenho ruim da desduplicação.
  • Você precisará de uma pequena área de SSD para armazenar o mecanismo do índice de deduplicação.
  • Neste método o Bacula criará volumes distintos para conter os metadados dos arquivos copiados do backup e outro para os dados em si.

A deduplicação de dados é uma abordagem de redução de dados baseada em dicionário, devido à sua capacidade de efetivamente reduzir o armazenamento de backup ou o tamanho do conjunto de dados de arquivamento por um fator de 4-40X. É um componente essencial do sistema de backup porque reduz os requisitos de espaço de armazenamento, além de ser também uma questão crítica, na medida que odesempenho de toda a operação de backup depende da taxa de transferência de armazenamento.

De acordo com a Figura 1, o novo formato Alinhado de gravação dos Volumes de backup traz considerável redução no custo de armazenamento em relação ao Volumes antigos tradicionais do Bacula Community. Mostra-se, de igual sorte, mais eficiente do que outras ferramentas de deduplicação a exemplo do ZBackup (software de deduplicação de pacotes tar) em termos velocidades de backup e restauração. Há um menor impacto na duração de backup e restauração ao utilizar o novo formato Alinhado de Volumes com o Bacula, mas é um trade-off aceitável.


Figura 1 - Formato Tradicional de Volumes de Versões Antigas do Bacula Community versus o Novo Formato de Volume Alinhado com Deduplicação (FIGURA DE AUTORIA DE HEITOR FARIA).


Mais do que nunca, os backups de disco estão se tornando uma substituição viável para bibliotecas de fitas, uma vez que a deduplicação não é uma característica que atualmente pode ser implantada eficientemente nas fitas magnéticas seqüenciais. Apenas discos possuem essa vantagem.

1. Sistema de Arquivos ZFS

Atualmente, existem vários sistemas de arquivos de desduplicação hoje em dia, como lessfs, opendedup, ZFS e outros. Hardware com capacidades de desduplicação também pode ser usado em conjunto com o formato Alinhado de Volumes do Bacula. Nesse artigo utilizamos o ZFS, e mais a frente o Dddumbfs como alternativa:

a) Instalação RedHat/CentOS (https://github.com/zfsonlinux/zfs/wiki/RHEL-and-CentOS)

yum install http://download.zfsonlinux.org/epel/zfs-release.el7_5.noarch.rpm

echo "
[zfs-kmod]
name=ZFS on Linux for EL7 - kmod
baseurl=http://download.zfsonlinux.org/epel/7.5/kmod/\$basearch/
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux" > /etc/yum.repos.d/zfs.repo

yum install zfs
modprobe zfs 

b) Instalação Debian/Ubuntu

sudo -i
apt-get -y install zfsutils-linux

Inicializando o ZFS

A Inicialização do ZFS vai requerer um ou mais discos físicos. No exemplo abaixo, /zfs/mnt deve ser o valor configurado no bacula-sd.conf nas diretivas ArchiveDevice. A compressão do ZFS também pode ser habilitada.

sudo zpool create -f zfs /dev/sdb 
zfs create zfs/mnt
zpool status zfs
df -h
zfs set dedup=on zfs/mnt
zfs set compression=on zfs/mnt
chown bacula /zfs/mnt

Referências:


2. O Sistema de Arquivos de Ddumbfs (ALTERNATIVA)

Ddumbfs tem código aberto e focado em operações mais rápidas graças ao seu design de índice simples, o que é muito importante para janelas de backup mais curtas.

2.1 Dependências do ddumbfs

Para compilar ddumbfs você precisa como de costume: make e gcc, os cabeçalhos para fusíveis e mhash library e pkg-config.

Aqui estão os pacotes correspondente para RedHat e distribuições baseadas em Debian (alguns deles precisam ser criados a partir da fonte):

  • RedHat/CentOS: fuse fuse-libs mhash fuse-devel mhash-devel pkgconfig gcc make
  • Debian/Ubuntu: libfuse2 libmhash2 libfuse-dev libmhash-dev pkg-config fuse-utils build-essential

a) Pacotes RedHat/CentOS:

sudo -i
yum -y install epel-release.noarch
yum -y install fuse fuse-libs mhash fuse-devel mhash-devel pkgconfig gcc make automake

b) Pacotes Debian/Ubuntu:

sudo -i

apt-get -y install fuse libfuse2 libmhash2 libfuse-dev libmhash-dev pkg-config build-essential autotools-dev

1.2 Compilando e Instalando o Ddumbfs

wget -qO- http://www.magiksys.net/download/ddumbfs/ddumbfs-1.1.tar.gz | tar -xzvf - -C /usr/src
cd /usr/src/ddumbfs-*
./configure
make
make install

2.3 Inicializando o Ddumbfs

Crie dois diretórios. O primeiro deve ser um ponto de montagem SSD para hospedar o motor dos índices do ddumbfs. O segundo deve ser um ponto de montagem onde seus Volumes de Armazenamento Bacula serão escritos, geralmente um grande conjunto de discos.

mkdir /mnt/ddumbfs.data

mkdir /mnt/ddumbfs.mnt

Inicialize o mecanismo de deduplicação. Neste exemplo, um volume 999G é criado, então altere para o tamanho desejado que faz o seu disco:

mkddumbfs -B 128k -s 999G /mnt/ddumbfs.data
ddumbfs $TARGET -o parent=/mnt/ddumbfs.mnt

Adicione uma nova linha como esta para /etc/fstab, para tornar o ddumbfs persistente após a inicialização:

-oparent=/mnt/ddumbfs.data   /mnt/ddumbfs.mnt   fuse.ddumbfs   defaults  0  0

Reinicie a máquina para garantir que o ddumbfs esteja sempre montado no momento da inicialização.


3. Configuração dos Volumes Alinhados Bacula

Você precisa instalar o pacote de Drivers Algined, disponível através do repositório de pacotes pessoal da bacula.org (Bacula Binary Package Download, requer registro).

yum install bacula-aligned.x86_64

Este é um exemplo do novo dispositivo bacula-sd.conf. DeviceType deve ser "Aligned"; MaximumConcurrentJobs deve ser "1"; Os valores do tamanho do bloco podem variar de acordo com a desduplicação utilizada FileSystem:

Device {
  Name = Aligned-Disk
  Device Type = Aligned  # Precisa ser Aligned
  Media Type = File1
  Archive Device = /zfs/mnt   # Or /mnt/ddumbfs.mnt  in case of ddumbfs.
  LabelMedia = yes; 
  Random Access = Yes;
  AutomaticMount = yes; 
  RemovableMedia = no;
  AlwaysOpen = no;
  Maximum Concurrent Jobs = 1  # Para Aligned Sempre Um
  Minimum Block Size=0K
  Maximum Block Size=128K
  File Alignment=128K
  Padding Size=512
  Minimum Aligned Size=4096
}

Informação detalhada:

Para os sistemas de arquivos ZFS, lessfs e ddumbfs, os seguintes valores produzem excelentes resultados:
Block Size=128K
File Alignment=128K
Padding Size=512
Minimum Aligned Size=4096

Para sistemas de arquivos NetApp, os seguintes são preferíveis:
Block Size=64K
File Alignment=4K
Padding Size=4K
Minimum Aligned Size=4K

Onde os valores são mostrados logo após o sinal de igual, e o K significa multiplicar por 1024 bytes.
BlockSize é o tamanho dos blocos a serem gravados no volume alinhado.
File Alignment é o alinhamento do primeiro bloco de cada arquivo original armazenado no VolumeAlinhado.
PaddingSize é o alinhamento no qual o último bloco de um arquivo original é preenchido com zeros se não estiver cheio.
MaximumAlignmentSize é o tamanho do arquivo abaixo do qual o arquivo será colocado no Volume de Metadados, ao invés do Volume Alinhado.

[Ref.: Sibbald, Kern - https://www.google.com/patents/US20160055169]

Por fim, apenas anexe o dispositivo bacula-sd criado ao seu Diretor. Edite seu bacula-dir.conf:

Storage {
  Name = Disk-Backup
  Address = hfaria-desk-i5 
  SDPort = 9103
  Password = "5PWzqJzEokv3z9U_NwBd6bJ30ib1x4TMW"
  Device = Aligned-Disk
  Media Type = File1
}

Execute alguns trabalhos de backup completos. Após o primeiro trabalho completo, os próximos não devem aumentar o tamanho de armazenamento desduplicado. O comando exibirá a ocupação dos dados:

df -h

E o comando list jobs,  do bconsole exibirá o tamanho que as tarefas de backup deveriam ocupar.

Aprecie!


 



Bacula Enterprise Edition 10.2 com Backup e Recuperação Integrados de Ambientes de Virtualização da Red Hat

20 de Outubro de 2018, 19:19, por Bacula Backup Brasil - 0sem comentários ainda

Backup sem agente, agnóstico para back-end de armazenamento Vdisk, quiesce* transparente e criação de snapshots, flexibilidade de restauração e VMs restauradas em tempo real

A Bacula Systems SA anunciou o Enterprise Edition 10.2, com funcionalidade para backup e recuperação integrada de ambientes Red Hat Virtualization.

Bacula enterprise architecture

Fornecendo backup de imagem, feito fora dos ambientes Red Hat Virtualization, o módulo permite que a empresa realize backup e recuperação totalmente independente do hipervisor.

O objetivo do produto é aumentar a flexibilidade e a eficiência de backup e reduzir os custos para os usuários do Red Hat Virtualization em grande escala. Sua funcionalidade fornece os seguintes benefícios:

  • Backup sem agente de ambientes Red Hat Virtualization.
  • Agnóstico para back-end de armazenamento Vdisk.
  • Mecanismos de seleção e exclusão para controlar os requisitos de granularidade e capacidade de backup.
  • Quiesce transparente e criação de snapshots.
  • Restaure a flexibilidade: para o mesmo ou diferente cluster/armazenamento, instâncias virtuais existentes ou novas.
  • Configuração de VMs restauradas em tempo real e opção para restaurar arquivos simples para processamento adicional.

"Uma solução eficaz de backup e recuperação é um elemento importante para qualquer usuário de tecnologia de virtualização, incluindo aqueles que usam a Virtualização Red Hat. Com a Red Hat Enterprise Virtualization alimentando ambientes de missão crítica em uma ampla variedade de indústrias, estamos satisfeitos com nossos parceiros, incluindo Bacula Systems, ajudando a liderar o caminho no fornecimento de opções de backup e recuperação de nível corporativo para nossos clientes ", disse Rob Young, gerente de plataformas de nuvem e virtualização da Red Hat, Inc.

"A Bacula Systems trabalhou em estreita colaboração com a Red Hat para nos permitir desenvolver essa interoperabilidade avançada com o Red Hat Virtualization. O anúncio de hoje se baseia no posicionamento do Bacula como uma das soluções de backup e restauração mais flexíveis e amplamente compatíveis disponíveis atualmente na indústria. Não apenas os MSPs mas todas as grandes organizações podem implantar o Bacula para proteger todo o seu ambiente físico virtual e de nuvem, independentemente da arquitetura - tudo a partir de uma única plataforma ", disse Frank Barker, CEO da Bacula Systems.

*Preparar para o backup seguro.

Fonte: https://www.storagenewsletter.com/2018/10/18/bacula-enterprise-edition-10-2-with-integrated-backup-and-recovery-of-red-hat-virtualization-environments/

 



Monitoração Zabbix de Jobs e Processos do Bacula

17 de Outubro de 2018, 23:59, por Bacula Backup Brasil - 0sem comentários ainda

Este é um fork de um projeto do GIT. Verifique possíveis atualizações: https://github.com/germanodlf/bacula-zabbix

Esse projeto consiste de um shell script que coleta informações do servidor do Bacula, envia para o servidor Zabbix através de seu cliente (Zabbix sender), e um template a ser instalado no servidor de monitoração.

Características

  • Monitoramento individual para cada Job de backup
  • Diferentes níveis de Job têm diferentes gravidades
  • Monitoramento dos processos do Diretor, Storage e Cliente do Bacula
  • Gráficos e dashboards
  • Funciona com Catálogos do Bacula em PostgreSQL e MySQL

Dados Coletados pelo Script

  • Status de término do Job (item OK)
  • Número de bytes transferidos (item Bytes)
  • Número de arquivos transferidos (item Files)
  • Duração (item Time)
  • Taxa de transferência (item Speed)
  • Taxa de compactação (item Compression)

Dados dos Processos do Bacula

  • Status do processo do Bacula Director. O nome do processo é definido pela variável {$BACULA.DIR} e tem seu valor padrão como 'bacula-dir'. Este item precisa ser desabilitado em hosts que são apenas clientes do Bacula.
  • Status do Storage Daemon. O nome do processo é definido pela variável {$BACULA.SD} e tem seu valor padrão como 'bacula-sd'. Este item precisa ser desabilitado em hosts que são apenas clientes do Bacula.
  • Status do File Daemon. O nome do processo é definido pela variável {$ BACULA.FD} e tem seu valor padrão como 'bacula-fd'.

Gatilhos

  • O daemon do Bacula está DOWN em {HOST.NAME}: Inicia um alerta de gravidade do desastre quando o processo do Bacula está parado
  • Backup Full FAIL em {HOST.NAME}: inicia um alerta de alta gravidade quando uma tarefa de backup completo falha
  • Backup Diferencial FAIL em {HOST.NAME}: inicia um alerta de gravidade médio quando uma tarefa de backup diferencial falha
  • Backup Incremental FAIL em {HOST.NAME}: inicia um alerta de gravidade de aviso quando uma tarefa de backup incremental falha

Configuração

Template Zabbix

Faça o download do template xml (zip) e importe-o para o seu servidor Zabbix.

Prossiga com a instalação do script nas máquinas com Bacula à seguir. Posteriormente, o modelo do Zabbix deverá ser fornecido a cada um desses hosts. Cada host configurado no Zabbix com este modelo vinculado precisa ter seu nome igual ao nome configurado no recurso Cliente do Bacula. Caso contrário, os dados coletados pelo script bash não serão recebidos pelo servidor Zabbix.

Script Zabbix Servidor Bacula

Instale o Zabbix Sender. Ele será necessário para o envio de informações ao Zabbix.

Crie o arquivo de configuração /opt/bacula/etc/bacula-zabbix.conf com o seguinte conteúdo. Modifique com as informações de seu ambiente:

### BACULA CONFIG ###

# Use 'M' for MySQL
# Use 'P' for PostgreSQL
baculaDbSgdb='P'

# IP address or FQDN of database server
baculaDbAddr='127.0.0.1'

# TCP port of database server
baculaDbPort='5432'

# Name of the database used by Bacula
baculaDbName='bacula'

# User used by Bacula on it's database
baculaDbUser='bacula'

# Password used by Bacula on it's database
baculaDbPass=''

### ZABBIX CONFIG ###

# IP address or FQDN of Zabbix server
zabbixSrvAddr='192.168.37.200'

# TCP port of Zabbix server
zabbixSrvPort='10051'

# Path to zabbix_sender command
zabbixSender='/usr/bin/zabbix_sender'

Forneça permissões ao usuário Bacula ao arquivo .conf criado.

chown root:bacula /opt/bacula/etc/bacula-zabbix.conf
chmod 640 /opt/bacula/etc/bacula-zabbix.conf

Crie o arquivo de script bash /opt/bacula/scripts/bacula-zabbix.bash, com o conteúdo que segue.

#!/bin/bash

# Import configuration file
source /opt/bacula/etc/bacula-zabbix.conf

# Get Job ID from parameter
baculaJobId="$1"
if [ -z $baculaJobId ] ; then exit 3 ; fi

# Test if zabbix_sender exists and execute permission is granted, if not, exit
if [ ! -x $zabbixSender ] ; then exit 5 ; fi

# Chose which database command to use
case $baculaDbSgdb in
  P) sql="PGPASSWORD=$baculaDbPass /usr/bin/psql -h$baculaDbAddr -p$baculaDbPort -U$baculaDbUser -d$baculaDbName -c" ;;
  M) sql="/usr/bin/mysql -NB -h$baculaDbAddr -P$baculaDbPort -u$baculaDbUser -p$baculaDbPass -D$baculaDbName -e" ;;
  *) exit 7 ;;
esac

# Get Job type from database, then if it is a backup job, proceed, if not, exit
baculaJobType=$($sql "select Type from Job where JobId=$baculaJobId;" 2>/dev/null)
if [ "$baculaJobType" != "B" ] ; then exit 9 ; fi

# Get Job level from database and classify it as Full, Differential, or Incremental
baculaJobLevel=$($sql "select Level from Job where JobId=$baculaJobId;" 2>/dev/null)
case $baculaJobLevel in
  'F') level='full' ;;
  'D') level='diff' ;;
  'I') level='incr' ;;
  *)   exit 11 ;;
esac

# Get Job exit status from database and classify it as OK, OK with warnings, or Fail
baculaJobStatus=$($sql "select JobStatus from Job where JobId=$baculaJobId;" 2>/dev/null)
if [ -z $baculaJobStatus ] ; then exit 13 ; fi
case $baculaJobStatus in
  "T") status=0 ;;
  "W") status=1 ;;
  *)   status=2 ;;
esac

# Get client's name from database
baculaClientName=$($sql "select Client.Name from Client,Job where Job.ClientId=Client.ClientId and Job.JobId=$baculaJobId;" 2>/dev/null)
if [ -z $baculaClientName ] ; then exit 15 ; fi

# Initialize return as zero
return=0

# Send Job exit status to Zabbix server
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.status" -o $status >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+1)) ; fi

# Get from database the number of bytes transferred by the Job and send it to Zabbix server
baculaJobBytes=$($sql "select JobBytes from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.bytes" -o $baculaJobBytes >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+2)) ; fi

# Get from database the number of files transferred by the Job and send it to Zabbix server
baculaJobFiles=$($sql "select JobFiles from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.files" -o $baculaJobFiles >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+4)) ; fi

# Get from database the time spent by the Job and send it to Zabbix server
baculaJobTime=$($sql "select timestampdiff(second,StartTime,EndTime) from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.time" -o $baculaJobTime >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+8)) ; fi

# Get Job speed from database and send it to Zabbix server
baculaJobSpeed=$($sql "select round(JobBytes/timestampdiff(second,StartTime,EndTime)/1024,2) from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.speed" -o $baculaJobSpeed >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+16)) ; fi

# Get Job compression rate from database and send it to Zabbix server
baculaJobCompr=$($sql "select round(1-JobBytes/ReadBytes,2) from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.compr" -o $baculaJobCompr >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+32)) ; fi

# Exit with return status
exit $return

Forneça as permissões para a execução do script.

chown bacula:bacula /opt/bacula/scripts/bacula-zabbix.bash
chmod 700 /opt/bacula/scripts/bacula-zabbix.bash

Acrescente as seguintes diretivas no recurso Messages de configuração de seu Director que mandas as mensagens dos Jobs (/opt/bacula/etc/bacula-dir.conf, Messages de nome standard por padrão).

Messages {
  ...
  mailcommand = "/var/spool/bacula/bacula-zabbix.bash %i"
  mail = 127.0.0.1 = all, !skipped
  ...
}

Reinicie o serviço do Director.

service bacula-dir restart

Monitoração dos Clientes Bacula

Edite seus hosts que configuraram tarefas de backup para usar o template do Zabbix. Não esqueça de editar as variáveis com os nomes dos processos do Bacula, e desabilitar nos hosts que são apenas clientes do Bacula os itens que checam os processos do Bacula Director e Storage.

 



Appliance DELL Bacula

15 de Outubro de 2018, 22:46, por Bacula Backup Brasil - 0sem comentários ainda

A solução integrada entre o Bacula e servidores e storages DELL oferece um appliance de backup e recuperação de dados de alta performance para a sua organização. Toda a tecnologia do Bacula homologada em equipamentos exclusivos DELL que garantem a disponibilidade total do serviço, aumento da eficiência da infraestrutura de TI e redução significativa dos custos.

Seja em ambientes físicos, virtuais ou na nuvem; plataforma Windows ou GNU/Linux, o Bacula, em sua versão Enterprise ou Community, oferece as funcionalidades necessárias para garantir a facilidade de gerenciamento e a segurança dos dados armazenados. Além da garantia de 3 anos, instalação on-site e suporte; treinamento in-company do Appliance/Bacula (opcional) são diversos os benefícios:

  • Economia de espaço de armazenamento e uso de banda de rede com a tecnologia de Deduplicação Global (Global Endpoint Deduplication). A deduplicação é fundamental para as empresas que possuem diversas unidades descentralizadas (com filiais em diferentes prédios) por apresentar uma economia de até 99% no trafego e no armazenamento de backup.
  • Gravação dos dados backupeados em formato aberto (não proprietário) permitindo que a organização usuária não seja vítima de aprovisionamento tecnológico.
  • Armazenamento do seu catálogo em formato aberto e em banco de dados padrão SQL, como PostgreSQL, MySQL e Oracle.
  • Capacidade de armazenamento variável: de 10 GigaByte até 1 PetaByte.
  • Descentralização de tarefas de backup e recuperação de dados com a interface BaaS.
  • Controle de acesso para gerenciamento via Active Directory (LDAP).
  • Rápida recuperação de desastres.
  • Console de gerenciamento BWeb (interface gráfica exclusiva do Bacula Enterprise).
  • Maior coleção de plugins do mercado, com integração para VMWARE, VSS, Hyper-V, KVM, XEN, MSSQL, MySQL, Postgresql, Oracle, SAP, Diretórios, Delta, NDMP, Bare Metal para Linux e Windows, e outros.

Quer saber mais? Entre em contato conosco: http://www.bacula.com.br/fale-conosco-geral/



Parceria SimplyTI e EBacula

12 de Outubro de 2018, 16:51, por Bacula Backup Brasil - 0sem comentários ainda

A SimplyTI atua a mais de 15 anos no mercado de tecnologia da informação desenvolvendo projetos para implantação de redes, de soluções de monitoramento e de backup e também, no suporte e administração de banco de dados.

Não é por acaso que a SimplyTI tem grandes parceiras certificadas no mercado como a Dell, Lenovo, Microsoft, IBM e, para as soluções de backup, o Bacula Brasil - distribuidora exclusiva da Bacula Systems na América Latina. Utilizando o hardware HP com o EBacula, a SimplyTI dispõe de servidores, appliance, NAS (network attached storage), robôs de fita.

Além de ter licenças vitalícias e trabalhar com o padrão de gravação de dados aberto, o EBacula possui a interface Bweb que permite uma gestão 100% gráfica das operações do robô de fitas, tais como a rotulagem de fitas novas (label barcodes) e o inventário das fitas pelo bacula (update slots).

Quer saber mais? Entre em contato conosco: http://www.bacula.com.br/fale-conosco-geral/