*Atualizado com fork do rclone-changer compatível com Python 3.5 e superior para evitar falha na criação de volumes com o label barcodes.

Este tutorial objetiva implantar um dispositivo de Storage Bacula na nuvem, usando rclone  (https://rclone.org/) e o script rclone-changer (https://github.com/wanderleihuttel/rclone-changer). O último, apresenta fitas virtuais armazenadas na nuvem como uma espécie de VTL para o Bacula. O serviço Amazon S3 foi utilizado neste manual, mas temos notícias de funcionamento na Oracle Cloud e Google Drive. Deve funcionar também em todos os storage de núvem informados pelo rclone: Amazon Drive, Amazon S3, Backblaze B2, Box, Ceph, Dreamhost, Dropbox, FTP Google Cloud Storage, Google Drive, HTTP, Hubic, Memset Memstore, Microsoft Azure Blob Storage, Microsoft OneDrive, Minio, OVH, Openstack Swift, Oracle Cloud Storage, QingStor, Rackspace Cloud Files, SFTP, Wasabi, Yandex Disk e sistema de arquivo local.

Funcionalidades do Rclone:

  • Hashes MD5 / SHA1 verificados o tempo todo para verificação de integridade do arquivo
  • Timestamps preservados em arquivos
  • Sincronismos parciais suportados em todo o arquivo
  • Modo de cópia para simplesmente copiar arquivos novos/alterados
  • Modo de sincronização (ida) para fazer um diretório idêntico
  • Modo de verificação para verificar a igualdade do arquivo hash
  • Pode sincronizar de e para a rede, por exemplo, duas contas da nuvem diferentes
  • Criptografia opcional (Crypt)
  • Montagem FUSE opcional (rclone mount)

Instalação e Configuração do Rclone

Como root, basta executar os seguintes comandos:

yum -y install unzip wget
wget -qO- https://downloads.rclone.org/rclone-current-linux-amd64.zip -O /tmp/tmp.zip; unzip /tmp/tmp.zip -d /usr/src; rm -f /tmp/tmp.zip
cd /usr/src/rclone-v*
cp rclone /usr/bin/
chown root:root /usr/bin/rclone
chmod 755 /usr/bin/rclone
mkdir -p /usr/local/share/man/man1
cp rclone.1 /usr/local/share/man/man1/
mandb

Agora é hora de acessar seu armazenamento em nuvem e buscar credenciais de acesso programático.

Já que estou usando o Amazon S3, devo acessar pela console AWS o serviço de identificação IAM, criar e usuário, conceder direitos para o serviço S3 e gerar uma chave de acesso e segredo (Access Key ID e Secret key). Copie-os para um bloco de notas, pois precisaremos adiante para configurar o Rclone. Essas etapas são mostradas nas seguintes capturas de tela:

Bacula Storage em Qualquer Nuvem com Rclone e Rclone-changer 1 Bacula Storage em Qualquer Nuvem com Rclone e Rclone-changer 2 Bacula Storage em Qualquer Nuvem com Rclone e Rclone-changer 3

Para gerar a configuração do rclone, use o seguinte comando como root:

rclone config

Siga as instruções detalhadas da documentação do rclone para configurar o armazenamento de nuvem favorito: https://rclone.org/docs/

Depois de fornecer um nome para este acesso e responder a todas as outras questões adicionais, a configuração do rclone salvará a configuração em: /root/.config/rclone/rclone.conf

No meu exemplo, aws era o nome da minha configuração remota e esta era a saída:

[aws]
env_auth = true
access_key_id = AKIAIFTEYM3JK5VUXGBA
secret_access_key = hjqF6wG/tNBqgpBbwBmQ3EQpok5U33W2ewSXD
region = sa-east-1 
endpoint = 
location_constraint = 
acl = private
server_side_encryption = 
storage_class =

É muito importante acessar acesso rclone à nuvem. Execute alguns comandos de teste da seguinte maneira:

# Listar os buckets:
rclone lsd aws:
root@hfaria-asus-i5:/# rclone lsd aws:
          -1 2014-10-01 20:27:41        -1 baculaheitor

# Se não existir, cria um bucket:
rclone mkdir aws:new_bucket_name

# Lista conteúdo de um bucket:
rclone ls aws:baculaheitor

  6311 logs/2014-10-02-01-17-25-7F0DBBBFD43A20B7
     2721 logs/2014-10-02-01-17-31-BFC439050C2B0AA9
      666 logs/2014-10-02-02-17-36-D47447EC8F6759EE
     2079 logs/2014-10-02-02-17-47-24DD21E3B85C5CAF
    40108 logs/2014-10-02-03-17-10-4E9B7A829CEC7842

# Testa a cópia de um diretório para um bucket:
rclone copy /etc aws:baculaheitor

# Testa a cópia de um diretório a partir do bucket:
rclone copy aws:baculaheitor /tmp

Finalmente, copie a versão da configuração funcional para o caminho que o trocador de rclone espera, da seguinte maneira:

cp ~/.config/rclone/rclone.conf /opt/bacula/etc/rclone.conf
chown bacula /opt/bacula/etc/rclone.conf

É hora de implantar o rclone-changer.

Instalação e Configuração do Rclone-changer

Instale as dependências python e python-yaml:

apt install -y python python-yaml
# ou 
yum install -y python python-yaml

Baixe o rclone-changer e crie pastas necessárias:

wget https://github.com/wanderleihuttel/rclone-changer/archive/master.zip -O /tmp/tmp.zip; unzip /tmp/tmp.zip -d /usr/src; rm -f /tmp/tmp.zip
cp /usr/src/rclone-changer-master/rclone-changer /usr/sbin/
chmod +rx /usr/sbin/rclone-changer
chown bacula /opt/bacula/working

Em seguida, crie a pasta e o arquivo que hospedarão a gravação de fita virtual. Crie também um diretório para o spool local de disco do Bacula, pois é aconselhável para backups mais rápidos e uma cópia mais segura para a nuvem, da seguinte maneira:

mkdir /mnt/vtapes & touch /mnt/vtapes/tape & chown -R bacula /mnt/vtapes/
mkdir /mnt/bacula-spool & chown bacula /mnt/bacula-spool

Adicione um dispositivo semelhante ao arquivo Bacula Storage Daemon Configuration (bacula-sd.conf):

Autochanger {
  Name = "rclone_aws"
  Device = aws
  Changer Device = 'aws:baculaheitor' # configuração remote do rclone e bucket de gravação. Pode também especificar um diretório no bucket
  Changer Command = "/usr/sbin/rclone-changer %c %o %S %a" # não mude isso
}

Device {
  Name = aws
  Media Type = aws
  Maximum Changer Wait = 18000 # pode ser necessário mudar de acordo com o tamanho dos volumes 
  Archive Device = /mnt/vtapes/tape # precisa corresponder ao arquivo criado no passo anterior
  Autochanger = yes
  LabelMedia = yes;                  
  Random Access = Yes
  AutomaticMount = no             
  RemovableMedia = no
  AlwaysOpen = no
  Spool Directory = /mnt/bacula-spool
  Maximum Spool Size = 524288000
}

Agora, amarre o novo dispositivo Storage Daemon ao seu Diretor e também crie um Pool para ele:

Autochanger {
  Name = Cloud_aws
  Address = sd_address                
  SDPort = 9103
  Password = "EKPNGPoIe7wXO/oe6xwm9cXzHDgmiuS0qF3hyAhpEg+i"
  Device = rclone_aws
  Media Type = aws
  Autochanger = Cloud_aws            
  Maximum Concurrent Jobs = 10       
}

Pool {
  Name = Offsite
  Pool Type = Backup
  Recycle = yes                       
  AutoPrune = yes                    
  Storage = Cloud_aws
  Maximum Volume Bytes = 1073741824 # recomendado
  AutoPrune = yes
  Volume Retention = 4 weeks
}

É importante ter em mente as considerações do desenvolvedor se desejar mudar o Maximum Volume Bytes:

Recomenda-se que você use muitos volumes pequenos em vez de grandes. Tente permanecer em um tamanho que seu arquivo médio se encaixa sem ficar muito pequeno. O raciocínio aqui está em uma situação de recuperação se você estiver trabalhando em volumes que você deseja minimizar a quantidade de dados não relacionados a determinado job de backup que você precisa copiar localmente para se recuperar. Se você possui uma fita virtual de 10G e precisa apenas de 500M, você ainda precisa esperar para que o 10G completo seja baixado antes que você consiga recuperar dados. Portanto, se seu tamanho de arquivo típico for em média 700M, os volumes de 1G provavelmente são uma boa idéia.[https://github.com/travisgroth/rclone-changer]

Edite e verifique se a versão do python e os diretórios do rclone-changer estão corretos e o usuário bacula do Linux possui permissão para escrever nos mesmos. É possível também mudar o número slots (fitas virtuais) que seu robô virtual terá.

vi /usr/sbin/rclone-changer

#!/usr/bin/env python
...
    #=====================================================
    # Default params config
    #=====================================================
    rclone     = '/usr/bin/rclone'
    config     = '/opt/bacula/etc/rclone.conf'
    logFile    = '/opt/bacula/working/rclone.log'
    logChanger = '/opt/bacula/working/rclone-changer.log'
    lockFile   = '/opt/bacula/working/.rclonelock'
    stateFile  = '/opt/bacula/working/rclone-changer.state'
    slots      = 100
    #=====================================================

Então, crie rótulos de Bacula de fita virtual. Use o bconsole para isso:

label barcodes storage=Cloud_aws pool=Offsite

Se tiver problemas para rotular as fitas virtuais, verifique todos os comandos anteriores e concessões de permissão. Para reiniciar o VTL e tentar novamente, elimine o arquivo vtape e rclone-change state.

rm -f /mnt/vtapes/tape*
rm -f /opt/bacula/working/rclone-changer.state
touch /mnt/vtapes/tape & chown -R bacula /mnt/vtapes/

Tudo feito! Execute um Job de backup de teste na Pool Offsite e crie rotinas do Schedule para a nuvem, de acordo com suas necessidades. As fitas virtuais serão alteradas e carregadas na nuvem automagicamente, como nas seguintes capturas de tela:

Bacula Storage em Qualquer Nuvem com Rclone e Rclone-changer 4 Bacula Storage em Qualquer Nuvem com Rclone e Rclone-changer 5

Resolução de Problemas do Rclone-changer

Estes são os locais onde o rclone e o rclone-changer salvam suas mensagens de log:

cat /opt/bacula/working/rclone.log
cat /opt/bacula/working/rclone-changer.log

 

Disponível em: pt-brPortuguês enEnglish (Inglês) esEspañol (Espanhol)

Fechar Menu