Logiciels de sauvegarde

De Wiki de la GUILDE

La mise en place d'un outil sauvegarde est essentielle, que l'on soit administrateur d'un parc informatique ou simple utilisateur d'un ordinateur personnel.
Lorsqu'on ne souhaite pas développer sa propre solution, alors se pose la question du choix parmi les logiciels existants.
Voici donc un comparatif de quelques logiciels libres dédiés à la sauvegarde de fichiers (n'hésitez pas l'enrichir !).


Liste de logiciels

Liste non-exhaustive !

  • Areca Backup : très complet pour la sauvegarde locale
  • BackupPC : système de sauvegarde client/serveur haute performance
  • backup-light : Un petit utilitaire de sauvegarde bash
  • backup-manager : Un outil de sauvegarde en ligne de commande pour GNU / Linux
  • fwbackups : Un programme riche en fonctionnalités de sauvegarde utilisateur
  • luckybackup : Un outil de sauvegarde et de synchronisation puissant, rapide et fiable
  • rdiff-backup : sauvegarde et synchronisation pratique et transparente
  • amanda : Une solution réseau capable de sauvegarde sur bande
  • autoarchive : Un outil de sauvegarde simple qui utilise tar
  • backintime : Un outil de sauvegarde simple équivalent à Apple Time Machine
  • bacula : Une solution de sauvegardes client/serveur pour entreprise
  • bontmia : sauvegarde sur le réseau vers de multiples archives incrémentale
  • dar : Logiciel pour faire des sauvegardes/restauration incrémentales sur CD/DVD
  • dirvish : système de rotation de sauvegarde en réseau rapide sur disque
  • duplicity : sauvegarde réseau efficace et chiffrée en utilisant l'algorithme rsync
  • deja-dup : interface graphique pour duplicity
  • fsarchiver : sauvegarde/déploiement du système de fichiers sûre et flexible
  • Holland : Pays, Président, Programme de sauvegarde modulaire
  • kbackup : Sauvegardez vos données dans un moyen simple et convivial
  • safekeep : Système de sauvegarde client/serveur basé sur rdiff-backup
  • snap: Un système modulaire de sauvegarde / restauration du système par snapshot
  • tarsnap: Service en ligne de sauvegarde cryptée
  • TimeVault : équivalent à Apple Time Machine (plus maintenu)
  • Flyback : équivalent à Apple Time Machine
  • Simple Backup suite (Sbackup) : outil facile et intégré à gnome
  • Backerupper : sauvegarde personnelle à traver le réseau

Outils annexes :

  • seivot: outil de benchmarking pour les programmes de sauvegarde
  • genbackupdata: Un programme pour générer des données de test pour tester les logiciels de sauvegarde

Fonctionnalités

Selon ses besoins, il faudra être attentifs à certaines fonctionnalités particulières :

  • type : logiciel client / serveur ou sauvegarde autonome
  • modes de sauvegardes : complètes / incrémentale / différentielles
  • restauration : cela paraît évident mais certains logiciels ne proposent pas d'interface de restauration ! A l'inverse, d'autres vont jusqu'à permettre la restauration d'un fichier à une date particulière
  • planification : pouvoir automatiser l'éxécution
  • compression : c'est que ça prend de la place !
  • chiffrement : utile si le media de sauvegarde n'est pas stocké dans un coffre


Tableau comparatif

Remarque : l'absence de certaines fonctionnalités ci-dessous veut simplement dire qu'elle ne sont pas intégrées dans le logiciel lui-même. Mais on peut souvent les obtenir par d'autres moyens : restauration par tar, planification par cron, compression par gzip, chiffrement par gpg, ...


Nom OS Type Sauvegardes Restauration Planification Filtres Compression Chiffrement Commentaires
Areca Backup Lin, Win local complètes, différentielles, incrémentales OUI (avancé) manuelle OUI (avancé) OUI (zip/zip64) OUI (AES)

Restauration complète ou avancée avec recherche par fichier et par date.
Génère des scripts pour le planificateur système (cron).
Utilise java.

BackupPC Lin, Win client / serveur complètes, différentielles, incrémentales OUI OUI OUI OUI  ?
Backup-light Lin local complètes, incrémentales  ?  ?  ?  ?  ?
Backup Manager Lin local complètes, incrémentales NON OUI  ? OUI  ?

Crée des .tar.gz

fwbackups Lin, Mac, Win local complètes, incrémentales (non compressées) OUI OUI OUI OUI NON Incrémental impossible si la compression est activée (gz ou bz)
luckybackup Lin, Mac, Win local complètes, incrémentales OUI OUI OUI NON NON

C'est une interface graphique (assez complète) pour rsync

kbackup Lin local complètes, incrémentales NON NON OUI OUI NON

Très simple, crée des fichiers tar, chaque fichier est compressé séparément


Bonnes pratiques

