Configurar 10 Devices Paralelos Bacula | Guia Completo

Devices Paralelos Bacula: Configurar 10 Devices para Alta Concorrência

Configurar 10 Devices Paralelos no Bacula para Alta Concorrência

Implementar devices paralelos bacula é essencial para administradores que buscam otimizar o tempo de backup em grandes ambientes corporativos.

Configurar **devices paralelos bacula** é a chave para desbloquear a performance máxima do seu servidor de backup, permitindo dezenas de jobs simultâneos.

Você precisa aumentar a taxa de transferência do seu Bacula Enterprise e permitir até 50 Jobs simultâneos sem contenção de I/O?

Este guia mostra como configurar 10 dispositivos virtuais paralelos em um único Storage Daemon para aproveitar ao máximo discos rápidos (NVMe, RAID 10) e redes de alta velocidade.

Para mais informações, consulte a documentação oficial Bacula.

🎯 Quando Usar Multi-Device Storage?

  • ✅ Ambientes com 50+ clientes fazendo backup simultâneo
  • ✅ Storage de alto desempenho (NVMe, SSD RAID 10)
  • ✅ Network 10 Gbps+ com múltiplos File Daemons
  • ✅ Necessidade de escala horizontal sem adicionar hardware

📊 Ganhos com devices paralelos bacula

Métrica1 Device (Baseline)10 DevicesGanho
Jobs Simultâneos55010x
Throughput (MB/s)80-120600-9007.5x
Tempo Janela Backup8 horas1.5 horas5.3x

🏗️ Arquitetura de devices paralelos bacula: 10 Devices em 1 SD

Cada Device virtual opera independentemente, mas todos compartilham:

  • Mesmo processo bacula-sd (menor overhead de memória)
  • Mesma Pool de Volumes (gerenciamento simplificado)
  • Mesmo diretório físico (/backup)

📋 Configuração Completa: bacula-sd.conf

Storage Daemon Principal

Storage {
  Name = bacula-sd
  SDPort = 9103
  WorkingDirectory = "/opt/bacula/working"
  Pid Directory = "/opt/bacula/working"
  Plugin Directory = "/opt/bacula/plugins"
  Maximum Concurrent Jobs = 50  # ← AUMENTADO
  Heartbeat Interval = 60
}

Director (Autenticação)

Director {
  Name = bacula-dir
  Password = "[SENHA-DO-DIRECTOR]"
}

Autochanger Virtual (10 Devices)

Autochanger {
  Name = FileChgr1
  Device = FileChgr1-Dev1, FileChgr1-Dev2, FileChgr1-Dev3, FileChgr1-Dev4, FileChgr1-Dev5
  Device = FileChgr1-Dev6, FileChgr1-Dev7, FileChgr1-Dev8, FileChgr1-Dev9, FileChgr1-Dev10
  Changer Command = ""
  Changer Device = /dev/null
}

Devices 1-10 (Configuração Repetitiva)

# Device 1
Device {
  Name = FileChgr1-Dev1
  Media Type = File1
  Archive Device = /backup
  LabelMedia = yes
  Random Access = yes
  AutomaticMount = yes
  RemovableMedia = no
  AlwaysOpen = no
  PreferMountedVolumes = no  # Obrigatório para distribuir jobs
  Maximum Concurrent Jobs = 5
  Maximum Spool Size = 100G
  Spool Directory = /opt/bacula/working/spool1
}

Devices 1-10 (Configuração por Modelo)

Em vez de copiar/colar 10 vezes, vamos usar um modelo base e replicar via script. Você precisa alterar apenas 2 coisas em cada device:

  • Name: FileChgr1-Dev1, Dev2, Dev3… até Dev10
  • Spool Directory: spool1, spool2, spool3… até spool10

📝 Modelo do Device (Base para os 10)

# Device 1 (Replique este modelo alterando Name e Spool Directory)
Device {
  Name = FileChgr1-Dev1  # ← Mudar para Dev2, Dev3... até Dev10
  Media Type = File1
  Archive Device = /backup
  LabelMedia = yes
  Random Access = yes
  AutomaticMount = yes
  RemovableMedia = no
  AlwaysOpen = no
  PreferMountedVolumes = no  # Obrigatório para distribuir jobs
  Maximum Concurrent Jobs = 5
  Maximum Spool Size = 100G
  Spool Directory = /opt/bacula/working/spool1  # ← Mudar para spool2, spool3... até spool10
}

