backupVoilà, je cherche une solution de backup à installer sur mon environnement réseau, et j’ai du mal à trouver une.

Je liste ci-dessous ce que j’ai à sauvegarder, les outils essayés ou en cours de tests, et quelques pistes de réflexion sur une solution “idéale” pour mon cas de figure.

Ma configuration à backuper :

  • Un PC “serveur Linux sous Ubuntu 10.10 : sauvegarde de fichiers de configuration, sites web, plusieurs bases de données, repository GIT, données personnelles. Donc des fichiers locaux à sauvegarder (tout /etc, quelques fichiers sous /usr/bin, un /home/user, etc.).
  • Un serveur dédié Linux sous Ubuntu 9.10 en ligne (chez OVH) : sauvegarde de fichiers de configuration, sites web, plusieurs bases de données, repository GIT.
  • Un PC portable sous Linux SUSE Enterprise SLED11 : fichiers de configuration, fichiers personnels, bases de données MySQL, etc.
  • Un netbook sous Windows XP : quelques rares fichiers de configuration.
  • Un plug computer sous Debian : fichiers de configuration.

Mes souhaits pour l’outil de backup :

  • simplicité de configuration (tant pour le serveur principal que pour les machines à sauvegarder) ;
  • installation simple (pas de dépendances compliquées) ;
  • fonctionnement possible en réseau : backup vers une machine centrale, backups croisés, mode push et/ou pull, etc. ;
  • multi-protocoles : sauvegarde de fichiers locaux, de fichiers distants, exports de bases de données, prises de snapshot de repository GiT, CVS et éventuellement SubVersion, etc. ;
  • si possible, facilité d’accès aux fichiers sauvegardés : pas de manipulations compliquées pour récupérer un fichier : comme la récupération est tout de même rare et ponctuelle, ce point est mineur, mais dans l’idéal une récupération directement sur disque serait parfaite ;
  • interfaçage DropBox ou autre (Amazon S3) pour envoi de certains fichiers en ligne ;
  • encryption éventuelle des données sauvegardées ;
  • fonctionnement obligatoire en ligne de commande (configuration + lancement), mais interface de configuration / manipulation à côté envisageable (client lourd ou client web) ;
  • projet actif ;
  • une bonne gestion des erreurs : si quelque chose se passe mal, il faut que j’en sois averti !

Les fonctions dont je n’ai pas besoin et que beaucoup de solutions de backup proposent :

  • gravage des données sur disques ou bandes ;
  • mécanismes de sauvegardes incrémentales / différentielles ;

Bref pour résumer, dans l’idéal, il me faudrait un système de plugins (qui doivent être faciles à écrire / modifier / paramétrer) :

  • plusieurs plugins en entrée quoi sauvegarder (fichiers locaux, fichiers distants, bases de données, outils, etc.) ;
  • plusieurs plugins en sortie où sauvegarder (FTP, SSH distant, machine locale, DropBox, Amazon S3, etc.) ;

Avec simplement un appairage entre éléments en entrée et éléments en sortie (quoi sauvegarder, où).

Les pistes de logiciels existants à ma connaissance :

Concernant les outils “bas-niveau”, il y a bien sûr :

  • rsync : répond nativement à une partie des problématiques, sauvegarde différentielle de répertoires locaux ou distants ;
  • dar : Disk ARchive, projet très intéressant, une sorte de tar plus évolué, adapté aux sauvegardes de type backup ;

Ces outils en eux-même ne gèrent pas toutes les problématiques que je souhaite couvrir.

Reste la piste de créer moi-même mon propre système de backup … réflexion en cours, pour le moment je partirais sur :

  • réalisation en Java ;
  • principe client / serveur : dans un premier temps, une partie serveur, exécutable sur une ou plusieurs machines, et dans un deuxième temps un ou plusieurs clients (client lourd / client web) ;
  • le principe de plugins en entrée et en sortie évoqué plus haut ;
  • problème n°1 : la librairie rsync n’a pas de réelle implémentation Java (il y a 2 projets non terminés et qui n’évoluent plus : librsync et jarsync, plus peut-être plus tard java-rsync, mais ce projet n’a encore produit aucun code) ;
  • problèmé n°2 : la librairie dar n’existe pas en Java, donc pas d’usage possible en natif ;
  • ces outils ne seraient donc utilisables, comme les autres commandes systèmes type export de bases de données mysql, que par exécution depuis la couche Java de commandes systèmes, ce qui est évidemment facile à faire, mais tout de même moins élégant (problème de configuration, de multi-plateforme, etc.) ;

Annexes.

A noter un ouvrage chez O’Reilly dédié à cette problématique : backup and recovery.

Backup and recovery (O'Reilly)

Quelques liens en vrac en complément :