Aula 28: Backup no Linux — rsync, tar e estratégias de recuperação

Aula 28: Backup no Linux — rsync, tar e estratégias de recuperação

Nesta aula avançada do curso Linux — Do Zero ao Avançado, você vai dominar as ferramentas mais importantes para implementar backup no Linux de forma profissional e confiável: os utilitários rsync e tar, além de estratégias de recuperação que evitam perda de dados em servidores de produção. O backup no Linux não é apenas uma tarefa de copiar arquivos; trata-se de projetar um fluxo de trabalho que preserve a integridade, a disponibilidade e a confidencialidade das informações, atendendo a requisitos de continuidade de negócio. Em nossos projetos na JRT Technology Solutions, implementamos rotinas de backup para servidores de missão crítica, e consideramos o domínio dessas ferramentas um divisor de águas para qualquer administrador de sistemas.

Ao longo desta aula, você entenderá por que o backup no Linux exige planejamento prévio, conhecimento dos tipos de backup — completo, incremental e diferencial — e domínio de opções avançadas como retenção, compressão, sincronização remota e agendamento automático. Vamos partir dos fundamentos teóricos, instalar e configurar as ferramentas em duas famílias de distribuições — Ubuntu/Debian e CentOS/RHEL/Rocky Linux — e executar procedimentos reais, com comandos linha por linha e as respectivas saídas esperadas no terminal.

Esta aula é essencial porque um backup mal planejado pode ser tão inútil quanto a ausência de backup. Um arquivo tar corrompido, uma sincronização rsync com a opção –delete mal utilizada ou uma política de retenção inexistente podem transformar uma rotina aparentemente segura em um desastre silencioso. Por isso, cada etapa apresentada aqui foi validada em laboratório e segue as boas práticas que nossos especialistas da JRT Technology Solutions utilizam diariamente em ambientes críticos.

Antes de começar, certifique-se de que você concluiu as aulas anteriores do curso, especialmente aquelas sobre permissões de arquivos, processos, serviços e rede. Você precisará de acesso root ou de um usuário com privilégios sudo, além de um diretório de destino para os backups. Ao final desta aula, você será capaz de criar backups manuais e automatizados, recuperar dados de forma controlada, sincronizar diretórios localmente e via SSH, e diagnosticar os erros mais comuns nesse processo.

O que você vai aprender nesta aula

Esta aula foi estruturada para levar você do entendimento conceitual à implementação prática de uma política de backup no Linux. Ao concluir todas as seções, você terá adquirido as seguintes competências:

  • Compreender os tipos de backup — completo, incremental e diferencial — e escolher a estratégia correta para cada cenário.
  • Instalar e configurar os utilitários tar e rsync em Ubuntu/Debian e CentOS/RHEL/Rocky Linux.
  • Utilizar o tar para criar arquivos compactados, listar conteúdo e restaurar diretórios inteiros com opções avançadas de exclusão e preservação de metadados.
  • Utilizar o rsync para sincronização local e remota, com compressão, preservação de permissões, modo dry-run e sincronização baseada em hard links.
  • Automatizar rotinas de backup por meio de scripts Bash e agendamento com cron.
  • Verificar a integridade e o conteúdo dos backups gerados, além de testar restaurações seguras.
  • Diagnosticar e corrigir os erros mais frequentes, como permissões insuficientes, espaço em disco esgotado, falhas de conexão SSH e problemas de agendamento.

Pré-requisitos e Ambiente

Para acompanhar esta aula na prática, você precisará de um ambiente Linux com acesso administrativo. Recomendamos duas máquinas virtuais ou contêineres: uma executando Ubuntu Server 22.04/24.04 ou Debian 12 e outra com CentOS Stream 9, RHEL 9 ou Rocky Linux 9. Embora seja possível executar os exemplos em uma única máquina, o uso de duas distribuições diferentes ajudará você a perceber as pequenas diferenças de gerenciamento de pacotes e caminhos padrão.

Os utilitários tar e rsync costumam estar pré-instalados na maioria das distribuições, mas nesta aula vamos forçar a instalação explícita para garantir que você tenha as versões mais recentes e aprenda o procedimento de provisionamento em um servidor recém-implantado. Você também precisará de um diretório de destino com espaço livre suficiente. Em nossos laboratórios na JRT Technology Solutions, utilizamos pelo menos 20 GB para testes de backup local e sincronização remota.

Além disso, verifique os seguintes itens antes de prosseguir:

  • Acesso root ou sudo configurado corretamente.
  • Rede funcional entre as máquinas, caso pretenda testar o rsync remoto via SSH.
  • Serviço OpenSSH instalado e ativo no servidor remoto (systemctl status sshd no RHEL/Rocky ou systemctl status ssh no Ubuntu/Debian).
  • Conhecimento básico de edição de arquivos com nano ou vim, pois criaremos um script completo.

