forked from msfidelis/PythonBackupSystem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackup-diferencial.py
executable file
·165 lines (137 loc) · 6.39 KB
/
backup-diferencial.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
AUTORES: Matheus Fidelis
Script de Automação do Backup Full semanal e criação de Logs do Fileserver
para melhorar o script antigo escrito em Shellscript utilizando compactação via Rsync
==================================================================================
|| CONSIDERAÇÕES IMPORTANTES SOBRE O RSYNC
|| O Script pode ser modificado a vontade. Porém, ele foi criado de antemão
|| para os seguintes parâmetros que podem ser modificados na variável 'opts'
|| Dentro da função gerabackup(). Aqui vai uma explicação bem rápida sobre
|| cada um deles:
||
|| -v: Ativa a “verbosidade”. Simplesmente faz o rsync relatar todo o
|| processo na tela.
||
|| -q: Faz rsync trabalhar quietinho. Ele só printa alguns logs no final do
|| script. Ativem a opção e removam o -v caso queiram evitar logs muito grandes
|| no servidor :)
||
|| -r: Esse parâmetro é muito importante. Pois ele garante a recursividade do
|| Rsync. Ou seja, faz ele procurar arquivos e pastas dentro dos subdiretórios
|| Caso essa opção não seja ativada o Rsync vai sincronizar somente o primeiro
|| nível dos diretórios, ignorando as subpastas.
||
|| -n: rodada de testes. Serve para você testar o rsync sem correr o risco dele
|| modificar seus arquivos.
||
|| –delete: apaga arquivos do destino que não existam na origem. Este comando
|| garante que a origem e destino sejam exatamente iguais depois da sincronização.
|| Sem isso, o destino acumularia com arquivos que não existem mais na origem.
|| Desativá-lo pode ser útil para backups diários para manter um histórico.
||
|| -z: ativa a compressão, torna a transferência mais rápida.
||
|| -l, --links - cópia symlinks como symlinks
||
|| -L, --copy-links - transforma symlink em sua referência, arquivo ou diretório
||
|| -t, --times - preserva a data de modificação;
||
|| --exclude - exclui do backup alguns tipos de arquivos identificados pelo nome
|| pode ser utilizado para ignorar arquivos temporários e logs, como por exemplo
|| --exclude={'*.tmp,*.log'}
||
==================================================================================
'''
import subprocess
import time
import sys
#Essa função gera um banner com a hora inicial do Backup
def inicio(horaInicio):
inicio = '''
===========================================================================
|| ____ _____ _ ___ _ _____ _____ _____ ||
|| | _ \ /\ / ____| |/ / | | | __ \ | __ \ / ____| ||
|| | |_) | / \ | | | ' /| | | | |__) | | |__) | (___ _ _ _ __ ___ ||
|| | _ < / /\ \| | | < | | | | ___/ | _ / \___ \| | | | '_ \ / __| ||
|| | |_) / ____ \ |____| . \| |__| | | | | \ \ ____) | |_| | | | | (__ ||
|| |____/_/ \_\_____|_|\_ \____/|_| |_| \_\_____/ \__, |_| |_|\___| ||
|| __/ | ||
|| |___/ ||
|| BACKUP DIFERENCIAL DO FILESERVER ||
===========================================================================
===========================================================================
BACKUP DIFERENCIAL DO FILESERVER INICIADO ÀS %s
===========================================================================
''' % horaInicio
return inicio
#Termino e calculos
def termino(diaInicio, horaInicio, backup, pathlog):
hoje = (time.strftime("%d-%m-%Y"))
horaFinal = time.strftime('%H:%M:%S')
backup = backup.replace('tar cvf', '')
final = '''
===========================================================================
BACKUP DIFERENCIAL FINALIZADO
HORA INICIAL: %s - %s
HORA FINAL : %s - %s
LOG FILE : %s
BAK FILE : %s
===========================================================================
''' % (diaInicio, horaInicio, hoje, horaFinal, pathlog, backup)
return final
#ESSA FUNÇÃO DESMONTA O HD DE BACKUP POR SEGURANÇA.
#DESCOMENTE A LINHA desmonta_hd() DENTRO DE backupclone() PARA UTILIZÁ-LA
def desmonta_hd(disk):
try:
umount = 'umount %s' % disk
subprocess.call(umount, shell=True)
except:
return False
#CONSTROI OS LOGS DO SISTEMA - Aqui selecionamos o nome do backup e o arquivo de logs que iremos criar.
def geralog():
date = (time.strftime("%Y-%m-%d")) #
logfile = '%s-backup-rsync.txt' % date # Cria o arquivo de Log
pathlog = '/var/log/backup/backup-rsync/%s' % logfile # Arquivo de log
return pathlog
#CONSTROI O ARQUIVO E PATH DE BACKUP E RETORNA
def gerabackup():
date = (time.strftime("%Y-%m-%d"))
opts = 'Cravzp'
#opts = 'rvtl' # Opções que serão passadas com Rsync. Comentários no inicio do Script :)
exclude = '*.log, *.tmp, .recycle' # Define os diretórios e tipos de arquivos que não vão ter backup
pathdestino = '/mnt/backupclone/' # Destino onde será gravado espelhado o backup
pathorigem = '/mnt/storage/' # pasta que será 'backupeada'
backup = 'rsync -%s --exclude={%s} %s %s' % (opts, exclude, pathorigem, pathdestino) # Comando de execução
#print backup
#sys.exit()
return backup
#CRIA OS BACKUPs
def backupclone():
disk = '/dev/sdc' # Aqui defina a partição que contém o disco que será realizado para guardar o backup
horaInicio = time.strftime('%H:%M:%S')
pathlog = geralog()
backup = gerabackup()
log = ' >> %s' % pathlog
start = inicio(horaInicio)
#Printa o Banner
l = open(pathlog, 'w')
l.write(start)
l.close()
#Monta todos os discos presentes no fstab
mount = 'mount -a'
subprocess.call(mount, shell=True)
#RODA O BACKUP
subprocess.call(backup + log, shell=True)
#Printa o final e relatório
diaInicio = (time.strftime("%d-%m-%Y"))
final = termino(diaInicio, horaInicio, backup, pathlog)
r = open(pathlog, 'w')
r.write(final)
r.close()
#Caso seja necessário que o HD que guarda o Backup seja desmontado por segurança, descomente essa linha
#desmonta_hd(disk)
#Chama a função Main
backupclone()