rdiff-backup - Uma ferramenta de backup incremental remoto para Linux
rdiff-backup é um script Python poderoso e fácil de usar para backup incremental local/remoto, que funciona em qualquer sistema operacional POSIX, como Linux, Mac OS X ou Cygwin. Ele reúne os recursos notáveis de um espelho e um backup incremental.
Significativamente, ele preserva subdiretórios, arquivos de desenvolvimento, links físicos e atributos críticos de arquivo, como permissões, propriedade de uid/gid, tempos de modificação, atributos estendidos, ACLs e bifurcações de recursos. Ele pode funcionar em modo de uso eficiente de largura de banda em um canal, de maneira semelhante à popular ferramenta de backup rsync.
rdiff-backup faz backup de um único diretório para outro através de uma rede usando SSH, o que implica que a transferência de dados é criptografada e, portanto, segura. O diretório de destino (no sistema remoto) acaba sendo uma cópia exata do diretório de origem, porém diferenças reversas extras são armazenadas em um subdiretório especial no diretório de destino, tornando possível recuperar arquivos perdidos há algum tempo.
Dependências
Para usar o rdiff-backup no Linux, você precisará dos seguintes pacotes instalados em seu sistema:
- Python v2.2 ou posterior
- librsync v0.9.7 ou posterior
- Os módulos Python pylibacl e pyxattr são opcionais, mas necessários para lista de controle de acesso (ACL) POSIX e suporte estendido a atributos, respectivamente.
- rdiff-backup-statistics requer Python v2.4 ou posterior.
Como instalar o rdiff-backup no Linux
Importante: Se você estiver operando em uma rede, você terá que instalar o rdiff-backup em ambos os sistemas, de preferência ambas as instalações do rdiff-backup terão que ser exatamente iguais mesma versão.
O script já está presente nos repositórios oficiais das principais distribuições Linux, basta executar o comando abaixo para instalar o rdiff-backup bem como suas dependências:
Instale o rdiff-backup no Ubuntu
Para instalar o Rdiff-Backup no Ubuntu Focal ou Debian Bullseye ou mais recente (tem 2.0).
sudo apt-get update
sudo apt-get install librsync-dev rdiff-backup
Para instalar o Rdiff-Backup em backports do Ubuntu para versões mais antigas (é necessário um backport 2.0).
sudo add-apt-repository ppa:rdiff-backup/rdiff-backup-backports
sudo apt update
sudo apt install rdiff-backu
No CentOS/RHEL 8
Para instalar o Rdiff-Backup no CentOS e RHEL 8 (do COPR).
sudo yum install yum-plugin-copr epel-release
sudo yum copr enable frankcrawford/rdiff-backup
sudo yum install rdiff-backup
No CentOS/RHEL 7
Para instalar o Rdiff-Backup no CentOS e RHEL 7 (do COPR).
sudo yum install yum-plugin-copr epel-release
sudo yum copr enable frankcrawford/rdiff-backup
sudo yum install rdiff-backup
No CentOS/RHEL 6
sudo yum install centos-release-scl
sudo yum install rh-python36 gcc libacl-devel
scl enable rh-python36 bash
sudo pip install rdiff-backup pyxattr pylibacl
echo 'exec scl enable rh-python36 -- rdiff-backup "$@"' | sudo tee /usr/bin/rdiff-backup
sudo chmod +x /usr/bin/rdiff-backup
No Fedora
Para instalar o Rdiff-Backup no Fedora 32+.
sudo dnf install rdiff-backup
Como usar backup rdiff no Linux
Como mencionei antes, rdiff-backup usa SSH para se conectar a máquinas remotas em sua rede, e a autenticação padrão em SSH é o método nome de usuário/senha, que normalmente requer interação humana.
No entanto, para automatizar tarefas como backups automáticos com scripts e muito mais, você precisará configurar o login sem senha SSH usando chaves SSH, porque as chaves SSH aumentam a confiança entre dois servidores Linux para facilitar a sincronização ou transferência de arquivos.
Depois de configurar o login sem senha SSH, você pode começar a usar o script com os exemplos a seguir.
Backup de arquivos para partição diferente
O exemplo abaixo fará backup do diretório /etc
em um diretório Backup em outra partição:
sudo rdiff-backup /etc /media/aaronkilik/Data/Backup/mint_etc.backup
Para excluir um diretório específico, bem como seus subdiretórios, você pode usar a opção --exclude
da seguinte forma:
sudo rdiff-backup --exclude /etc/cockpit --exclude /etc/bluetooth /media/aaronkilik/Data/Backup/mint_etc.backup
Podemos incluir todos os arquivos de dispositivos, arquivos fifo, arquivos de soquete e links simbólicos com a opção --include-special-files
conforme abaixo:
sudo rdiff-backup --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup
Existem dois outros sinalizadores importantes que podemos definir para seleção de arquivos; --max-file-size
tamanho que exclui arquivos maiores que o tamanho determinado em bytes e --min-file-size
tamanho que exclui arquivos menores que o tamanho fornecido em bytes:
sudo rdiff-backup --max-file-size 5M --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup
Faça backup de arquivos remotos no servidor Linux local
Para os fins desta seção, usaremos:
Remote Server (tecmint) : 192.168.56.102
Local Backup Server (backup) : 192.168.56.10
Como afirmamos anteriormente, você deve instalar a mesma versão do rdiff-backup em ambas as máquinas, agora tente verificar a versão em ambas as máquinas da seguinte forma:
rdiff-backup -V
No servidor de backup, crie um diretório que armazenará os arquivos de backup assim:
mkdir -p /backups
Agora, no servidor de backup, execute os seguintes comandos para fazer um backup dos diretórios /var/log/
e /root
do servidor Linux remoto 192.168.56.102 em /backups
:
rdiff-backup [email ::/var/log/ /backups/192.168.56.102_logs.backup
rdiff-backup [email ::/root/ /backups/192.168.56.102_rootfiles.backup
A captura de tela abaixo mostra o arquivo raiz no servidor remoto 192.168.56.102 e os arquivos de backup no servidor traseiro 192.168.56.10:
Anote o diretório rdiff-backup-data criado no diretório backup
conforme visto na captura de tela, ele contém dados vitais sobre o processo de backup e arquivos incrementais.
Agora, no servidor 192.168.56.102, arquivos adicionais foram adicionados ao diretório raiz conforme mostrado abaixo:
Vamos executar o comando backup mais uma vez para obter os dados alterados, podemos usar a opção -v[0-9]
(onde o número especifica o nível de verbosidade, o padrão é 3 que é silencioso) para defina o recurso de verbosidade:
rdiff-backup -v4 [email ::/root/ /backups/192.168.56.102_rootfiles.backup
E para listar o número e a data dos backups incrementais parciais contidos no diretório /backups/192.168.56.102_rootfiles.backup, podemos executar:
rdiff-backup -l /backups/192.168.56.102_rootfiles.backup/
Automatizando backup rdiff-back usando Cron
Podemos imprimir estatísticas resumidas após um backup bem-sucedido com --print-statistics
. No entanto, se não definirmos esta opção, as informações ainda estarão disponíveis no arquivo de estatísticas da sessão. Leia mais sobre esta opção na seção STATISTICS da página man.
E o sinalizador –remote-schema nos permite especificar um método alternativo de conexão a um computador remoto.
Agora, vamos começar criando um script backup.sh
no servidor de backup 192.168.56.10 da seguinte forma:
cd ~/bin
vi backup.sh
Adicione as seguintes linhas ao arquivo de script.
#!/bin/bash
#This is a rdiff-backup utility backup script
#Backup command
rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server --restrict-read-only /"' [email ::/var/logs /backups/192.168.56.102_logs.back
#Checking rdiff-backup command success/error
status=$?
if [ $status != 0 ]; then
#append error message in ~/backup.log file
echo "rdiff-backup exit Code: $status - Command Unsuccessful" >>~/backup.log;
exit 1;
fi
#Remove incremental backup files older than one month
rdiff-backup --force --remove-older-than 1M /backups/192.168.56.102_logs.back
Salve o arquivo, saia e execute o seguinte comando para adicionar o script ao crontab no servidor de backup 192.168.56.10:
crontab -e
Adicione esta linha para executar seu script de backup diariamente à meia-noite:
0 0 * * * /root/bin/backup.sh > /dev/null 2>&1
Salve o crontab e feche-o, agora automatizamos com sucesso o processo de backup. Certifique-se de que esteja funcionando conforme o esperado.
Leia a página man do rdiff-backup para obter informações adicionais, opções de uso exaustivas e exemplos:
man rdiff-backup
Página inicial do rdiff-backup: http://www.nongnu.org/rdiff-backup/
Por enquanto é isso! Neste tutorial, mostramos como instalar e basicamente usar o rdiff-backup, um script Python fácil de usar para backup incremental local/remoto no Linux. Compartilhe suas idéias conosco por meio da seção de comentários abaixo.