Skip to navigation
Logo Penaz's Area

cat /dev/random > penaz

Miglioramenti del sistema di Backup


Dopo alcuni consigli da parte di un amico, ho deciso di riprogrammare da zero il mio sistema di Backup giornaliero con Python.

Buongiorno a tutti dopo un paio di consigli da parte del mio amico sistemista, ho deciso di riprogrammare da zero il mio sistema di backup che avevo proposto in questo articolo di qualche giorno fa. Che linguaggio avrei mai potuto usare se non Python?

Ora il nuovo sistema di backup implementa alcune nuove caratteristiche oltre a quelle della versione precedente:

  • Controllo dello spazio sulla partizione di backup
  • Notifiche su desktop tramite Notify-Send
  • Scrittura di un log in caso di errori
  • Controllo passo per passo di tutte le procedure con uscita immediata in caso di errore.

Inoltre questo programma è stato un po' una sfida, dato che volevo evitare che il numero di righe di codice crescesse a dismisura cercando di evitare l'uso di variabili inutili e altri orpelli che avrebbero reso il codice più leggibile ma anche più impattante sulla memoria e sul processore.

Per un conosciutissimo problema di Notify-send ho dovuto montare una soluzione posticcia per fare in modo che le notifiche vengano visualizzate; in pratica il programma restringe temporaneamente i suoi permessi (dato che parte da root) allo scopo di richiamare notify-send sullo schermo dell'utente connesso. Dato che questa operazione, se effettuata da root, non richiede l'inserimento della password è possibile automatizzarla.

Ecco quindi il nuovo sistema di backup:

 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
#!/usr/bin/env python3
# Applicazione per il backup quotidiano
# Versione 2.0
# -----Imports-----
import os
import traceback
import Multitoolkit
import signal, socket
from time import sleep
from syslog import syslog
import sys
global force
force=False
# Verifiche preliminari: Forzatura, Stato, ecc...
try:
    if sys.argv[1] is None:
        force=False
    elif sys.argv[1] in ["--force","-f"]:
        force=True
        print("Forzatura del backup in corso")
    elif sys.argv[1] in ["--status","-s"]:
        print(Multitoolkit.getStatus())
        quit()
except IndexError:
    force=False
# Prima operazione: Controllo se ho effettuato il backup con successo, se si -> Esco
if Multitoolkit.verify() and not force:
    syslog("Backup gia' effettuato, chiusura")
    Multitoolkit.closeSocket()
    quit()
# Backup non effettuato: attendo 3 minuti dall'avvio del sistema
# Intanto registro l'handler per la terminazione su segnale
if not force:
    Multitoolkit.connect()
    sleep(180)
signal.signal(signal.SIGTERM,Multitoolkit.termHandler)
signal.signal(signal.SIGINT,Multitoolkit.termHandler)
# Inizio backup, notifica
syslog("Inizio Backup")
if not force:
    Multitoolkit.notify('Inizio della procedura di Backup giornaliero')
else:
    print('Inizio della procedura di Backup giornaliero')
# Montaggio cartelle
Multitoolkit.Mount()
# Verifica dello spazio disponibile
if Multitoolkit.getSize()<10:
    if not force:
        Multitoolkit.notify("Lo spazio nella partizione di Backup e' inferiore al 10%")
    else:
        print("Lo spazio nella partizione di Backup e' inferiore al 10%")
# Verifica cartelle
Multitoolkit.verifyFolders()
# Inizio Backup
Multitoolkit.startBackup()
# Smontaggio dump della data e notifica finale
Multitoolkit.umountFolders()
Multitoolkit.dump()
if not force:
    Multitoolkit.notify("Backup Completato")
    Multitoolkit.closeSocket()
else:
    print ("Backup Completato")
syslog("Backup Completato")

Il codice funziona direttamente da console digitando:

python3 daily.py

Oppure è possibile creare un job di anacron anche se la riga che dovremo scrivere sarà un po' diversa da quella dell'ultima edizione:

1    3    backup.daily    DISPLAY=":0" python3 /usr/local/bin/Backup/daily.py

Il codice è stato creato solo per pc con utente singolo, in caso sullo stesso pc fossero collegati più utenti, le notifiche potrebbero non venire visualizzate

Il codice per il backup settimanale sarà disponibile a breve.

Questo è quanto, saluti a tutti!

Penaz.