script de backup diário, semanal e anual [fechado]

1

Qualquer um tem um script bash que faz um script de backup diário / semanal / anual que eu possa usar com o cron.

Basicamente, ele irá colocar os backups em 3 pastas. O backup diário teria apenas os arquivos de backup desta semana. O backup semanal teria apenas o arquivo de backup semanal do mês e a pasta de backup do mês faria o backup anual.

Obrigado!

    
por Patrick 12.08.2010 / 13:06

5 respostas

2

Veja estas ferramentas:

Você pode descobrir que essas ferramentas atendem aos requisitos e eliminam sua necessidade de scripts. Eu uso scripts também, mas eles são para situações particulares. Se você quiser exemplos do que outras pessoas fizeram, duas pessoas postaram seus scripts de backup aqui .

Os backups foram cobertos exaustivamente no ServerFault. Se você está tentando desenvolver uma estratégia de backup, sugiro pesquisar no site. Se você não conseguir encontrar uma pergunta específica respondida, você pode perguntar isso em outra pergunta.

    
por 12.08.2010 / 15:55
1

Não - mas é muito trivial de se fazer. OTOH está longe de ser trivial para fornecer uma resposta à sua pergunta com base nas informações que você forneceu.

Certamente, seria muito mais simples controlar o tipo de backup (diário / semanal / anual) e o destino do crontab em vez do script bash (embora isso possa ser simplesmente uma questão de enviar um parâmetro diferente para o script).

Backups não são intrinsecamente importantes - ser capaz de restaurar seus dados é muito importante - então, para que seu backup tenha algum valor, ele deve estar em um formato que permita restaurá-lo. Nós não podemos te dizer:

1) Which backup format is appropriate for your data
2) what backup tools you have on your system which are scriptable
3) what restore tools you are likely to have access to if you suffer a complete system failure
4) whether you need to support multi-volume / media changes in your backup

por exemplo. alcatrão e compressa estão quase universalmente disponíveis - mas não é muito robusto. O CPIO é mais robusto, mas não incorpora suporte à compactação.

    
por 12.08.2010 / 14:17
1

Aviso: invadidos juntos em 5 minutos e não testados (não tenho o Bash instalado).

#!/bin/bash
#Usage: $0 [Yearly,Monthly,Weekly]

set PROTECTEDFILES = "/etc /usr/home /usr/local/etc"
set BACKUPDIR = "/usr/backups"
set BACKUPTAR = backup-'hostname -s'-'date "+%F"'.tgz

tar czf $BACKUPDIR/$1/$BAKCUPTAR $PROTECTEDFILES

No crontab:

0   0   1   1   *   root   /root/sbin/my_backup Yearly
0   0   1   *   *   root   /root/sbin/my_backup Monthly
0   0   *   *   6   root   /root/sbin/my_backup Weekly
    
por 12.08.2010 / 16:25
0

Você pode usar Duplicidade para esse fim. Comparado com o popular rsnapshot e rdiff-backup ainda está ativamente desenvolvido.

A única armadilha é que você não pode criar backups diários, semanais e mensais, mas é possível criar uma combinação mais simples como "diária, semanal" ou "semanal, mensal" ou "diária, mensal" e assim por diante. / p>

Para isso, eu recomendo este script wrapper: link que simplifica significativamente a configuração.

    
por 11.11.2014 / 21:34
0

Eu escrevi o script que rotaciona todos os backups dentro de uma pasta, mantendo X backups diários, Y semanais e Z.

Eu pego todos os backups em pastas

/root/backup/YYYYMMDD 

diariamente.

Depois, eu tenho o seguinte script rotativo:

#!/bin/bash

echo > /root/keep.txt
#writing dates of the backups that should be kept to the array

for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
        DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
        for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
        ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
        DW=$(date +%-W)
        for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
        ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
        done

#writing the array to file keep.txt line by line
for i in ${!keep[@]}; do echo $i >> /root/keep.txt; done

#delete all files that not mentioned in keep.txt
cd /root/backup
ls -1 /root/backup/ | sort /root/keep.txt /root/keep.txt - | uniq -u | xargs rm -rf
rm /root/keep.txt

Isso manterá 7 backups diários, 4 semanais, 12 mensais e 5 anuais.

Eu obtive a maior parte da lógica de este tópico

    
por 12.02.2016 / 12:57

Tags