
em 25/02/2023
A maioria das pessoas desconhecem a importância do backup em suas vidas, o que é curioso. Traçamos um paralelo... Fotos.
Fotografia, por definição é escrita pela luz. Histórias, vidas, sonhos e momentos gravados pela luz. Isso é um tipo de backup de nossos momentos, nossas memórias. E o backup dessas fotos é uma forma de garantir que manteremos nossas memórias por mais tempo.
Backup x Cópia
Sendo assim, porque não simplesmente copiar os arquivos/fotos numa pasta qualquer, no computador, ou pendrive?
A princípio parece uma boa ideia. Mas o conceito de backup é criar cópias ordenadas e de forma contínua, garantindo um versionamento dos dados salvos.
Uma cópia é apenas isso; copiar arquivos sem um sistema ordenado, datado e periodicamente.
Como efetuar backups
Existem diversas ferramentas gratuitas e também pagas para backups. Aqui eu foco num Shell script que escrevi. Em seguida algumas explanações.
backup-home.sh
#!/usr/bin/env sh
# Backup DIR
backup_path="/home/user-home"
backup_size=$(du -s $backup_path | cut -f1)
# Backup destiny
external_storage="/mnt/backup"
# File format
date_format=$(date "+%Y-%m-%d_%R")
final_archive="my-backup-$date_format.tar.gz"
# Logs
log_file="/var/log/my-daily-backup.log"
###########
# Tests
###########
# Checking if external disk is mounted
if ! mountpoint -q -- $external_storage; then
printf "[$date_format] DEVICE NOT MOUNTED in $external_storage.\n" >> $log_file
exit 1
fi
# Checking backup size vs destiny free space
avail_space_ext_storage=$(df $external_storage | awk 'NR==2{print $4}')
if ! [ $backup_size -le $avail_space_ext_storage ]; then
printf "INSUFFICIENT SPACE AVAILABLE in $external_storage.\n" >> $log_file
exit 1
fi
###############
# Backup begin
###############
if tar -czSpf "$external_storage/$final_archive" "$backup_path"; then
printf "[$date_format] BACKUP SUCESS.\n" >> $log_file
else
printf "[$date_format] BACKUP ERROR.\n" >> $log_file
fi
#################################
# Delete old backups - 14 days+
#################################
find $external_storage -mtime +14 -delete
Foi utilizado #!/usr/bin/env sh
como definição do interpretador porque cada pessoa pode ter seu interpretador favorito instalado e, dessa forma script será rodado pelo primeiro encontrado em seu env.
Nesse exemplo, estamos fazendo backup da pasta home/user-home
, comumente utilizada como pasta onde os dados de aplicações, documentos, imagens, vídeos etc são salvos. Para adicionar outras pastas, basta adicioná-las separando-as com espaço.
Estamos utilizando mountpoint /mnt/backup
para ficar claro seu propósito. Criaremos um arquivo compactado no formato .tar.gz contendo a data de execução em seu nome.
Antes de fazer efetivamente o backup, algumas verificações serão feitas.
- Existe um HD externo/pendrive montado em
/mnt/backup
? SIM - Há espaço livre suficiente para concluir o backup? SIM
Passado todo processo, o log /var/log/my-daily-backup.log
será atualizado informando se houve sucesso.
# Exemplo de log
[2023-02-17_21:41] BACKUP SUCESS.
[2023-02-18_23:54] BACKUP SUCESS.
[2023-02-20_22:00] BACKUP ERROR.
[2023-02-24_22:00] BACKUP SUCESS.
Os backups com 14 dias ou mais serão apagados do HD externo/pendrive.
Lembretes
- Para executar o script é necessário dar a permissão ao usuário. Exemplo
chmod u+x backup-home.sh
- Para descompactar o arquivo gerado
tar -xvf my-backup-2023-02-25_13:21.tar.gz
- Para que o backup seja feito automaticamente (com o hd já montado) em dia e horário marcados, necessário adicionar essa instrução no cron da máquina estando como root.
crontab -e
. Sugiro utilizar o site Crontab.guru.