Time Machine avec Rsync sur Linux Ubuntu

La première rêgle de sécurite en informatique s’appelle une sauvegarde. C’est simple et pourtant beaucoup de personnes n’y pensent pas, et pour cause, la fiabilité et la durée de vie des disques durs actuels de type Seagate, Maxtor sont de plus en plus grande.

Mais vous connnaissez la bonne vieille loi de Murphy sans vouloir être pessimiste, c’est au moment ou l’on a vraiment besoin que tout tombe en panne, ou presque.

Et si vous saviez ce que j’ai vu à titre professionnel pendant plus de 10 années comme technicien réseau, même dans des entreprise, universitées, les procédures de sauvegarde étaient quelquefoit délaissées, à tort.
Jusqu’au jour ou, vous devinez la suite.


Bon pour faire simple, il existe deux grands principes de sauvegarde :

  • la sauvegarde dite complète : les fichiers sont sauvés et l’on peut récupérer ainsi l’ensemble.
    Mais si l’on souhaite remonter dans le temps, par exemple J-1, J-2, c’est impossible
  • la sauvegarde incrémentielle ou incrémentale : les fichiers sont sauvés par période et l’on peut récupérer ainsi les sauvegarde de chaque intervalle.
    Si l’on souhaite remonter dans le temps, par exemple J-1, J-2, c’est cette fois possible

Bon entrons dans le vif du sujet. Sur un ordinateur sous Linux Ubuntu (mais c’est évidemment possible de l’adapter aux autres distributions Linux, Mac Os, et même sur Windows), il existe un script bien connu Rsync qui permet de faire des sauvegardes complètes.

Il existe bien le procédé Deja Dup sur Ubuntu, mais celui-ci sauvegarde les fichiers sous forme d’archives tar, et l’on ne peut pas selectionner un fichier sans ouvrir cette archive.
Et puis, pour moi, rsync reste quand même un système rapide et fiable.

Je voulais adapter le système TimeMachine de Mac Os X, avec Rsync.
Et évidemment d’autres y ont pensés, TimeMachine sous linux.

Je vous livre le script que j’ai adapté pour mes propres sauvegardes sur un disque dur externe en Usb2.
On peut ensuite évidemment l’automatiser avec une tache cron sous Linux, ou Mac, ou bien planifier une tache sous Windows.

Adapter Rsync pour obtenir le procédé de
sauvegarde Time Machine sur Linux Ubuntu, ou Windows

Pour le script le voici :

#!/bin/bash
# programme de sauvegarde Time Machine
#

# indications repertoires et infos
# date
date=$(date +%d%m%Y)
destination=/media/endroit_de_votre_sauvegarde
# home
source_home=/home/votre_login
excludefile_home=.backup_exclude_home
# data
source_data=/media/autre_partition_a_sauver
excludefile_data=.backup_exclude_data
# pour donner un nom "raccourci" au fichier backuperror.log :
backuplog=/home/votre_login/.backuperror_timemachine.log

# Vérifie la présence du volume
if [ ! -e "$destination" ]
then
echo "Erreur, le volume de sauvegarde est absent pour la sauvegarde."
echo
exit
fi

#titre de lancement de la sauvegarde générale
echo
echo "La sauvegarde générale est en cours"
echo
# explications
# ">" renvoie le contenu du terminal dans le fichier indiqué en écrasant tout ce que contient déjà ce fichier.
# ">>" renvoie le contenu du terminal sans écraser ce que contient déjà le fichier.
# Le chiffre "2" suivi d'un seul ">" renvoie seulement les messages d'erreurs générés par le processus dans le fichier indiqué
# en écrasant le contenu de ce fichier.
# "2>>" renvoie les erreurs sans écraser le contenu du fichier.
#
# Sauvegarde de '/rep_source' vers '/rep_destination' :
# explications des parametres
#
# -l : traiter les liens symboliques comme liens symboliques (ne pas suivre le chemin du lien)
# --archive mode archivage; identique à -rlptgoD (pas -H)
# --delete-during : effacer fichier sur destination pendant synchronisation si n'existe pas sur source
# --stats : Demande à rsync d'afficher un jeu de statistiques verbeux sur le transfert de fichiers,
# --exclude-from : permet d'exclure des fichiers et dossiers a partir d'une liste
#
#titre de lancement de la sauvegarde du home
echo
echo "TimeMachine Sync de Home est en cours..."
echo
rsync -aPv --compress --delete-during --stats --link-dest=$destination/current --exclude-from=$excludefile_home $source_home $destination/back-$date 2> $backuplog