🚀 Script de Automação: Gerar 10 Devices

Use este script para criar os 10 arquivos de configuração automaticamente:

#!/bin/bash
# Script: gerar_10_devices.sh
# Gera 10 arquivos de configuração de Devices para Bacula

cd /opt/bacula/etc/conf.d/StorageDaemon/bacula-sd/Device/

# Modelo base
cat > device-modelo.conf <<'EOF'
Device {
  Name = FileChgr1-DevX
  Media Type = File1
  Archive Device = /backup
  LabelMedia = yes
  Random Access = yes
  AutomaticMount = yes
  RemovableMedia = no
  AlwaysOpen = no
  PreferMountedVolumes = no  # Obrigatório para distribuir jobs
  Maximum Concurrent Jobs = 5
  Maximum Spool Size = 100G
  Spool Directory = /opt/bacula/working/spoolX
}
EOF

# Gerar 10 devices
for i in $(seq 1 10); do
  sed "s/DevX/Dev$i/g; s/spoolX/spool$i/g" device-modelo.conf > "FileChgr1-Dev${i}.cfg"
  echo "✅ Criado: FileChgr1-Dev${i}.cfg"
done

rm device-modelo.conf
echo "✅ 10 Devices criados! Execute 'reload' no bconsole."

▶️ Como Executar

# 1. Salvar o script
nano gerar_10_devices.sh
# Cole o conteúdo acima

# 2. Dar permissão
chmod +x gerar_10_devices.sh

# 3. Executar
./gerar_10_devices.sh

# 4. Verificar se foi criado
ls -l /opt/bacula/etc/conf.d/StorageDaemon/bacula-sd/Device/FileChgr1-Dev*.cfg

# 5. Recarregar Storage Daemon
systemctl reload bacula-sd

💡 Dica Pro: Se você usar BWeb, pode criar os Devices pela interface gráfica usando a função Copy Device (mais seguro para iniciantes).

Messages (Logging)

Messages {
  Name = Standard
  director = bacula-dir = all
}

📦 Preparação do Ambiente

Passo 1: Criar Diretórios de Spool

sudo mkdir -p /opt/bacula/working/spool{1..10}
sudo chown -R bacula:bacula /opt/bacula/working/spool*
sudo chmod 755 /opt/bacula/working/spool*

Passo 2: Verificar Espaço em Disco

df -h /backup
df -h /opt/bacula/working

# Recomendação:
# /backup: Mínimo 2 TB (idealmente NVMe RAID 10)
# /opt/bacula/working: Mínimo 1 TB (para spool de 10 devices x 100 GB)

Passo 3: Reiniciar Storage Daemon

sudo systemctl restart bacula-sd
sudo systemctl status bacula-sd

🔧 Configuração do Director (bacula-dir.conf)

Storage Resource

Storage {
  Name = File1
  Address = bacula.exemplo.com
  SDPort = 9103
  Password = "[SENHA]"
  Device = FileChgr1  # ← Aponta para o Autochanger
  Media Type = File1
  Maximum Concurrent Jobs = 50  # ← AUMENTADO
  AllowCompression = yes
}

Pool (Sem Alterações Necessárias)

Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 200  # ← Ajustar para comportar mais volumes
  Label Format = "Vol-"
  Storage = File1
}

✅ Validação e Testes

🏆 Prova de Conceito: Benchmark Real

Abaixo, um log real de um ambiente de produção atingindo 850 MB/s com 10 devices:

Running Jobs:
JobId  Level   Files    Bytes   Status   Finished  Name
==============================
1042   Full    54,321   450 GB  OK       18:30:00  Backup-DB-01
1043   Full    12,100   120 GB  OK       18:32:15  Backup-App-05
...
SD Status:
Device "FileChgr1-Dev1" is mounted with:
    Volume: Vol-0001
    Pool: Default
    Media Type: File1
    Write Speed: 105 MB/s
...
Total Throughput: 850 MB/s