Fundamentos de Backup no Linux: tipos, periodicidade e retenção

Antes de executar qualquer comando, é crucial entender que backup no Linux não é uma ação isolada, mas um processo contínuo que envolve decisões sobre o que copiar, quando copiar, onde armazenar e por quanto tempo reter. A escolha do tipo de backup impacta diretamente o consumo de espaço, o tempo de execução e a janela de recuperação disponível. Existem três tipos principais de backup, cada um com características, vantagens e desvantagens próprias.

O backup completo copia todos os dados selecionados para o destino, independentemente de terem sido alterados desde a última execução. Ele é a base de qualquer estratégia, pois permite a restauração total em um único passo. O backup incremental copia apenas os arquivos que mudaram desde o último backup — completo ou incremental. Ele economiza espaço e tempo, mas a restauração exige a aplicação de uma cadeia de backups, o que pode aumentar a complexidade. Já o backup diferencial copia os arquivos alterados desde o último backup completo, tornando a restauração mais simples que o incremental, porém com maior consumo de espaço ao longo do ciclo.

A tabela abaixo resume as diferenças e ajuda na escolha da estratégia mais adequada:

Tipo de Backup O que copia Restauração Consumo de espaço Ferramenta típica no Linux
Completo Todos os dados selecionados Simples, direto do último completo Alto tar, rsync
Incremental Somente alterações desde o último backup (completo ou incremental) Complexa, exige cadeia de backups Baixo rsync com hard links, tar com --incremental
Diferencial Alterações desde o último backup completo Moderada, exige completo + último diferencial Médio rsync com --link-dest, scripts customizados

Além do tipo, a periodicidade define o quão recente é a cópia de segurança. Em servidores de banco de dados, por exemplo, podem ser necessários backups diários ou até horários, enquanto servidores de arquivos estáticos podem tolerar periodicidade semanal. A retenção, por sua vez, determina por quanto tempo os backups são mantidos, evitando que o armazenamento transborde. Uma política comum é manter backups diários por 7 dias, semanais por 4 semanas e mensais por 12 meses.

Em nossos projetos na JRT Technology Solutions, sempre alinhamos a política de backup com os indicadores de continuidade de negócio: o RPO (Recovery Point Objective) define a perda máxima aceitável de dados, enquanto o RTO (Recovery Time Objective) define o tempo máximo para restauração. Esses indicadores orientam a escolha da ferramenta, a frequência e o formato dos backups.

Instalando e Configurando as Ferramentas (rsync e tar) no Ubuntu/Debian e CentOS/RHEL

Nesta seção, vamos garantir que os utilitários tar e rsync estejam instalados e atualizados em ambas as famílias de distribuições. O tar é o utilitário clássico de arquivamento do Linux, capaz de agrupar múltiplos arquivos e diretórios em um único arquivo, com suporte a compressão via gzip, bzip2 ou xz. O rsync, por outro lado, é especializado em sincronização eficiente, transferindo apenas as diferenças entre origem e destino, o que o torna ideal para backups incrementais e replicação remota.

No Ubuntu/Debian, utilizamos o gerenciador de pacotes apt. No CentOS/RHEL/Rocky Linux, utilizamos o dnf. Execute os comandos a seguir com privilégios administrativos. A primeira atualização dos índices garante que você instale as versões mais recentes disponíveis nos repositórios oficiais.


# Ubuntu / Debian — atualizar índice e instalar rsync e tar
sudo apt update
sudo apt install -y rsync tar

# CentOS / RHEL / Rocky Linux — atualizar cache e instalar rsync e tar
sudo dnf makecache
sudo dnf install -y rsync tar