#titre de lancement de la sauvegarde de data
echo
echo "TimeMachine Sync de Data est en cours..."
echo
rsync -aPv --compress --delete-during --stats --link-dest=$destination/current --exclude-from=$excludefile_data $source_data $destination/back-$date 2> $backuplog

#suppression du lien
rm -f $destination/current

# creation du lien qui servira pour la prochaine synchro
ln -s $destination/back-$date $destination/current

# effacer ancienne sauvegarde de plus de 15 jours
find $destination -maxdepth 1 -type d -mtime +15 | xargs rm -rf

# Insertion de la date à la fin de la liste d'erreur si le fichier backuperror n'est pas vide (c'est à dire s'il y a des erreurs),
# ce que vérifie l'option "-s" :
if [ -s $backuplog ]; then
{
  date >> $backuplog
}
fi

# Indique une action si le fichier n'est pas vide :
if [ -s $backuplog ]; then
{
  echo
  echo "Ouverture du fichier d'erreur de sauvegarde"
  echo
  sleep 5;
  nano $backuplog
}

# efface le fichier pour qu'il ne soit ouvert au démarrage suivant de l'ordinateur
# que s'il a été recréé avec mention d'erreurs lors du déroulement de la sauvegarde suivante.
rm $backuplog
else
echo
echo "La sauvegarde s'est bien effectuée..."
echo "Vous pouvez fermer cette fenetre"
fi


Les scripts complémentaires à Time Machine avec Rsync

Exclure les fichiers ou dossiers pour votre répertoire home

Ce fichier s’appelle backup_exclude_home dans mon script

# liste d'exlusions de la sauvegarde rsync pour home
#
- *.tmp
- *.temp
- *.iso
- *.bak
- lost+found/
- *lost+found/
- tmp/
- .tmp/
- temp/
- .temp/
- .adobe/
- .cache/
- .thumbnails/
- .gimp-2.8/tmp/
- .fontconfig/
- Cache/
- .metacity/sessions/
- Trash/
- .Trash-1000/
- .local/share/Trash/
- .macromedia/
- .dbus
- .libreoffice/3/user/temp/

Comme vous la savez sans doute, Linux et donc Ubuntu traite les dossiers comme des fichiers, si vous souhaitez explure certains dossiers de votre partition home, à vous de compléter cette liste.

Exclure les fichiers ou dossiers pour une partition de type Data

Pour ma configuration Ubuntu, ma partition home est distincte de ma partition de donnée, pour des raisons de sécurité évidente
J’utilise alors un autre fichier d’exclusion que voici,ce fichier s’appelle backup_exclude_data dans mon script

# liste d'exclusions de la sauvegarde rsync pour data
#
- *.tmp
- *.temp
- *.iso
- *.bak
- lost+found/
- tmp/
- .tmp/
- temp/
- .temp/
- .DS*
- ._DS*
- ._*
- .cache/
- Cache/
- Trash*
- .Trash*

Explications et détails du script Time Machine Rsync sur Linux Ubuntu