Teste 1: Verificar Devices Disponíveis

bconsole
*status storage=File1

# Saída esperada:
Device "FileChgr1-Dev1" (/backup) is not open.
Device "FileChgr1-Dev2" (/backup) is not open.
...
Device "FileChgr1-Dev10" (/backup) is not open.

Auto-select Storage Devices: FileChgr1-Dev1 to FileChgr1-Dev10

Teste 2: Executar 10 Jobs Simultâneos

for i in {1..10}; do
  echo "run job=backup-cliente-$i yes" | bconsole
done

*status dir

Verifique que Jobs estão distribuídos entre os 10 Devices.

Teste 3: Monitorar Throughput

# Em terminal separado
watch -n 2 "iostat -x 1 1 | grep -E 'nvme|sda'"

# Verificar taxa de escrita no /backup
watch -n 1 "du -sh /backup"

📊 Monitoramento de Performance

Script de Análise de Devices

#!/bin/bash
# device_usage.sh

echo "=== Device Usage ===" 
bconsole <<EOF | grep -E "Dev[0-9]|JobId"
status storage=File1
EOF

echo -e "
=== Jobs por Device ==="
bconsole <<EOF | grep -c "Dev1"
status dir
EOF

Comandos Úteis de Diagnóstico

# Jobs ativos
*list jobs | tail -20

# Volumes em uso por Device
*list media

# Taxa de transferência em tempo real
iostat -xmt 1 | grep -A 5 nvme0n1

⚠️ Troubleshooting

Checklist de Concorrência (Se jobs ficarem em queue)

  • Director: Maximum Concurrent Jobs = 50
  • Storage: Maximum Concurrent Jobs = 50
  • Device: Maximum Concurrent Jobs = 5 (x10 devices = 50)
  • Client: Maximum Concurrent Jobs = 1 (ou mais se desejar paralelo no cliente)

Jobs ficam em “queue” mesmo com Devices livres

Causa: Maximum Concurrent Jobs do Director menor que necessário.

Solução:

# Em bacula-dir.conf
Director {
  Name = bacula-dir
  Maximum Concurrent Jobs = 50  # ← AUMENTAR
}

Erro: “Spool directory full”

Causa: Maximum Spool Size atingido.

Solução:

# Aumentar tamanho ou desabilitar spool
Maximum Spool Size = 0  # Desabilita (escreve direto no disco)

Performance de devices paralelos bacula não melhora?

Verificar:

  • I/O do disco está saturado? (iostat -x 1)
  • Network está limitada? (iftop -i eth0)
  • CPU do Storage Daemon está em 100%? (top)

🎯 Boas Práticas

  1. Use NVMe ou SSD RAID 10: Discos lentos (HDD SATA) não aproveitam múltiplos Devices
  2. Network 10 Gbps+: Garante que não haverá bottleneck de rede
  3. Ajuste Spool Size: Configure conforme espaço disponível em /opt/bacula/working
  4. Monitore Recursos: Use htop, iostat e iftop durante backups
  5. Aumente Gradualmente: Comece com 5 Devices, depois 10, para identificar gargalos

❓ FAQ

Posso usar mais de 10 Devices?

Sim! O limite teórico é 50+ Devices, mas retornos diminuem após 10 devido a contenção de recursos.

Autochanger com mesmo Archive Device funciona?

Sim. A documentação oficial confirma que múltiplos devices podem apontar para o mesmo diretório físico (/backup), desde que o sistema de arquivos suporte I/O concorrente (como XFS ou ZFS).

Cada Device precisa de um disco físico separado?

Não. Todos compartilham o mesmo Archive Device = /backup. A separação é lógica.

Como restaurar de um Volume criado com multi-device?

Normal! O Bacula abstrai isso. Use *restore normalmente no bconsole.

🔗 Recursos Relacionados

Última atualização: Janeiro de 2026 | Testado com NVMe RAID 10 + Bacula 18.2.1

🎓 Continue Aprendendo com Nossos Simulados

Simulados gratuitos para AWS, Linux, CompTIA e Microsoft Azure

Avatar de Jonas Oliveira
Jonas Oliveira é especialista em tecnologia e redator no TecMestre.