Resumo
- Crie um script bash que controle o que, onde e quando os backups são executados.
- Agende o executável backup.sh com cron e revise os logs e o destino após as execuções.
- Teste o script, use caminhos absolutos para evitar falhas de cron e de tempo de execução e use comentários para documentação.
Uma ferramenta como Déjà Dup é uma maneira gráfica fácil e excelente de automatizar backups do Linux. No entanto, criar um script de backup é a maneira DIY superior de automatizar backups. Ele oferece muito mais controle sobre o que é feito backup, onde o backup dos dados é feito e a frequência das tarefas de backup. É também uma introdução divertida aos scripts básicos. Veja como criei um script de backup simples e usei o cron para automatizar tarefas de backup.
Criando um script de backup simples e automatizando-o
Contanto que você edite e atualize o script com seus caminhos absolutos, seu local de backup pode ser uma pasta local, uma nova partição de disco ou uma unidade externa.
Escolhendo um destino de backup
O plano era criar um script de backup enxuto, mas eu também queria uma cópia dos diretórios essenciais do Linux, caso precisasse recuperar o sistema. Meu local de backup para este projeto foi uma unidade flash USB de 128 GB.
As melhores unidades flash USB de 2024
Procurando uma unidade flash sólida para adicionar ao seu transporte diário? Temos um resumo de alguns dos melhores do mercado.
Preparando o local de backup
Quer o seu local de backup seja uma unidade flash USB, um disco rígido externo ou uma nova partição, preste atenção aos caminhos de diretório absolutos e aos pontos de montagem; você precisará deles assim que começarmos a criar scripts.
Este script de backup usa rsync, que geralmente vem pré-instalado na maioria das distros. Confirme sua versão do rsync e, se estiver faltando, use o gerenciador de pacotes para instalá-lo.
Comecei o projeto criando um novo diretório chamado ‘Backup’ na unidade flash USB montada. Você pode criar esta pasta graficamente navegando até o local do backup e usando o atalho Ctrl+SHIFT+N. Optei pelo terminal e usei os comandos lsblk, cd e mkdir.
lsblk cd “/media/htg/DATA BACKUP” mkdir backup rsync --version sudo apt update -y && sudo apt install rsync"';
Decidindo do que fazer backup e criando um script backup.sh
Para fins de recuperação do sistema, optei por fazer backup de um diretório contendo arquivos pessoais consolidados e diretórios essenciais do Linux como /home, etc, /var, /usr/local, /root e /opt. A maioria dos editores de texto de terminal Linux oferece suporte a scripts básicos. Usei o nano para criar e salvar um script simples backup.sh bin bash no diretório inicial. Copie e cole o seguinte script em seu editor de texto de terminal preferido:
#!/bin/bash # This bash script backs up Linux recovery directories and personal files # Preserves ownership, permissions, timestamps, ACLs, and xattrs set -euo pipefail #------------This is the CONFIG script----------- HOSTNAME="$(hostname)" DATE="$(date +%F)" BACKUP_ROOT="/media/htg/DATA BACKUP/Backup" DEST_DIR="$BACKUP_ROOT/archives/${HOSTNAME}_${DATE}" LOG_FILE="BACKUP_ROOT/logs/backup_${HOSTNAME}_${DATE}.log" TMP_DIR="$BACKUP_ROOT/tmp" #Don't forget to edit the BACKUP_ROOT, DEST_DIR, LOG_FILE and TMP_DIR paths #Customize SOURCES=( to include the files and directories you want to back up SOURCES=( "/home" "/etc" "/var" "/root" "/opt" "/usr/local" "/home/htg/Backup" ) EXCLUDES=( "--exclude=/var/cache/" "--exclude=/var/tmp/" "--exclude=/var/lib/apt/lists/" "--exclude=/home/*/.cache/" "--exclude=/home/*/Downloads/" "--exclude=/var/lib/docker/" "--exclude=/var/lib/containers/" ) # Add these flags for backup summary and progress: # --info=progress2: Total progress line # --info=name0: Hide individual filenames # --stats: Final summary block # --no-inc-recursive: Better progress accuracy RSYNC_FLAGS=(-aAXH --numeric-ids --delete --human-readable --inplace --partial --info=progress2 --info=name0 --stats --no-inc-recursive) # ---------- PREPARATION ---------- # Create destination folders on the flash drive mkdir -p "$DEST_DIR" "$TMP_DIR" "$(dirname "$LOG_FILE")" touch "$LOG_FILE" # ---------- BACKUP ---------- echo "[$(date)] Starting backup to $DEST_DIR" | tee -a "$LOG_FILE" for SRC in "${SOURCES[@]}"; do echo "[$(date)] Backing up $SRC ..." | tee -a "$LOG_FILE" # Run rsync and log output rsync "${RSYNC_FLAGS[@]}" "${EXCLUDES[@]}" "$SRC" "$DEST_DIR" >>"$LOG_FILE" 2>&1 done echo "[$(date)] Backup completed" | tee -a "$LOG_FILE" # ---------- VERIFY ---------- echo "[$(date)] Listing destination sizes:" | tee -a "$LOG_FILE" du -sh "$DEST_DIR"/* 2>/dev/null | tee -a "$LOG_FILE" exit 0Edite o script substituindo BACKUP_ROOT, DEST_DIR, LOG_FILE e TMP_DIR pelos seus caminhos absolutos, depois escreva e saia; para nano, use Ctrl+O+Enter e Ctrl+X. A próxima parte é usar o comando chmod para tornar o script executável e o comando ls para confirmar a permissão de execução (procure -x).
nano ~/backup.sh chmod +x ~/backup.sh ls -l ~/backup.shTestando o script de backup e automatizando-o usando tarefas cron
Mesmo que todas as estratégias de backup eventualmente falhem, testar sistemas e scripts de backup pode reduzir as chances de uma perda catastrófica de dados. Ele detecta erros que podem causar falhas no processo e é uma etapa simples, mas essencial, que protege a integridade de qualquer processo de backup. Em alguns sistemas, pode ser necessário usar sudo para testar o script.
~/backup.sh sudo ~/backup.shO script não será executado com êxito se encontrar erros, mas o sistema os imprimirá e você poderá solucionar o problema a partir daí. Se estiver tudo bem, você verá as mensagens ‘Iniciando backup’ e ‘Fazendo backup /home..’. Se você for ao destino do backup, deverá ver alguns diretórios de backup.
"';
Se você estiver fazendo backup de muitos dados em uma unidade externa, o processo poderá demorar um pouco. Contanto que você não receba uma mensagem de erro, seja paciente, mesmo que pareça que o terminal congelou.
Depois de testar o script e confirmar que funciona, usei o cron para agendá-lo para execução às 20h, o comando ls para confirmar a tarefa de backup agendada e o comando systemctl para verificar o status do serviço do cron.
sudo crontab -e 0 20 * * * /usr/bin/bash /home/htg/backup.sh >> "/media/htg/DATA BACKUP/Backup/logs/cron_backup.log" 2>&1 sudo crontab -l ls -l /home/htg/backup.sh systemctl status cron"';
Neste ponto, criei e testei com sucesso meu script de backup e usei o cron para automatizá-lo. A etapa final foi confirmar o processo de backup e verificar os logs após as 20h do dia seguinte.
As 3 lições que aprendi da maneira mais difícil
Criar esse script de backup foi uma experiência divertida e educativa. O projeto me ensinou três lições que ficaram comigo até agora.
Sempre teste scripts de backup
Não testei meu primeiro script de backup. Você consegue adivinhar o que aconteceu? É isso mesmo: quando executei um backup de teste, o script falhou. Demorei um pouco para descobrir que eu havia bagunçado uma variável do shell; Eu digitei DATE+”$(date +%F)” em vez de DATE=“$(date +%F)”, o que causou um ‘erro de comando não encontrado’ na linha 10.
"';
O teste de scripts de backup detecta erros de sintaxe e de permissão que podem causar erros de execução. Também é uma boa prática.
Use caminhos absolutos
Como o cron é rigoroso e erros podem causar falha em um cron job, adquira o hábito de usar diretórios e caminhos de arquivo completos e absolutos em seu script. Ele minimiza erros, simplifica backups e pode ajudar a reduzir erros de execução.
Comente seu roteiro
Comentar sobre seu roteiro é como deixar notas para você mesmo (e para outras pessoas) que explicam a intenção por trás de uma parte ou seção específica do roteiro. No script bash, o símbolo hash (#) é o método de comentário amplamente aceito. Você deve ter notado vários comentários no meu script bash.
Considere um exemplo em que você precisa alterar um script 6 meses após criá-lo. Sem comentários, as chances de editar incorretamente partes essenciais e quebrar seu roteiro são altas porque o roteiro não está mais fresco em sua mente.
Foi assim que automatizei os backups do Linux com um script bash simples e as três lições que aprendi da maneira mais difícil. Embora o script não seja a maneira mais fácil de automatizar backups, é divertido e educativo, especialmente se você deseja aprender scripts básicos do bash.



