Voici quelques conseils utiles.

  • vérifier souvent les logs des sauvegardes (les envoyer par mail si possible)
  • utiliser un jeu de médias externes (disque dur, DVD, bande magnétique, ...)
  • stocker les médias de sauvegarde dans un lieu différent
  • vérifier l'espace disponible des médias régulièrement
  • si nécessaire, chiffrer les sauvegardes et protéger la clé de chiffrement en plusieurs emplacements (papier, mail, clé USB, ...)
  • faire des test de restauration réguliers

Exemple de plan de sauvegarde :

  • 1 sauvegarde complète par mois
  • 1 sauvegarde différentielle par semaine
  • 1 sauvegarde incrémentale par jour
  • choisir la durée de rétention en fonction des besoins


Cas concret : sauvegarde de portable

Description

J'ai besoin de réaliser une sauvegarde régulière de mon portable.
Malgré une mobilité moyenne (travail, maison, peu de déplacements), je dois pouvoir réaliser une sauvegarde locale que je synchroniserais ensuite sur un serveur et/ou un disque externe.

Le logiciel de sauvegarde retenu est Areca Backup (même s'il utilise java) pour ses nombreux points forts :

  • sauvegardes compressées
  • fusion de sauvegardes
  • critères d'exclusions très avancés
  • restauration possible d'un seul fichier avec recherche

La version utilisée est areca-7.3.7-x86_64.
La planification peut se faire grâce à cron.

Configuration de Areca

2 tâches sont créées :

  • sauvegarde du système (/etc et /root)
  • sauvegarde du répertoire utilisateur (/home/user)

Exemple de configuration au format xml (Clic-droit > Editer au format XML) de la sauvegarde utilisateur.
Voir notamment les nombreuses exclusions par expressions régulières.

<?xml version="1.0" encoding="UTF-8"?>

<target version="7" uid="283686751" follow_symlinks="false" register_empty_directories="true" follow_subdirs="true" xml_security_copy="true" name="Users" forward_preproc_errors="true" description="sauvegarde utilisateur">
<source path="/home/user"/>
<medium  type="directory" file_compression="true"  policy="hd" path="/home/Sauvegardes/areca/backups/283686751" archive_name="%YY%-%MM%-%DD%" encrypted="false"  track_permissions="true" overwrite="false" zip_level="4" zip_ext="false" zip_charset="UTF-8" zip64="true">
<handler type="standard"/>
<transaction_configuration use_transactions="true" transaction_size="102400"/>
</medium>
<addons>
</addons>
<filter_group logical_not="false" operator="and" >
<regex_filter  logical_not="true" rgpattern=".*/\.?c?[Cc]ache/*" mode="parent_directory" full_match="false"/>
<regex_filter  logical_not="true" rgpattern=".*/tmp/*" mode="parent_directory" full_match="false"/>
<regex_filter  logical_not="true" rgpattern=".*/\.?[Tt]humbnails/*" mode="parent_directory" full_match="false"/>
<regex_filter  logical_not="true" rgpattern=".*~$" mode="file_name" full_match="false"/>
<regex_filter  logical_not="true" rgpattern=".*/nepomuk/*" mode="parent_directory" full_match="false"/>
<regex_filter  logical_not="true" rgpattern=".*/akonadi/*" mode="parent_directory" full_match="false"/>
<regex_filter  logical_not="true" rgpattern=".*/ImapMail/*" mode="parent_directory" full_match="false"/>
<regex_filter  logical_not="true" rgpattern="\..*lock" mode="file_name" full_match="false"/>
<locked_filter  logical_not="true"/>
<extension_filter  logical_not="true">
<ext>.tmp</ext>
<ext>.temp</ext>
<ext>.iso</ext>
</extension_filter>
</filter_group>
<email_processor execute_after="true" run_if_success="true" run_if_error="true" run_if_warning="true" run_if_backup="true" run_if_merge="false" run_if_check="false"  recipients="email@domain.tld" smtp_host="smtp.domain.tld:465" smtp_user="email@domain.tld" smtp_password="password" smtp_s="true" title="[areca]  %COMPUTER_NAME%  %TARGET_UID% : %SUCCESS%" from="email@domain.tld" introduction="ARCHIVE : %ARCHIVE%
ARCHIVE_NAME : %ARCHIVE_NAME%
TARGET_UID : %TARGET_UID%
TARGET_NAME : %TARGET_NAME%
COMPUTER_NAME : %COMPUTER_NAME%
USER_NAME : %USER_NAME%
DATE : %DATE% %TIME%
SUCCESS : %SUCCESS%
WARNING : %HAS_WARNINGS%" statistics="true" list_stored_files="true" max_listed_files="1000"/>
</target>

Note : pour exclure tous les fichiers cachés dans le home - par exemple dans le cas ou les fichiers importants (.thunderbird, .mozilla, .ssh, .bashrc, .vimrc, ...) ont été déplacés dans un sous-répertoire "dotfiles" - vous pouvez ajouter les filtres ci-dessous, à placer au début :

<regex_filter  logical_not="true" rgpattern="/home/[a-zA-Z]*/\..*" mode="full_path" full_match="true"/> <!-- for ~/.files -->
<regex_filter  logical_not="true" rgpattern="/home/[a-zA-Z]*/\..*" mode="parent_directory" full_match="true"/> <!-- for ~/.directories -->

Planification

Areca Backup n'intègre pas directement d'outil de planification et recommande d'utiliser celui fourni avec l'OS.
Par contre, Areca fourni une version en ligne de commande et un assistant pour générer les scripts à lancer (Clic-droit > Assistants > Générer une stratégie).

Dans ce cas, j'ai choisi de générer 3 scripts :

  • une archive tous les 1 jours 7 fois (= une sauvegarde incrémentale tous les jours)
  • puis une archive tous les 7 jours 3 fois (= 1 fusion hebdomadaire avec 3 semaines rétention)
  • puis une archive tous les 28 jours 1 fois (= 1 fusion des hebdomadaires tous les 28 jours, rétention 1x)

Planification a heure fixe avec cron

Créer un fichier /etc/cron.d/areca :

SHELL=/bin/bash
LANG=fr_FR.UTF-8
LANGUAGE=fr
LC_CTYPE=fr_FR.UTF-8
areca_sched=/home/Sauvegardes/areca/schedule

# Sauvegardes par areca 7.2.13 x86_64
# Planification :
# 1_days  = backup tous les  1 jours à 12h30
# 7_days  = merge  tous les  7 jours à 13h30
# 28_days = merge  tous les 28 jours à 15h30
#
# .---------------------- minute (0 - 59)
# |   .------------------ hour (0 - 23)
# |   |   .-------------- day of month (1 - 31)
# |   |   |   .---------- month (1 - 12) OR jan,f
# |   |   |   |   .------ day of week (0 - 6) (Su
# |   |   |   |   |     
# *   *   *   *   *    user command to be executed
 30  12   *   *   *    root ${areca_sched}/283686751_every_1_days.sh  >> ${areca_sched}/areca.log
 30  13   *   *   */7  root ${areca_sched}/283686751_every_7_days.sh  >> ${areca_sched}/areca.log
 30  15   *   *   */28 root ${areca_sched}/283686751_every_28_days.sh >> ${areca_sched}/areca.log


Planification a heure variable avec anacron

Solution utile pour un portable ou toute machine ayant des horaires de mise en service variable.

Ajouter ces lignes (avant la ligne contenant "areca_cl.sh") dans les fichiers générés par l'assistant d'areca :

export LANG=fr_FR.UTF-8
export LANGUAGE=fr
export LC_CTYPE=fr_FR.UTF-8
  • placer les fichiers de type 283686751_every_1_days.sh dans /etc/cron.daily/
  • placer les fichiers de type 283686751_every_7_days.sh dans /etc/cron.weekly/
  • placer les fichiers de type 283686751_every_28_days.sh dans /etc/cron.monthly/

Synchronisation

Ces sauvegardes étant locales, il est nécessaire de les synchroniser sur un support externe en cas de perte du disque.

Exemple 1 : rsync vers partage samba

J'ai branché une disque 2To sur ma box ADSL et activé le partage samba. Mes sauvegardes et dossiers son synchronisé par le réseau avec un script "maison" (voir sauvegarde_smb.sh sur gitorious.org) lui-même planifié par anacron (à l'aide d'un script /etc/cron.daily/launcher qui ne fait que lancer sauvegarde_smb.sh avec ses paramètres)


Exemple 2 : rsync automatique vers disque USB

(Inspiré ce ce post)

Les exemples de scripts et de fichiers de configuration sont dans ce projet, toute contribution est la bienvenue :).

Il faut d'abord écrire un petit script (par exemple : /home/Sauvegardes/areca/scripts/auto-rsync.sh) qui réalise les tâches suivantes :

  • identification (par UUID) et montage du disque
  • rsync vers le disque
  • démontage du disque

Ensuite il faut créer un service systemd (par exemple : /etc/systemd/system/auto-rsync@.service) qui lancera ce script :

[Unit]
Description=auto-rsync backups to USB Disk
BindsTo=dev-%i.device

[Service]
Type=simple
ExecStart=/home/Sauvegardes/areca/scripts/auto-rsync.sh

Enfin, il faut créer une règle udev (par exemple : /etc/udev/rules.d/90-auto-rsync.rules) qui va lancer le service quand le disque sera branché :

KERNEL=="sd?2", ACTION=="add", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="5106", RUN+="/usr/bin/systemctl --no-block start auto-rsync@%k.service"

Remarques :

  • j'utilise la seconde partition du disque, d'ou le sd?2
  • penser à relancer systemd et udevd après modifications :
systemctl daemon-reload
udevadm control --reload

Liens

Quelques liens intéressants.

Sur les sauvegardes :

Sur cron et anacron :

Sur rsync et les partages réseaux :