Aller au contenu principal

sauvegarde-home-rsync

  1. Introduction

De façon standard, les données personnelles sont stockées dans le répertoire home. Cependant, certains utilisateurs peuvent choisir de les stocker ailleurs. Utiliser rsync pour dupliquer rapidement, à l'identique les données sauvegardées dans un NAS n'est pas superflu.

[!Informations]

Cette documentation propose une utilisation simple de rsync afin de créer une copie du répertoire /home. En plus d'être relativement complexe, cela reste une technique un peu triviale, puisque chaque sauvegarde écrase la précédente. Pour gérer ses sauvegardes avec rsync (qui reste un outil puissant et fiable) mieux vaut généralement utiliser rsnapshot. En plus d'être beaucoup plus simple à mettre en place que les techniques documentées ici, il gère les sauvegardes de manière incrémentielle, et permet à la fois de conserver différentes versions d'un fichier (il n'écrase pas les anciennes versions), et d'éviter la duplication physique des fichiers inchangés (au moyen d'un emploi intelligent des liens physiques).

[Notes]

Il est recommandé de faire d'abord des tests avec des dossiers artificiellement créés pour l'occasion, avant de lancer la sauvegarde générale.

Présentation de rsync

Inutile de revenir sur l'importance de faire des sauvegardes régulières de ses données. C'est en général au moment d'un crash que l'on bénit le jour où l'on a mis en place ses sauvegardes… Ou au contraire que l'on se maudit de ne pas avoir pris le temps d'en faire.

Voici donc un tutoriel pour vous éviter de vous auto-traiter de toutes les injures possibles si un jour, malheureusement, vous crashez votre disque dur.

Le programme rsync fonctionne en ligne de commande.

Ce tuto détaille donc toutes les étapes pour disposer d'une bonne méthode de sauvegarde de /home. Plusieurs méthodes vous sont proposées. A chacun de choisir celle qui lui convient le mieux selon son usage.

Deux possibilités de sauvegarde "manuelle"

  • Un lanceur dans la barre des tâches ou sur le bureau.
  • Une entrée dans le menu "Applications".

Deux possibilités de sauvegarde automatique :

  • Avec cron ou avec un service, ce qui convient aux ordinateurs tournant 24h/24.
  • A l'arrêt de l'ordinateur, ce qui convient aux ordinateurs qui sont éteints une ou plusieurs fois par jour.

Conseils

[Attention]

Il est possible d'effectuer une sauvegarde de /home sur une autre partition du même disque dur. Mais c'est imprudent : si le disque grille, la sauvegarde est perdue en même temps que /home… et ne sert à rien. Il est donc recommandé d'effectuer la sauvegarde sur un autre disque dur (interne ou externe).

D'autre part, dans l'installation de Ubuntu par défaut, le répertoire /home est installé sur une partition formatée en ext4. Il est recommandé que la partition de sauvegarde soit aussi formatée en ext4, pour conserver correctement les permissions et les réattribuer lors de la restauration.

Points de repère pour faire bon usage de ce tutoriel