Première chose, enregistrer ce script sous le nom que vous souhaitez avec l’extension.sh, et le rendre executable évidemment avec chmod +x
Changez les configurations suivantes dans le script TimeMachine, selon le système de notation de fichier sous Linux :

  • destination : volume de sauvegarde de votre choix
  • source_home : chemin de votre répertoire home
  • excludefile_home : nom des fichiers à exclure pour votre home
  • source_data : chemin de votre partition Data
  • excludefile_data : nom des fichiers à exclure pour votre partition Data
  • backuplog : nom du fichier d’erreur du script

Rsync par nature ne sait pas faire de sauvegarde incrémentale. L’astuce consiste alors à utiliser l’option link-dest pour indiquer à rsync quel répertoire à comparer, et de créer un lien vers la dernière sauvegarde effectuée.
Puis lorsque la sauvegarde est faire, recréer ce lien.
Les autres options de rsync sont commentées dans le script.

Puis, pour pouvoir conserver uniquement les dernières sauvegardes, l’effacement s’effectue par la commande find. Vous pouvez fixer le nombre de jours avec l’option mtime.
Pour les personnes qui sont sur Windows, je n’ai pas cherché comment faire cette opération via le bon vieux Ms-Dos, mais cela doit exister à mon avis, voir ce lien.


Pour information, cette procédure fonctionne completement chez moi depuis plus d’un an.
7 commentaires
  1. palouf34

    Bonjour,

    un grand merci pour cet article, je cherchais justement cette solution depuis mon retour sous linux apres avoir cotoye MAC OS X pendant quelques annees.

    Repondre
  2. Dominique Vitoux

    Bonjour,
    Super script, bravo et merci.
    Une question: que se passe t il a la premiere sauvegarde? Autrement dit peut/doit on lancer le script tel quel la premiere fois?
    Merci.
    Dominique

    Repondre
    1. Renaud

      Bonjour On peut lancer le script une premiere fois. J’ai depuis fait une mise a jour du script (pour pouvoir le lancer via anacron), quand notre pc n’est pas allume tous les jours (ou autre a la meme heure). Je dois la mettre en ligne.
      Pour info, je m’en sert aussi pour faire mes sauvegarde de mon hebergement OVH, monte en ssh sur mon poste, et il fonctionne aussi

      Repondre
  3. Dominique

    Bonjour,
    Merci pour cet excellent script. que je suis en train d’utiliser.
    Juste une question: faut il creer une premiere sauvegarde,? ou alors peut on lancer la 1ere sauvegarde sans aucune modification?.
    J’ai des problemes avec la 1ere sauvegarde qui ne contient que le lien current et pas le premier backup???.
    merci
    Dominique

    Repondre
    1. Renaud

      Bonjour
      je vais essayer de vous repondre

      rsync fait une premiere sauvegarde avec cette commande :
      rsync -aPv –compress –delete-during –stats –link-dest=$destination/current –exclude-from=$excludefile_home $source_home $destination/back-$date 2> $backuplog

      puis ensuite efface l’ancien lien current
      et le recree sur la derniere sauvegarde

      avez vous cree un fichier log de votre rsync (ou voir dans syslog) pour savoir pourquoi votre sauvegarde est vide ?

      Repondre
  4. Zizos

    Bonjour,
    Merci pour le travail. Super script qui fonctionne quand on le lance « a la main ».
    Lorsqu’il est lance via anacron, seule la date de creation du lien « current » est mise a jour. Les fichiers ne sont pas sauvegardes vers $destination.
    Jai teste dans /etc/anacrontab (avec les droits root)
    1 5 Sauvegarde /home/leo/backup.sh (avec des espaces puis des tabules)
    1 5 Sauvegarde run-parts –report /home/leo/backup.sh (avec des espaces puis des tabules)
    puis :
    anacron -f et anacron -n pour forcer l’execution. Et … rien ne se passe.
    Le fichier log n’existe pas. Pas d’erreurs a priori.
    Avez-vous une idee de ce qui peut (ne pas) se passer ?
    Merci par avance.

    Repondre

Qu'en pensez vous ?

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

  Modération subjective.