Sauvegarder avec FreeFileSync
Le logiciel FreeFileSync permet de copier des fichiers sur un serveur distant.
Voir le site du logiciel: https://freefilesync.org/
Ce logiciel parmet de sauvegarder des configurations de sauvegardes dans des fichiers.
- Fichiers
*.ffs_gui
: lancent l'interface graphique. - Fichiers
*.ffs_batch
: executent le traitement depuis la ligne de commande (sans lancer l'interface graphique) avec une commande du typeFreeFileSync MonFichier.ffs_batch
Ces fichiers sont créés depuis l'interface graphique.
On peut enregistrer plusieurs arborescences dans un fichier ou jongler avec plusieurs fichiers batch pour choisir les dossiers à sauvegarder.
Ajout de scripts shell pour plus de souplesse
Le logiciel FreeFileSync fonctionne bien avec le disque virtuel fourni par Mailo.com.
La procédure ci-dessous permet de simplifier l'utilisation de FreeFileSync afin de :
- Lancer automatiquement une sauvegarde au démarrage du PC.
- Disposer d'une icone dans le lanceur pour lancer un backup suivi d'un shtudown du PC.
- Paramétrer facilement les répertoires à sauvegarder.
Le choix a été fait d'effectuer un Backup vers le serveur distant en ajout uniquement afin de se protéger d'un éventuel effacemment malencontreux de fichier sur le PC.
Usage
backup2cloud.bash -all : sauvegarde tous les répertoires de 'backup.list'
backup2cloud.bash -halt : shutdown de l'ordinateur après traitement
backup2cloud.bash -p (prompt) : demande de confimer chaque dossier de 'backup.list'
backup2cloud.bash -file=/path/to/newConfigFile.txt -> utilise un fichier de configuration spécifique
backup2cloud.bash -help : affiche cette aide
backup2cloud.bash : guide l'utilisateur dans ces choix (utile si pas appelé en ligne de commande).
Fichiers sources
Fichier de configuration
- Rôle: Ce fichier contient la liste des dossiers à sauvegarder.
Il doit donc être adapté au besoin de chacun.
Format: source;cible
Le caractère # en début de ligne permet d'ignorer cette ligne. - Execution: ne s'exécute pas.
- Nom:
backup.list
- Source:
# Liste des repertoires à sauvegarder # Source;Cible /home/dossier1;/backup/dossier1 /home/dossier2;/backup/dossier2 /home/dossier3;/backup/dossier3
Fichier de backup
- Rôle: le script qui effectue le backup.
- Execution:
- manuelle :
- depuis un terminal (utiliser "-help" pour afficher les possibilités)
- ou depuis un gestionnaire de fichier (donc sans arguments)
- ou automatiquement au démarrage du PC :
- Lancer l'application "Application au démarrage" sous Ubuntu pour programmer un lancement à chaque démarrage du PC.
- Il faut allors utiliser l'argument "-all" pour ne pas prompter l'utilisateur.
- manuelle :
- Modification: modifier les variables FTP_SERVER, FTP_LOGIN, FTP_PASSWORD encrypté (à récupérer dans fichier bash généré par FreeFileSync).
- Nom:
backup2cloud.bash
- Source:
#!/bin/bash # cd `dirname $0` # Init variables WORKING_DIR=`dirname $0` LOG="$WORKING_DIR/log" LOG_FILE="$LOG/backup2cloud_$(date '+%Y%m%d-%H%M%S').log" BACKUP_LIST_FILE="backup.list" HALT="None" FTP_SERVER="ftp.mailo.com" # LOGIN remplacer @ par %40 FTP_LOGIN="nom%40domaine.com" FTP_PASSWORD="XXXX" RETOUR=0 PROMPT="N" DELAI=5 # # Test argument # # Si PAS d'argument, on guide l'utilisateur if [ "$#" -eq 0 ] then echo -e "Programme appelé sans argument." echo -e "Que voulez-vous faire ? " echo -e " 1 -> Afficher l'aide " echo -e " 2 -> Confirmer chaque répertoire et sauvegarder " echo -e " 3 -> Sauvegarder tous les répertoires " echo -e " 4 -> Sauvegarder tous les répertoires et eteindre la machine " echo -e " 0 -> Quitter " read REP case $REP in [1]* ) $0 -help; exit ;; [2]* ) $0 -p; exit;; [3]* ) $0 -a; exit ;; [4]* ) $0 -a -halt; exit ;; * ) echo "Operation abandonnee !"; exit 1 ;; esac fi # # AIDE if [ "$1" = "-help" ] then echo "Usage : " echo " `basename $0` -all : sauvegarde tous les répertoires de '$BACKUP_LIST_FILE' " echo " `basename $0` -halt : shutdown de l'ordinateur après traitement " echo " `basename $0` -p (prompt) : demande de confimer chaque dossier de '$BACKUP_LIST_FILE' " echo " `basename $0` -file=/path/to/newConfigFile.txt -> utilise un fichier de configuration spécifique " echo " `basename $0` -help : affiche cette aide " echo " `basename $0` : guide l'utilisateur dans ces choix (utile si pas appelé en ligne de commande)." read -p "Taper sur une touche pour quitter" exit fi # # OPTIONS for CUR_ARG in $* do case $CUR_ARG in -p ) PROMPT="Y" ;; -halt ) HALT="Shutdown" ;; -file* ) BACKUP_LIST_FILE=`echo $CUR_ARG |cut -d"=" -f2` ;; esac done # # Cohérence arguments test -f "$BACKUP_LIST_FILE" || { echo "File '$BACKUP_LIST_FILE' not found !"; exit 1; } # # Sauvegardes echo -e "\n$(date '+%Y-%m-%d %H:%M:%S'): Sauvegarde vers le serveur '$FTP_SERVER'" |tee $LOG_FILE echo -e "\nLes sauvegardes suivantes sont proposées dans le fichier 'backup.list' :" |tee -a $LOG_FILE grep -v '^#' $BACKUP_LIST_FILE |sed "s/;/ --> /" |tee -a $LOG_FILE # # Fichiers de log echo -e "\nLes fichiers de log se trouvent dans le repertoire \n '$LOG' " |tee -a $LOG_FILE echo -e "Suppression des fichiers de log de plus de 10 jours ..." |tee -a $LOG_FILE find $LOG -mtime +10 -name "*.log" -exec rm -r {} \; # # Parcours de la liste des batchs echo -e "\nConstruction du fichier 'exec.ffs_batch' ... " |tee -a $LOG_FILE cp template_V2.ffs_batch exec.ffs_batch # # Gestion des dossiers for LIGNE in `grep -v '^#' $BACKUP_LIST_FILE` do SOURCE_DIR=`echo $LIGNE |cut -d";" -f1` TARGET_DIR=`echo $LIGNE |cut -d";" -f2` echo -e " Ajout de $SOURCE_DIR \c" |tee -a $LOG_FILE echo " vers $TARGET_DIR " |tee -a $LOG_FILE # En mode HALT on demande quoi sauvegarder # Sinon, on sauve tout ADD_DIR=1 if [ "$PROMPT" = "Y" ] then read -p " ? (O/N) " REP case $REP in [Nn]* ) ADD_DIR=0 ;; esac else echo -e "...\n" fi if [ "$ADD_DIR" -eq 1 ] then # Construction du fichier batch STRING2ADD="\t<Pair>\n\t\t<Left>$SOURCE_DIR</Left>\n\t\t<Right>ftp://$FTP_LOGIN@$FTP_SERVER/$TARGET_DIR|timeout=30|ssl|pass64=$FTP_PASSWORD=</Right>\n\t</Pair>\nReplaceBy_Pairs" sed -i s#ReplaceBy_Pairs#$STRING2ADD# exec.ffs_batch fi done # Effacer le dernier repère sed -i s#ReplaceBy_Pairs## exec.ffs_batch # # Gestion du shutdown if [ "$PROMPT" = "Y" ] then echo -e "\n/!\ BACKUP lancé en mode interactif." read -p "Voulez-vous eteindre le PC en fin de traitement ? (O/N) " REP case $REP in [Oo]* ) HALT="Shutdown" ;; esac fi # Modifier OptionPostTraitement (shutdown ou none) sed -i s#ReplaceBy_Shutdown#$HALT# exec.ffs_batch # # Execution COMMANDE="FreeFileSync exec.ffs_batch" echo -e "\nExecution de '$COMMANDE' ... \c" |tee -a $LOG_FILE $COMMANDE RETOUR=$? test $RETOUR -eq 0 && echo "OK" || echo "KO" |tee -a $LOG_FILE echo "$(date '+%Y-%m-%d %H:%M:%S'): Fin de traitement. " exit $RETOUR