Dans tous les exemples et explications de ce tutoriel, pour faire usage de tel ou tel élément comportant le texte "votre_identité", remplacez celui-ci par votre véritable identité sur votre ordinateur (le login que vous indiquez lors de l'ouverture de votre session Ubuntu).

De même, en vous inspirant des exemples proposés, soyez particulièrement attentifs à adapter correctement les chemins des dossiers ou partitions "source" et "destination" à ce que vous voulez faire.

Choisir la ligne de commande à utiliser

Normalement, une sauvegarde avec rsync d'une partition ext4 vers une partition ext4 ne nécessite pas de droits root. Nous n'avons donc pas besoin de faire précéder "rsync" par "sudo" dans les lignes de commandes ; et donc, pas besoin de mot de passe.

Plusieurs exemples de lignes de commande pour la sauvegarde de /home/

  1. Proposition soupaloignon
rsync -rltgoDv --del --ignore-errors --force /home/votre_identité/ /mnt/SAV/

Detaillons la commande:

  • rsync : appelle le programme rsync
  • -r : parcours le dossier indiqué et tous ses sous-dossiers
  • -l : copie les liens symboliques comme liens symboliques
  • -t : préserve les dates
  • -g : préserve le groupe
  • -o : mettre le propriétaire du fichier de destination identique à celui du fichier source
  • -D : préserve les périphériques
  • -v : plus loquace
  • --del : permet de supprimer les fichiers sur "destination" qui n'existent plus sur "source"
  • --ignore-errors : efface même s'il y a eu des erreurs E/S
  • --force : force la suppression de répertoires même non-vides
  • /home/ubuntu/ : répertoire source
  • /mnt/SAV/ : répertoire destination

Cette ligne de commande va donc transférer le contenu de "ubuntu" (qui est sur /home) vers le disque dur de destination, monté dans /mnt avec comme nom "SAV".

  1. Proposition Sorbus
rsync -av --del --stats /home/ /media/Sauve_home/SauvHomeLieu/

Detailes d ela commande:

  • -a : équivalent à -rlptgoD. C'est un moyen rapide de dire que vous voulez la récursion et de préserver pratiquement tout.

Par rapport aux options choisies par soupaloignon, la proposition de Sorbus ajoute les options :

  • -p : provoque la mise à jour des permissions sur la destination pour qu'elles soient identiques aux permissions sur la source.
  • --stats : affiche quelques statistiques de transfert de fichiers, ce qui permet de vérifier l'efficacité de la sauvegarde.

Mais les options --ignore-errors et --force ne sont pas utilisées.

  • /home/ubuntu : répertoire source
  • /media/Sauve_home/SauvHomeLieu/ : répertoire destination
  1. Proposition poupoul2
rsync -a --stats --progress --delete /home/ /media/save_homes/

Expliquons la commande et ces options:

Proposition similaire à celle de Sorbus, avec cependant deux différences par rapport aux propositions de Sorbus et de soupaloignon :

  • le choix de l'option --progress plutôt que de l'option -v
  • le choix de l'option --delete plutôt que de l'option --del
  1. --progress : montre l'avancement pendant le transfert.
  2. --delete : efface avant le transfert les fichiers qui n'existent pas sur la source.
  3. --del : efface au cours du transfert (pas avant) les fichiers qui n'existent pas sur la source.
  4. /home/ : répertoire source
  5. /media/save_homes/ : répertoire destination==

Les filtres

Un certain nombre de fichiers ou répertoires sont inutiles pour une sauvegarde de /home/ Il s'agit notamment des fichiers images .iso, des fichiers temporaires, des répertoires "cache", des miniatures images "thumbnails", de la corbeille (.Trash), du répertoire lost+found. On peut utiliser l'option --filter pour exclure ces fichiers de la sauvegarde,

sudo rsync -av --del --stats --filter "- .thumbnails/" --filter "- .Trash/" --filter "- *.tmp" --filter "- *.iso" --filter "- lost+found/" --filter "- .cache/" --filter "- .beagle/" /home/ /sauvegarde/SauvHome/ 

Ou encore comme dans cet autre exemple :

rsync -a --stats --progress --filter "- .iso" --filter "- .tmp" --filter "- klibido/" --filter "- lost+found/" --filter "- .Trash/" --filter "- .beagle/" --filter "- cache/" --filter "- CACHE/" --filter "- Cache/" --filter "- .thumbnails/" --delete?? /home/ /media/save_homes/

La création du script de sauvegarde de /home

Ce script va permettre de lancer la sauvegarde d'un double-clic. Créez un fichier où vous voulez, copiez/collez le contenu ci-dessous, enregistrez-le avec un nom du genre «sauvegarde-home.sh». Une fois que c'est fait, donnez les droits d'exécution au propriétaire du fichier (soit en console, soit par un clic droit sur le fichier/propriétés/permissions). L'option «read» permet de garder la console ouverte une fois que la sauvegarde est terminée. Toujours utile si on veut voir ce qui s'est passé. Si vous voulez mieux comprendre comment fonctionne un script shell.

  1. Exemple de script avec la ligne de commande proposée par soupaloignon :

Créer un fichier et nommer-le sauvegarde-home.sh

#!/bin/bash
rsync -rltgoDv --del --ignore-errors --force /home/ubuntu/ /mnt/SAV/
read
  1. Un script un peu plus développé permet la vérification préalable du montage du disque de sauvegarde, ce qui est utile si le disque de sauvegarde est un disque externe.

Exemple avec la ligne de commande proposée par Sorbus (et les filtres):

#!/bin/bash
REPERTOIRE_SOURCE="/home/"
REPERTOIRE_DESTINATION="/sauvegarde/SauvHomeLieu/"

# Détecter la présence du volume de destination et interrompre l'opération si nécessaire
if [ ! -e "$REPERTOIRE_DESTINATION" ]
then
echo "Attention, le disque de sauvegarde n'est pas présent"
exit
fi

rsync -av --del --stats --filter "- .thumbnails/" --filter "- .Trash/" --filter "- *.tmp" --filter "- *.iso" --filter "- lost+found/" --filter "- .cache/" --filter "- .beagle/" $REPERTOIRE_SOURCE "$REPERTOIRE_DESTINATION"

echo "La commande de sauvegarde a terminé son travail..."
echo "Vérifiez dans le terminal s'il n'y a pas eu d'erreur !"

Sauvegarde utilisant cinquante neuf fois l'espace disque émetteur.

  1. Créer les dossiers nécessaires aux sauvegardes. Se placer dans REPERTOIRE_DE_SAUVEGARDE. On peut les créer à la main. Il est également possible d'utiliser le petit script suivant qu'il faut enregistrer dans REPERTOIRE_DE_SAUVEGARDE et exécuter :
#!/bin/bash
for x in lundi mardi mercredi jeudi vendredi samedi dimanche {1..52}
do
mkdir $x
done

[Remarque] : ma configuration est en français c'est pourquoi les dossiers sont lundi, mardi, etc. Pour savoir si vous êtes en français ou en anglais tapez date +%A dans un terminal est voyez si c'est en français. Si vous avez installé linux en anglais remplacer le fichier ci-dessus par

#!/bin/bash
for x in monday tuesday wednesday thursday friday saturday sunday {1..52}
do
mkdir $x
done

Sauvegarde quotidienne

Maintenant enregistrez le script suivant dans /etc/cron.daily :

Ce script va sauver tous les jours votre REPERTOIRE_A_SAUVER dans REPERTOIRE_DE_SAUVEGARDE/nom_du_jour_de_la_semaine. La semaine suivante le fichier sera écrasé par le rsync suivant.

#!/bin/bash
###################################
# Jour
###################################
jour=$(date +%A)
source="REPERTOIRE_A_SAUVER"
destination="REPERTOIRE_DE_SAUVEGARDE"
###################################
# Sauvegarde des fichiers de REPERTOIRE_A_SAUVER
###################################
rsync -aRbcxv --progress --delete --stats $source $destination/$jour

Sauvegarde hebdomadaire

Maintenant enregistrez le script suivant dans /etc/cron.weekly :

#!/bin/bash
###################################
# Jour
###################################
semaine=$(date +%V)
source="REPERTOIRE_A_SAUVER"
destination="REPERTOIRE_DE_SAUVEGARDE"
###################################
# Sauvegarde des fichiers de REPERTOIRE_A_SAUVER
###################################
rsync -aRbcxv --progress --delete --stats $source $destination/$semaine

Ce script va sauver chaque semaine votre REPERTOIRE_A_SAUVER dans REPERTOIRE_DE_SAUVEGARDE/numero_de_la_semaine_de_l_annee.

Automatiser les sauvegardes

Dans un terminal lancer sudo crontab -e puis copier ces deux lignes :

0 23 * * * sudo sh /root/script/sauvegarde_www_daily.sh >/dev/null 2>&1 # JOB_ID_1
30 23 * * 5 sudo sh /root/script/sauvegarde_www_weekly.sh >/dev/null 2>&1 #JOB_ID_2

[notes] Noter que l'ordinateur doit fonctionner à 23 heures et 23 heures 30 le vendredi pour que ces sauvegardes soient exécutées.

Tutoriel de Sauvegarde