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.
Qu'en pensez vous ?

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

  Modération subjective.