No Ubuntu, a saída esperada após a instalação exibirá a resolução de dependências e a confirmação de que os pacotes já estão na versão mais recente ou foram instalados. Veja um exemplo real:


Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
rsync is already the newest version (3.2.7-0ubuntu0.22.04.3).
tar is already the newest version (1.34+dfsg-1ubuntu1.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

No CentOS/RHEL/Rocky, a saída será semelhante, porém com o formato do dnf:


Rocky Linux 9 - BaseOS                        1.2 MB/s | 2.3 MB     00:01
Rocky Linux 9 - AppStream                     2.1 MB/s | 6.7 MB     00:03
Dependencies resolved.
================================================================================
 Package              Arch         Version                Repository       Size
================================================================================
 rsync                x86_64       3.2.6-3.el9_2          baseos          411 k
 tar                  x86_64       2:1.34-5.el9           baseos          878 k

Transaction Summary
================================================================================
Install  2 Packages

Total download size: 1.2 M
Installed size: 3.1 M
Downloading Packages:
...
Complete!

Após a instalação, verifique a versão de cada ferramenta para confirmar que estão acessíveis no PATH e funcionais. Esses comandos serão úteis também para auditoria e para garantir que você não está usando uma versão muito antiga com bugs conhecidos.


# Verificar versão do tar
tar --version | head -1

# Verificar versão do rsync
rsync --version | head -1

A saída esperada deve mostrar a versão de cada utilitário, algo como tar (GNU tar) 1.34 e rsync version 3.2.7. A partir deste ponto, todas as operações de backup no Linux podem ser executadas com segurança.

Executando Backup no Linux com tar: arquivamento e compressão passo a passo

O comando tar é a base de grande parte dos backups tradicionais no Linux. Ele permite agrupar diretórios inteiros em um único arquivo, preservando permissões, proprietários, datas e links simbólicos. Quando combinado com compressão, o tar reduz significativamente o espaço ocupado, tornando-o ideal para cópias de segurança de diretórios de configuração como /etc, home de usuários e aplicações com muitos arquivos pequenos.

Antes de executar o backup, crie um diretório de destino para armazenar os arquivos .tar.gz. Em nossos projetos na JRT Technology Solutions, padronizamos o caminho /backup para facilitar a automação e a auditoria. Execute o comando abaixo para criar o diretório, caso ele não exista:


# Criar diretório de destino para os backups
sudo mkdir -p /backup
sudo chmod 750 /backup

Agora, crie o seu primeiro backup do diretório /etc, que contém as configurações do sistema. O comando abaixo utiliza a opção -c para criar o arquivo, -z para comprimir com gzip, -v para exibir os arquivos processados e -f para especificar o nome do arquivo de saída. O nome inclui a data atual no formato YYYYMMDD, obtida pelo utilitário date.


# Executar backup completo do /etc com compressão gzip
# -c = create, -z = gzip, -v = verbose, -f = file
sudo tar -czvf /backup/etc-$(date +%Y%m%d).tar.gz /etc

A saída desse comando pode ser extensa, pois o tar lista todos os arquivos adicionados ao arquivo. Para não sobrecarregar o terminal, você pode redirecionar a saída padrão para um arquivo de log ou suprimir a listagem, como faremos mais adiante. Um exemplo das primeiras linhas da saída esperada é:


tar: Removing leading `/' from member names
/etc/
/etc/hostname
/etc/hosts
/etc/resolv.conf
/etc/passwd
/etc/group
/etc/shadow
/etc/fstab
/etc/cron.d/
/etc/cron.d/anacron
...

O aviso Removing leading `/’ from member names é normal e indica que o tar remove a barra inicial dos caminhos, permitindo que a restauração seja feita em qualquer diretório sem sobrescrever os arquivos originais por acidente. Essa é uma proteção importante em procedimentos de recuperação.

Para listar o conteúdo de um arquivo tar sem extraí-lo, utilize a opção -t. Para extrair, utilize -x. Se desejar restaurar em um diretório específico, combine com -C. Veja os comandos a seguir:


# Listar conteúdo do backup criado (substitua a data pela atual)
sudo tar -tzvf /backup/etc-20260908.tar.gz | head -20

# Extrair o backup em um diretório de restauração seguro
sudo mkdir -p /restore/etc
sudo tar -xzvf /backup/etc-20260908.tar.gz -C /restore/etc

A opção -t lista o conteúdo; -z informa que o arquivo está comprimido com gzip; -v exibe detalhes; -f especifica o arquivo. A extração com -x preserva a estrutura de diretórios relativa, e o destino -C /restore/etc evita a sobrescrita acidental. Sempre teste a restauração em um diretório isolado antes de sobrescrever dados de produção.

O tar também permite excluir arquivos ou diretórios durante a criação, o que é útil para evitar backup de caches ou sockets temporários. Use a opção –exclude, que pode ser repetida múltiplas vezes, como no exemplo abaixo, que exclui o diretório /etc/ssl/private e arquivos com extensão .log:


# Backup com exclusões — evita copiar chaves privadas e logs
sudo tar -czvf /backup/etc-exclude-$(date +%Y%m%d).tar.gz \
  --exclude=/etc/ssl/private \
  --exclude='*.log' \
  /etc

Em servidores com grande volume de dados, o tar pode demorar e consumir CPU, especialmente com compressão gzip. Se o tempo for crítico, você pode omitir a compressão (-c sem -z) ou optar por xz (-J) para melhor compressão com maior tempo de processamento. Nossos especialistas da JRT Technology Solutions recomendam avaliar o custo-benefício entre espaço e tempo de restauração em cada cenário.

Executando Backup no Linux com rsync: sincronização local, remota e incremental

O rsync é a ferramenta preferida para backup no Linux quando o objetivo é manter uma cópia espelhada e atualizada de diretórios, pois ele transfere apenas as diferenças entre origem e destino. Isso o torna extremamente rápido em execuções subsequentes, mesmo com milhares de arquivos. Além disso, o rsync pode operar localmente ou via SSH, sendo a base de replicação de dados em muitos ambientes corporativos.

A sintaxe básica do rsync é: rsync [opções] origem destino. Para sincronizar o diretório /var/www com um destino local em /backup/www, utilize o comando abaixo com as opções -a (modo archive, que preserva permissões, proprietários, grupos, datas e links simbólicos), -v (verboso) e -h (valores legíveis para humanos). Observe que a barra final em /var/www/ é importante: ela faz o rsync sincronizar o conteúdo do diretório, e não o próprio diretório.


# Criar diretório de destino para o backup
sudo mkdir -p /backup/www

# Sincronização local — modo archive, verboso, legível
# A barra final em /var/www/ sincroniza o conteúdo, não o diretório em si
sudo rsync -avh /var/www/ /backup/www/

A saída do primeiro rsync lista os arquivos transferidos. Em execuções posteriores, sem alterações, o rsync não exibirá arquivos, pois identificará que tudo já está sincronizado. Um exemplo de saída é:


sending incremental file list
./
index.html
assets/
assets/style.css
assets/logo.png
...
sent 1,234,567 bytes  received 1,234 bytes  824,212.67 bytes/sec
total size is 1,232,100  speedup is 1.00

Para sincronizar dados com um servidor remoto, o rsync utiliza o SSH como transporte. O comando abaixo envia o conteúdo de /var/www/ para o diretório /backup/www/ em um servidor remoto com IP 192.168.1.10, usando o usuário backupuser. A opção -z ativa a compressão durante a transferência, reduzindo o consumo de banda, e -e “ssh -p 2222” especifica que o serviço SSH do destino escuta na porta 2222. Ajuste esses parâmetros conforme o seu ambiente.


# Sincronização remota via SSH com compressão e porta personalizada
# -a = archive, -v = verboso, -h = legível, -z = compressão
# -e = especifica o comando shell remoto (SSH com porta 2222)
sudo rsync -avzh -e "ssh -p 2222" /var/www/ backupuser@192.168.1.10:/backup/www/

Um recurso poderoso do rsync para incrementais é a opção –link-dest. Ela permite manter um diretório de referência contendo backups anteriores e criar hard links para os arquivos que não mudaram, economizando espaço físico no disco. O comando abaixo cria um backup incremental no diretório /backup/www-20260908, referenciando o backup anterior /backup/www-20260907:


# Backup incremental com hard links (economia de espaço)
# --link-dest aponta para o backup anterior para reutilizar arquivos inalterados
sudo rsync -avh --link-dest=/backup/www-20260907 /var/www/ /backup/www-20260908/

Antes de executar qualquer sincronização que inclua a opção –delete, utilize o modo –dry-run para ver o que seria alterado sem efetivar as mudanças. Essa opção é essencial para evitar a exclusão acidental de arquivos no destino. O comando abaixo simula a sincronização, incluindo a exclusão de arquivos que não existem mais na origem:


# Simulação (dry-run) — mostra as alterações sem executar
sudo rsync -avh --delete --dry-run /var/www/ /backup/www/

A saída do –dry-run lista os arquivos que seriam copiados ou removidos. Analise com atenção antes de executar o comando sem a opção –dry-run. Em nossos projetos na JRT Technology Solutions, essa prática evita incidentes em rotinas automatizadas de espelhamento.

Criando um Script de Backup Completo e Agendando com cron

Agora que você domina os comandos básicos, vamos automatizar o backup no Linux com um script Bash completo. O script deve incluir: definição de variáveis de destino e data, backup do /etc com tar, sincronização do /var/www com rsync, geração de logs, política de retenção e tratamento básico de erros. Em nossos projetos na JRT Technology Solutions, utilizamos scripts semelhantes como ponto de partida para ambientes de produção, acrescentando posteriormente notificações por e-mail e integração com sistemas de monitoramento.

Crie o arquivo /usr/local/bin/backup_linux.sh com o conteúdo abaixo, utilizando o editor de sua preferência, como nano ou vim. O conteúdo está completo, com comentários explicando cada bloco:


#!/bin/bash
# =====================================================
# Script de Backup no Linux — JRT Technology Solutions
# Aula 28 do curso Linux — Do Zero ao Avançado
# =====================================================

# Definições básicas
DESTINO="/backup"                           # Diretório raiz dos backups
DATA=$(date +%Y%m%d)                        # Data atual no formato YYYYMMDD
LOG="/var/log/backup_linux.log"             # Arquivo de log unificado
HOSTNAME=$(hostname)                        # Nome do host para auditoria

# Registrar início
echo "===============================================" >> $LOG
echo "Início do backup no $HOSTNAME: $(date)" >> $LOG

# 1. Backup do /etc com tar e compressão gzip
#    Exclui o diretório de chaves privadas por segurança
if [ -d /etc ]; then
    echo "Executando backup do /etc com tar..." >> $LOG
    tar -czvf "$DESTINO/etc-$DATA.tar.gz" --exclude=/etc/ssl/private /etc >> $LOG 2>&1
    if [ $? -eq 0 ]; then
        echo "Backup do /etc concluído com sucesso." >> $LOG
    else
        echo "ERRO: falha no backup do /etc." >> $LOG
        exit 1
    fi
else
    echo "ERRO: diretório /etc não encontrado." >> $LOG
    exit 1
fi

# 2. Backup do /var/www com rsync (sincronização local)
#    Usa --delete para manter o destino espelho da origem
if [ -d /var/www ]; then
    echo "Executando sincronização do /var/www com rsync..." >> $LOG
    rsync -avh --delete /var/www/ "$DESTINO/www/" >> $LOG 2>&1
    if [ $? -eq 0 ]; then
        echo "Sincronização do /var/www concluída com sucesso." >> $LOG
    else
        echo "ERRO: falha na sincronização do /var/www." >> $LOG
        exit 1
    fi
else
    echo "AVISO: diretório /var/www não encontrado, ignorando." >> $LOG
fi

# 3. Política de retenção — remove backups tar com mais de 7 dias
#    A opção -delete do find remove os arquivos antigos
echo "Removendo backups antigos (retenção de 7 dias)..." >> $LOG
find "$DESTINO" -name "etc-*.tar.gz" -mtime +7 -delete >> $LOG 2>&1

# 4. Registrar fim
echo "Fim do backup no $HOSTNAME: $(date)" >> $LOG
echo "===============================================" >> $LOG
exit 0

Após criar o arquivo, torne-o executável com chmod +x e execute-o manualmente para validar a lógica. O caminho /usr/local/bin está no PATH padrão, o que permite invocar o script de qualquer lugar.


# Tornar o script executável
sudo chmod +x /usr/local/bin/backup_linux.sh

# Executar o script manualmente
sudo /usr/local/bin/backup_linux.sh

# Verificar o conteúdo do log gerado
sudo tail -20 /var/log/backup_linux.log

A saída do tail deve mostrar os registros de início, execução e fim do backup. Veja um exemplo real:


===============================================
Início do backup no webserver: Tue Sep  8 02:00:01 UTC 2026
Executando backup do /etc com tar...
Backup do /etc concluído com sucesso.
Executando sincronização do /var/www com rsync...
Sincronização do /var/www concluída com sucesso.
Removendo backups antigos (retenção de 7 dias)...
Fim do backup no webserver: Tue Sep  8 02:00:04 UTC 2026
===============================================

Para automatizar a execução, utilize o cron. O crontab permite agendar comandos em horários específicos. No exemplo abaixo, o script será executado todos os dias às 02:00 da manhã, horário de menor utilização do servidor. Edite o crontab do usuário root com o comando sudo crontab -e e adicione a linha indicada:


# Editar o crontab do root
sudo crontab -e

# Adicionar a seguinte linha para execução diária às 02:00:
# 0 2 * * * /usr/local/bin/backup_linux.sh > /dev/null 2>&1

Após salvar o arquivo, o cron instalará automaticamente a nova entrada. Para verificar se a tarefa foi registrada corretamente, utilize sudo crontab -l. O agendamento permite que o backup no Linux aconteça de forma recorrente, sem intervenção manual, garantindo consistência e

Quer aprender na prática com especialistas?

A JRT Technology Solutions oferece treinamentos e implementação de Linux para equipes corporativas.



Falar no WhatsApp

Avatar photo

Thiago Paes Rodrigues

Com mais de 22 anos de experiência em Tecnologia da Informação, este profissional construiu uma trajetória sólida como empresário, atuando de forma estratégica na implementação de soluções tecnológicas que otimizam processos e impulsionam resultados em diferentes setores.