Strumento di backup per sistemi GNU/Linux, by Francesco Galgani
License GNU/GPL v.3 or (at your opinion) any later version
Download pacchetto DEB v.3.2.0:
- https://www.galgani.it/debs/mybackup_root.deb
versione (consigliata), che richiede i privilegi di root tramite gksu - https://www.galgani.it/debs/mybackup_noroot.deb
versione che non usa gksu, e quindi non richiede i privilegi di root, per problemi riscontrati con Linux Mint Debian Edition - ovviamente ciò limita l'uso del programma a cartelle su cui l'utente abbia pieni diritto di accesso, lettura e scrittura
Descrizione
MyBackup fornisce la possibilità di sincronizzare semplicemente e automaticamente due cartelle, riducendo al minimo indispensabile il tempo per la copia (saranno copiati soltanto i file nuovi o modificati).
Una semplice interfaccia grafica riduce al minimo la possibilità di fare errori e fornisce messaggi chiari all'utente. MyBackup, al termine della sincronizzazione, offre la possibilità di fare un accurato confronto tra la cartella di origine e quella di backup, assicurando al 100% che la sincronizzazione sia corretta. Questa funzionalità è utile se si sospettano possibili danneggiamenti dei supporti di archiviazione.
NOTA: la verifica dell'integrità della copia svuota la file cache, quindi è importante assicurarsi che non ci siano altre operazioni in corso (svuotamento cache introdotto nella versione 3.2.0 di MyBackup).
Codice sorgente
L'installazione del pacchetto creerà un link nell'elenco dei programmi e posizionerà nel file /usr/bin/mybackup il seguente script Bash (modificabile a proprio piacimento, nel rispetto della licenza):
#!/bin/bash ################################################################################# ################### MyBACKUP SCRIPT #################### ################################################################################# # License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> # This is free software: you are free to change and redistribute it. # There is NO WARRANTY, to the extent permitted by law. # Autori: Francesco Galgani <[email protected]> VERSIONE="3.2.0" # Controlla che i programmi richiesti siano installati if [ -z "$(which zenity)" ]; then echo "Errore: zenity non è installato" exit 1 fi if [ -z "$(which rsync)" ]; then echo "Errore: rsync non è installato" exit 1 fi if [ -z "$(which sha1sum)" ]; then echo "Errore: sha1sum non è installato" exit 1 fi if [ -z "$(which xargs)" ]; then echo "Errore: xargs non è installato" exit 1 fi if [ -z "$(which tee)" ]; then echo "Errore: tee non è installato" exit 1 fi if [ -z "$(which find)" ]; then echo "Errore: find non è installato" exit 1 fi ################################################################################# # Messaggio di benvenuto zenity --title="MyBACKUP v.$VERSIONE (by Francesco Galgani)" --info --text="MyBACKUP esegue e aggiorna i propri backup: nelle schermate seguenti, seleziona una directory di ORIGINE (in cui si trovano i file da copiare) e una di DESTINAZIONE" # VARIABILI SCELTE DALL'UTENTE SRC=$(zenity --title="Seleziona la cartella di ORIGINE" --file-selection --directory) if [ -z "$SRC" ]; then exit 1 fi DEST=$(zenity --title="Seleziona la cartella di DESTINAZIONE" --file-selection --directory) if [ -z "$DEST" ]; then exit 1 fi ################################################################################# # Modifica le stringhe affinché sia correttamente formattate secondo l'uso previsto. # Rimuove gli eventuali apici iniziali e finali SRC=${SRC#\'} SRC=${SRC%\'} DEST=${DEST#\'} DEST=${DEST%\'} # Rimuove gli eventuali doppi apici iniziali e finali SRC=${SRC#\"} SRC=${SRC%\"} DEST=${DEST#\"} DEST=${DEST%\"} # Aggiunge uno slash finale in $SRC se manca (necessario per rsync) SRC=${SRC%/} SRC=${SRC}/ # L'eventuale slash finale in $DEST deve essere rimosso DEST=${DEST%\/} # Controlla che la cartella di origine e di destinazione non siano identiche (?!!) if [ "`readlink -f $SRC`" = "`readlink -f $DEST`" ]; then zenity --title="MyBACKUP" --error --text="Errore: la cartella di ORIGINE e la cartella di DESTINAZIONE sono la stessa cartella..." exit 1 fi # Messaggio di conferma zenity --title="Richiesta di conferma" --question --no-wrap --text="Directory principale: $SRC\nDirectory di backup: $DEST\nLe directory sopra indicate sono corrette?" if [ "$?" -eq 1 ]; then exit 1 fi zenity --title="Richiesta di conferma" --question --no-wrap --text="BACKUP DI $SRC IN $DEST\nMyBACKUP fa in modo che tutti i file contenuti in $DEST\ndiventino identici a quelli in $SRC,\neliminando i file superflui e copiando quelli nuovi o modificati.\nQuesto è l'ultimo avviso: vuoi continuare?" if [ "$?" -eq 1 ]; then exit 1 fi if [ -d "$SRC" ]; then { if [ -d "$DEST" ]; then { rsync --progress --verbose --archive --delete "$SRC" "$DEST" if [ "$?" -eq 0 ]; then zenity --title="MyBACKUP" --info --text="Backup completato correttamente" else zenity --title="MyBACKUP" --error --text="Errore nella sincronizzazione. Il codice di errore di \"rsync\" è \"$?\" (vedi man)." fi zenity --title="Richiesta di confronto" --question --no-wrap --text="Vuoi eseguire un confronto approfondito tra la cartella di origine e il backup?\nQuesto controllo generalmente non è necessario e può richiedere molto tempo,\nperò è utile per verificare la completa affidabilità del backup.\nATTENZIONE: VERRA' SVUOTATA LA FILE CACHE, ASSICURATI CHE NON CI SIANO ALTRE OPERAZIONI SUI FILES IN CORSO." if [ "$?" -eq 1 ]; then exit 1 fi #Svuotamento cache echo "Stato della memoria prima della pulizia:" free echo "" echo "Cancello la file cache..." sync echo 3 > /proc/sys/vm/drop_caches #sysctl vm.drop_caches=3 echo "OK. Cache svuotata." echo "" echo "Stato della memoria dopo la pulizia:" free echo "Creazione di un checksum completo di ciascun file di origine..." cd "$SRC" SHAFile=".MyBackup_SHASUMS_`date +%Y_%m_%d_%H_%M_%S`" LOGfile="MyBackup_Log_`date +%Y_%m_%d_%H_%M_%S`" rm -f "$SRC/$SHAFile" rm -f "$DEST/$SHAFile" find . -type f -print0 | xargs -0 sha1sum | tee "$DEST/$SHAFile" echo "Controllo di ciascun file di backup tramite il checksum..." cd "$DEST" sha1sum -c $SHAFile | tee "$DEST/$LOGfile" if [ "${PIPESTATUS[0]}" -eq 0 ]; then zenity --title="MyBACKUP" --info --text="Controllo completato: la cartella di origine e il backup sono identici" else zenity --title="MyBACKUP" --error --text="Uno o più errori riscontrati... nella cartella di destinazione è riportato il file di log" fi cd .. } else zenity --title="MyBACKUP" --error --text="Errore: la cartella di destinazione \"$DEST\" non esiste." fi } else zenity --title="MyBACKUP" --error --text="Errore: la cartella di origine \"$SRC\" non esiste." fi
Francesco Galgani,
14 ottobre 2014