J'ai fait le tour des logiciels de sauvegarde sous Linux, j'ai croisé quelques solutions intéressantes comme
Areca Backup ou
Back In Time mais j'ai surtout découvert qu'aucun logiciel existant ne correspondait à mes besoins en terme de système de sauvegarde.
J'avais besoin d'un logiciel très simple, léger, permettant de créer des backups quand je le souhaite, loin des grosses solutions de sauvegarde incrémentale ou différentielle.
Je voulais donc un simple logiciel d'archivage mais je ne voulais pas avoir à aller rechercher les fichiers à archiver à chaque création de sauvegarde, surtout si c'est les même fichiers : Je voulais piocher au fur et à mesure les fichiers qui m'intéressent quand je le souhaite et qu'ils soient mémorisés pour la prochaine sauvegarde
Je voulais un système fonctionnant en ligne de commande pour ne pas avoir à cliquer dans une GUI et naviguer dans l'arborescence pour ajouter et retirer des fichiers
Je voulais un système de gestion des fichiers proche de la ligne de commande de svn (commandes add, rm etc) mais avec une base de données centralisée (pas de fichiers cachés style .svn).
C'est comme ça que je me suis lancé dans la création du script Python
dvbackup.py.
Le logiciel fonctionne grace à une base de données au format
SQLite3 qui est placée dans
~/.config/dvbackup.rc sous Linux et
Application Data\dvbackup.rc sous Windows.
Cette base de données est générée dès le premier lancement du programme et y conservera les fichiers que vous souhaitez sauvegarder avec leurs caractéristiques : date de dernière modification, taille du fichier et somme de contrôle md5 (cette dernière caractéristique n'est pas exploitée pour le moment mais tout de même stockée).
Pour indiquer que l'on souhaite sauvegarder un fichier, c'est très simple avec la commande
add :
dvbackup.py add ~/.vimrc
Si on souhaite ajouter le contenu d'un répertoire de manière récursive, on fait de la même façon :
dvbackup.py add .gnupg/
On obtient la liste des fichiers à sauvegarder avec la commande
list :
dvbackup.py list
/home/devloop/.vimrc
/home/devloop/.gnupg/pubring.gpg~
/home/devloop/.gnupg/secring.gpg
/home/devloop/.gnupg/gpg-agent.conf
/home/devloop/.gnupg/pubring.gpg
/home/devloop/.gnupg/gpgsm.conf
/home/devloop/.gnupg/agent.pid
/home/devloop/.gnupg/scdaemon.conf
/home/devloop/.gnupg/dirmngr.conf
/home/devloop/.gnupg/gpg.conf
/home/devloop/.gnupg/random_seed
/home/devloop/.gnupg/trustdb.gpg
/home/devloop/.gnupg/pubring.kbx
/home/devloop/.gnupg/agent.info
Pour retirer un fichier de la liste on utilise la commande
del. Le chemin des fichiers pour chaque commande peut être aussi bien relatif que absolu. Ainsi si on est dans le dossier personnel il suffira de taper
dvbackup.py del .gnupg/agent.info
La commande
check permet de lister les fichiers qui ont été modifiés depuis la dernière fois qu'ils ont été ajoutés à la base de données.
dvbackup peut donc aussi être utilisé comme un logiciel de vérification d'intégrité
Il faut toutefois tenir compte du fait que
dvbackup ne gère que les fichiers et pas les répertoires. Il ne sera pas en mesure de voir si un fichier a été rajouté dans un répertoire. En revanche il signalera si un fichier a été supprimé.
La commande
update met à jour les caractéristiques des fichiers (date, taille, hash md5). Là encore si un fichier est manquant un message est retourné.
Une fois que l'on est satisfait de sa base des fichiers à sauvegarder, on peut lancer l'archivage. Plusieurs commandes existent :
tar,
tarbz,
targz et
zip qui permettent de créer respectivement des archives en format .tar, .tar.bz2, .tar.gz et .zip. Il faut spécifier le nom du fichier de sortie. Par exemple :
dvbackup.py tarbz backup.tar.bz2
dvbackup offre des fonctionnalités supplémentaires comme le chiffrement/déchiffrement de fichiers en AES.
On utilisera la commande
encrypt avec deux arguments : le nom du fichier à chiffrer suivi du nom de fichier qui sera généré. La commande
decrypt fonctionne de la même façon. Exemple :
dvbackup.py encrypt backup.tar.bz2 backuptbz.enc
Un mot de passe vous sera demandé pour le chiffrement. Il sera hashé en SHA236 et le résultat utilisé pour le chiffrement AES du fichier.
La commande
ip permet de vous donner votre adresse IP externe, telle que vous êtes vu depuis Internet.
La commande
clear vide votre base de données des fichiers (les fichiers eux ne sont pas touchés). C'est une commande SQL DROP qui est soumise.
Pour terminer la commande
help vous affiche l'ensemble des commandes disponibles que l'on a vu précédemment.
dvbackup utilise des codes de retour spécifique : 0 en cas de succès, 1 en cas de problème détecté (fichier manquant ou modifié) et 2 en cas d'erreur de l'utilisateur (comprendre mauvaise utilisation du logiciel et ses commandes). C'est pratique pour appeler le logiciel depuis un script.
L'affichage généré est très succinct et peut donc être réutilisé facilement par d'autres scripts (redirection pipe).
On peut imaginer une tache cron qui fait un
check des fichiers, enregistre le résultat dans un journal, effectue un
update, ajoute/supprime quelques fichiers de la base, créé une archive avec
targz, la chiffre avec AES (
encrypt) puis envoie le tout sur un serveur avec un autre logiciel.
Le script dvbackup.py (sous licence GNU GPL) est téléchargeable
ici.