21 min de leitura · Guia técnico
Backup, snapshot e restore são três estratégias complementares de proteção de dados que diferem em propósito e funcionamento. Backups são cópias completas dos dados armazenadas separadamente do sistema original, snapshots capturam o estado do sistema em um momento específico usando tecnologia de copy-on-write, enquanto restore é o processo de recuperação que utiliza essas cópias para retornar ao estado anterior. A escolha entre eles depende das necessidades de recuperação, tempo disponível e infraestrutura.
Pré-requisitos
- Acesso administrativo ao servidor (root ou sudo)
- Espaço de armazenamento suficiente para backups e snapshots
- Conhecimento básico de linha de comando Linux
- Sistema de arquivos compatível com snapshots (LVM, ZFS, Btrfs) para operações de snapshot
- Ferramentas de backup instaladas (rsync, tar, duplicity, etc.)
Entendendo os conceitos fundamentais de proteção de dados
A proteção de dados é um componente crítico na administração de servidores e sistemas. Antes de mergulharmos nas diferenças práticas entre backup, snapshot e restore, é importante compreender o que cada um desses conceitos representa no contexto de gerenciamento de dados.
O que é backup?
Backup é o processo de criar uma cópia completa e independente dos dados, que pode ser armazenada em um local separado do sistema original. Esta cópia pode ser usada para restaurar os dados em caso de perda, corrupção ou desastre. Os backups são fundamentais para a continuidade de negócios e recuperação de desastres.
Existem três tipos principais de backup:
- Backup completo: copia todos os dados selecionados, independentemente de terem sido alterados ou não
- Backup incremental: copia apenas os dados que foram alterados desde o último backup (completo ou incremental)
- Backup diferencial: copia todos os dados alterados desde o último backup completo
O que é snapshot?
Um snapshot é uma "fotografia" do estado de um sistema em um momento específico. Diferente dos backups tradicionais, snapshots não criam cópias completas dos dados, mas registram o estado do sistema e as alterações subsequentes. Eles são criados quase instantaneamente e consomem espaço apenas para armazenar as diferenças (deltas) entre o estado atual e o momento da captura.
Snapshots são implementados usando tecnologia de copy-on-write, onde os blocos originais são preservados quando ocorrem modificações após a criação do snapshot. Isso permite reverter rapidamente a um estado anterior sem restaurar todos os dados.
O que é restore?
Restore (ou restauração) é o processo de recuperar dados a partir de um backup ou snapshot para retornar o sistema a um estado anterior. Este processo pode envolver a restauração completa de um sistema ou apenas de arquivos específicos, dependendo da necessidade e da extensão da perda de dados.
Diferenças técnicas entre backup e snapshot
A compreensão das diferenças técnicas entre backup e snapshot é essencial para implementar uma estratégia eficaz de proteção de dados. Embora ambos sirvam ao propósito de preservar dados, eles funcionam de maneiras fundamentalmente diferentes.
Método de armazenamento
Backup: Cria uma cópia completa e independente dos dados, geralmente armazenada em um local fisicamente separado do sistema original. Os backups são autossuficientes e não dependem do sistema original para funcionar.
# Exemplo de backup completo usando tar
tar -czvf /backup/site_completo_$(date +%Y%m%d).tar.gz /var/www/html/
Snapshot: Cria uma referência ao estado do sistema em um momento específico, usando tecnologia de copy-on-write. Os snapshots dependem do sistema original e armazenam apenas as diferenças entre o estado atual e o momento da captura.
# Exemplo de snapshot usando LVM
lvcreate -L 5G -s -n mysql_snap /dev/vg0/mysql
Velocidade de criação e restauração
A velocidade é um fator crítico na escolha entre backup e snapshot, especialmente em ambientes de produção onde o tempo de inatividade deve ser minimizado.
- Backup: A criação de backups completos pode ser demorada, pois envolve a cópia de todos os dados. A restauração também pode levar tempo considerável, dependendo do volume de dados.
- Snapshot: A criação de snapshots é quase instantânea, independentemente do tamanho dos dados. A restauração também é geralmente mais rápida, pois envolve apenas a reversão para um estado anterior, sem a necessidade de copiar grandes volumes de dados.
Consumo de espaço
O impacto no armazenamento é uma consideração importante ao planejar sua estratégia de proteção de dados.
- Backup: Consome espaço proporcional ao volume total de dados sendo copiados. Um backup completo de 100GB ocupará aproximadamente 100GB de espaço (sem considerar compressão).
- Snapshot: Inicialmente consome pouco espaço, aumentando gradualmente à medida que os dados originais são modificados. Se 5% dos dados mudam após a criação do snapshot, ele ocupará aproximadamente 5% do tamanho original.
Implementando backups eficientes em servidores Linux
A implementação de uma estratégia de backup robusta é fundamental para garantir a segurança dos dados em servidores Linux. Vamos explorar diferentes métodos e ferramentas para criar backups eficientes.
Backup com rsync
O rsync é uma ferramenta poderosa para sincronização de arquivos que pode ser usada para criar backups incrementais eficientes.
# Backup incremental com rsync
rsync -avz --delete /var/www/html/ /backup/website/
Para backups remotos, você pode usar SSH:
rsync -avz --delete -e ssh /var/www/html/ usuario@servidor-backup:/backup/website/
Backup com tar
O tar é uma ferramenta tradicional de arquivamento que pode ser combinada com compressão para criar backups completos eficientes em espaço.
# Backup completo com tar e compressão gzip
tar -czvf /backup/database_$(date +%Y%m%d).tar.gz /var/lib/mysql/
Para backups incrementais com tar, você pode usar o parâmetro --listed-incremental:
# Backup incremental com tar
tar --create --file=/backup/incremental_$(date +%Y%m%d).tar --listed-incremental=/backup/snapshot.file /var/www/html/
Automatizando backups com cron
A automatização de backups é essencial para garantir consistência e regularidade. O cron é a ferramenta padrão para agendamento de tarefas em sistemas Linux.
# Editar o crontab
crontab -e
# Adicionar uma linha para executar backup diário às 2 da manhã
0 2 * * * /scripts/backup_diario.sh
Um exemplo de script de backup diário:
#!/bin/bash
# backup_diario.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
# Backup de banco de dados
mysqldump --all-databases -u root -p'senha' > $BACKUP_DIR/mysql_$DATE.sql
# Backup de arquivos web
tar -czvf $BACKUP_DIR/website_$DATE.tar.gz /var/www/html/
# Manter apenas os últimos 7 backups
find $BACKUP_DIR -name "mysql_*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "website_*.tar.gz" -mtime +7 -delete
Estratégia 3-2-1 de backup
Uma estratégia robusta de backup segue a regra 3-2-1:
- 3 cópias dos dados (original + 2 backups)
- 2 tipos diferentes de mídia
- 1 cópia armazenada off-site (em outro local físico ou na nuvem)
Implementação prática:
# Backup local
rsync -avz --delete /var/www/ /backup/local/
# Backup para servidor remoto
rsync -avz --delete -e ssh /var/www/ backup@remoteserver:/backup/
# Backup para serviço de nuvem (usando rclone)
rclone sync /var/www/ remote:backup/website/
Trabalhando com snapshots em diferentes sistemas de arquivos
Os snapshots oferecem uma abordagem diferente para proteção de dados, permitindo capturar o estado do sistema em um momento específico com impacto mínimo no desempenho. Vamos explorar como implementar snapshots em diferentes sistemas de arquivos Linux.
Snapshots com LVM (Logical Volume Manager)
O LVM é amplamente utilizado em servidores Linux e oferece funcionalidade nativa de snapshot.
Criando um snapshot LVM:
# Verificar espaço disponível no grupo de volumes
vgs
# Criar snapshot de 5GB do volume lógico
lvcreate -L 5G -s -n dados_snap /dev/vg0/dados
Montando o snapshot para acesso:
mkdir -p /mnt/snapshot
mount /dev/vg0/dados_snap /mnt/snapshot
Removendo o snapshot quando não for mais necessário:
umount /mnt/snapshot
lvremove /dev/vg0/dados_snap
Snapshots com ZFS
O ZFS é um sistema de arquivos avançado que oferece recursos robustos de snapshot.
Criando um snapshot ZFS:
# Criar snapshot
zfs snapshot tank/dados@snapshot1
Listando snapshots disponíveis:
zfs list -t snapshot
Restaurando a partir de um snapshot:
zfs rollback tank/dados@snapshot1
Snapshots com Btrfs
O Btrfs é um sistema de arquivos moderno com recursos nativos de snapshot.
Criando um snapshot Btrfs:
# Criar snapshot somente leitura
btrfs subvolume snapshot -r /mnt/dados /mnt/dados/snapshots/snap1
Criando um snapshot gravável:
btrfs subvolume snapshot /mnt/dados /mnt/dados/snapshots/snap_rw
Listando snapshots:
btrfs subvolume list /mnt/dados
Automatizando snapshots
Para sistemas de produção, é importante automatizar a criação e rotação de snapshots. Para Btrfs, a ferramenta snapper é uma excelente opção:
# Instalar snapper
apt-get install snapper
# Configurar snapper para o subvolume
snapper -c config create-config /mnt/dados
# Criar snapshot com snapper
snapper -c config create -d "Snapshot diário"
Configurando rotação automática com snapper:
# Editar configuração
nano /etc/snapper/configs/config
# Definir políticas de retenção
# NUMBER_LIMIT="10"
# NUMBER_LIMIT_IMPORTANT="10"
Processos de restore: recuperando dados de forma eficiente
O processo de restore é o momento da verdade para qualquer estratégia de proteção de dados. Vamos explorar como realizar restaurações eficientes a partir de backups e snapshots.
Restauração a partir de backups tar
Para restaurar um backup completo criado com tar:
# Restaurar backup completo
tar -xzvf /backup/website_20230615.tar.gz -C /
Para restaurar arquivos específicos:
# Restaurar apenas um diretório ou arquivo específico
tar -xzvf /backup/website_20230615.tar.gz -C / var/www/html/wp-content/uploads/
Restauração a partir de backups rsync
Para restaurar dados a partir de um backup rsync:
# Restaurar todo o conteúdo
rsync -avz /backup/website/ /var/www/html/
# Restaurar arquivos específicos
rsync -avz /backup/website/wp-content/uploads/ /var/www/html/wp-content/uploads/
Restauração a partir de snapshots
A restauração a partir de snapshots varia de acordo com o sistema de arquivos:
Para LVM:
# Desmontar o volume original (se necessário)
umount /var/www/html
# Restaurar o snapshot (substitui o volume original)
lvconvert --merge /dev/vg0/dados_snap
Para ZFS:
# Restaurar todo o sistema de arquivos
zfs rollback tank/dados@snapshot1
# Restaurar arquivos específicos
mkdir -p /mnt/restore
mount -t zfs tank/dados@snapshot1 /mnt/restore
cp -a /mnt/restore/arquivo.txt /caminho/destino/
umount /mnt/restore
Para Btrfs:
# Restaurar subvolume completo
mv /mnt/dados /mnt/dados_old
btrfs subvolume snapshot /mnt/dados/snapshots/snap1 /mnt/dados
# Restaurar arquivos específicos
cp -a /mnt/dados/snapshots/snap1/arquivo.txt /mnt/dados/
Verificação pós-restauração
Após qualquer processo de restauração, é crucial verificar a integridade dos dados recuperados:
# Verificar permissões e propriedade
ls -la /var/www/html/
# Verificar integridade de banco de dados MySQL
mysqlcheck --all-databases -u root -p
# Verificar logs de aplicação
tail -f /var/log/apache2/error.log
Quando usar cada estratégia: casos de uso práticos
A escolha entre backup, snapshot e restore depende do cenário específico e das necessidades de proteção de dados. Vamos analisar quando cada estratégia é mais apropriada.
Cenários ideais para backups
- Proteção contra falhas físicas: Backups completos são essenciais quando há risco de falha de hardware, pois são armazenados separadamente do sistema original.
- Retenção de longo prazo: Para dados que precisam ser preservados por períodos prolongados (meses ou anos), backups tradicionais são mais adequados.
- Recuperação de desastres: Em cenários de desastre total (incêndio, inundação), apenas backups off-site garantem a recuperação dos dados.
- Migração de sistemas: Backups completos facilitam a migração de dados entre sistemas diferentes.
Exemplo de implementação para backup de longo prazo:
# Backup mensal para retenção de longo prazo
tar -czvf /backup/archive/monthly_$(date +%Y%m).tar.gz /var/www/html/
# Transferir para armazenamento off-site
rsync -avz /backup/archive/ backup@remote-storage:/archive/
Cenários ideais para snapshots
- Atualizações de sistema: Antes de aplicar atualizações ou patches, snapshots permitem reverter rapidamente em caso de problemas.
- Desenvolvimento e testes: Snapshots facilitam a criação de ambientes de teste que podem ser rapidamente revertidos ao estado original.
- Proteção contra erros lógicos: Para se proteger contra exclusões acidentais ou corrupção de dados, snapshots frequentes permitem recuperação rápida.
- Ambientes de produção com janelas de backup limitadas: Quando não há tempo suficiente para backups completos, snapshots oferecem proteção com impacto mínimo no desempenho.
Exemplo de implementação para proteção durante atualizações:
# Criar snapshot antes de atualização
lvcreate -L 5G -s -n pre_update_snap /dev/vg0/dados
# Realizar atualização
apt-get update && apt-get upgrade -y
# Se algo der errado, reverter
# lvconvert --merge /dev/vg0/pre_update_snap
# Se tudo estiver bem, remover o snapshot
lvremove /dev/vg0/pre_update_snap
Estratégias combinadas para proteção máxima
Para proteção abrangente, a combinação de backups e snapshots oferece o melhor dos dois mundos:
- Snapshots frequentes (horários/diários): Para recuperação rápida de erros recentes
- Backups incrementais diários: Para proteção contra falhas do sistema
- Backups completos semanais: Para recuperação completa do sistema
- Backups mensais off-site: Para proteção contra desastres
Exemplo de implementação combinada:
#!/bin/bash
# script_protecao_combinada.sh
# Snapshot horário
lvcreate -L 2G -s -n hourly_$(date +%H) /dev/vg0/dados
# Backup incremental diário (executado uma vez por dia)
if [ $(date +%H) -eq 1 ]; then
rsync -avz --delete /var/www/ /backup/daily/$(date +%Y%m%d)/
fi
# Backup completo semanal (executado aos domingos)
if [ $(date +%u) -eq 7 ] && [ $(date +%H) -eq 2 ]; then
tar -czvf /backup/weekly/full_$(date +%Y%m%d).tar.gz /var/www/
fi
# Rotação de snapshots (manter apenas as últimas 24 horas)
find /dev/vg0 -name "hourly_*" -mtime +1 -exec lvremove -f {} \;
Problemas comuns e como resolver
Mesmo com planejamento cuidadoso, problemas podem surgir durante operações de backup, snapshot e restore. Vamos abordar os mais comuns e suas soluções.
Sintoma: Backup falha por falta de espaço
Causa: O espaço de armazenamento disponível é insuficiente para o backup completo.
Solução: Libere espaço removendo backups antigos, use compressão mais eficiente ou implemente backups incrementais para reduzir o espaço necessário.
# Verificar espaço disponível
df -h
# Remover backups antigos
find /backup -name "*.tar.gz" -mtime +30 -delete
# Usar compressão mais eficiente
tar -cJf backup.tar.xz /var/www/ # xz oferece melhor compressão que gzip
Sintoma: Snapshot cresce rapidamente e esgota espaço
Causa: Alta taxa de alteração de dados após a criação do snapshot, fazendo com que muitos blocos originais sejam preservados.
Solução: Aloque mais espaço para snapshots, reduza o tempo de retenção ou limite snapshots a volumes com menor taxa de alteração.
# Verificar tamanho do snapshot LVM
lvs
# Estender o tamanho do snapshot se necessário
lvextend -L +2G /dev/vg0/dados_snap
# Implementar rotação automática de snapshots
find /dev/vg0 -name "*_snap" -mtime +1 -exec lvremove -f {} \;
Sintoma: Restauração incompleta ou corrompida
Causa: Backup corrompido, interrupção durante o processo de restauração ou permissões incorretas.
Solução: Verifique a integridade dos backups regularmente, implemente verificação de soma de verificação e mantenha múltiplas gerações de backup.
# Verificar integridade do arquivo tar
tar -tvf backup.tar.gz
# Criar backup com verificação de integridade
tar -czvf backup.tar.gz /var/www/ && md5sum backup.tar.gz > backup.tar.gz.md5
# Verificar integridade antes da restauração
md5sum -c backup.tar.gz.md5
Sintoma: Backup muito lento impactando o desempenho do sistema
Causa: Operações de I/O intensivas durante o backup afetando o desempenho do sistema em produção.
Solução: Agende backups para períodos de baixo tráfego, use ferramentas com controle de I/O ou implemente snapshots para minimizar o impacto.
# Limitar o impacto de I/O usando nice e ionice
nice -n 19 ionice -c2 -n7 tar -czvf backup.tar.gz /var/www/
# Usar rsync com limite de largura de banda
rsync --bwlimit=5000 -avz /var/www/ /backup/
Sintoma: Falha ao montar snapshot
Causa: Snapshot corrompido devido a espaço insuficiente ou problemas no sistema de arquivos.
Solução: Monitore o espaço disponível para snapshots e implemente alertas para evitar que fiquem sem espaço.
# Verificar status do snapshot
lvs
# Configurar monitoramento com alertas
echo '#!/bin/bash
SNAP_USE=$(lvs | grep snap | awk "{print \$5}" | tr -d "%")
if [ $SNAP_USE -gt 80 ]; then
echo "Alerta: Snapshot utilizando $SNAP_USE% do espaço" | mail -s "Alerta de Snapshot" [email protected]
fi' > /etc/cron.hourly/check_snap
chmod +x /etc/cron.hourly/check_snap
Perguntas frequentes sobre backup, snapshot e restore
Qual a principal diferença entre backup e snapshot?
Backups são cópias completas e independentes dos dados, enquanto snapshots são registros pontuais do estado do sistema que dependem do sistema original. Backups oferecem proteção contra falhas físicas e são armazenados externamente, enquanto snapshots são mais rápidos de criar e restaurar, mas geralmente ficam no mesmo sistema.
Snapshots consomem muito espaço em disco?
Inicialmente, snapshots ocupam pouco espaço, pois armazenam apenas as diferenças (delta) entre o estado atual e o momento da captura. Contudo, à medida que o sistema original muda, o snapshot cresce progressivamente, podendo consumir espaço significativo se mantido por longos períodos.
Com que frequência devo fazer backups completos?
A frequência ideal de backups completos depende da criticidade dos dados e da taxa de mudança. Para ambientes de produção, recomenda-se backups completos semanais combinados com backups incrementais diários. Dados críticos com alta taxa de alteração podem exigir backups completos mais frequentes.
É possível automatizar o processo de backup e snapshot?
Sim, ambos os processos podem ser automatizados. Para backups, ferramentas como rsync, duplicity ou restic podem ser programadas via cron. Para snapshots, sistemas de arquivos como ZFS e LVM oferecem recursos de automação, e ferramentas como snapper (para Btrfs) permitem agendamento regular de snapshots.
Qual método de backup é mais seguro contra ransomware?
O método 3-2-1 é o mais seguro contra ransomware: mantenha 3 cópias dos dados (original + 2 backups), em 2 tipos diferentes de mídia, com 1 cópia armazenada off-site. Backups imutáveis (write-once-read-many) e desconectados da rede principal oferecem proteção adicional contra ataques de ransomware.
Conclusão
- Backups são essenciais para proteção de longo prazo e recuperação de desastres, enquanto snapshots oferecem recuperação rápida para problemas imediatos.
- Uma estratégia robusta de proteção de dados combina backups regulares (diários/semanais) com snapshots frequentes (horários) e segue o princípio 3-2-1 para máxima segurança.
- Automatize seus processos de backup e snapshot, implemente verificações de integridade regulares e teste seus procedimentos de restauração periodicamente para garantir que funcionem quando necessário.
Precisa de ajuda com proteção de dados em seu servidor?
A AviraHost oferece soluções de backup gerenciado e snapshots automáticos para seus servidores VPS e dedicados, garantindo que seus dados estejam sempre protegidos e disponíveis quando você mais precisa.