Cette page est considérée comme vétuste et ne contient plus d'informations utiles.
Apportez votre aide…

Sauvegarder "/home" avec rsync

De façon standard, les données personnelles sont stockées dans le répertoire home. d'où le titre du document. 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. Le logiciel du NAS peut très bien dysfonctionner suite à un événement imprévu et rendre impossible l'accès aux données.
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).

Si vous, ou un de vos agents, êtes capturés en mission, le Département d’État nierait… Heu non, ce n'est pas ça. Recommençons. Ces manipulations ne sont pas triviales, vous les faites donc à vos risques et périls. Si ça plante, ne vous en prenez qu'à vous-même !!

Tout de suite ça met dans l'ambiance, non ? ;-)

Autrement dit, il vous faut comprendre ce que vous faites avant de le réaliser ; 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.

Allez hop, c'est parti !!

Si vous voulez utiliser rsync avec une interface graphique, voir la documentation Sauvegarder "home" avec grsync

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. Une interface graphique existe, Grsync, mais elle n'offre pas les mêmes possibilités. On peut dire que rsync convient tout à fait pour obtenir une sauvegarde intégrale de son "Home" que l'on peut lancer lorsqu'on le désire, et que l'on peut aussi automatiser.

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" avec un clic pour lancer une sauvegarde quand on l'estime nécessaire :

Deux possibilités de sauvegarde automatique :

Il existe une troisième possibilité, à mi-chemin entre les deux, c'est anacron qui permet de mettre en place une sauvegarde lancée régulièrement comme pour cron mais qui s'exécute au démarrage si le PC était éteint lorsque la tâche devait être exécutée.

Avant de commencer voici quelques infos sur ce programme, en direct de Wikipédia :

rsync est un programme très similaire à rcp, mais possède bien plus d'options et utilise un protocole de mise à jour à distance plus efficace afin d'accélérer significativement le transfert de fichiers lorsque le fichier de destination existe déjà. Le protocole de mise à jour à distance rsync lui permet de ne transférer que la différence entre deux jeux de fichiers à travers le réseau, en utilisant un algorithme de recherche de somme de contrôle.

En clair cela signifie que rsync transfère de la "source" vers la "destination" tous les fichiers lors de la première sauvegarde. Celle-ci prend donc un certain temps en fonction du volume de vos données. Ensuite il ne sauvegarde sur la "destination" que les fichiers qui ont été modifiés sur la "source" depuis la sauvegarde précédente. En utilisant l'option --del, il élimine également les fichiers sur la "destination" qui ne seraient plus présents sur la "source". En utilisant les bonnes options, tous les fichiers sont copiés en conservant leurs permissions respectives.

Au final, après chaque sauvegarde, on retrouve une copie conforme de son source.

Conseils

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.

Pour conserver les droits, il faut éviter les partitions formatées avec les systèmes de fichiers fat, FAT32, ntfs, NFS (?). Cependant, il est possible d'utiliser du ext2, ext3, ext4, BtrFS, ReiserFS.

FIXME: Par contre, pas de certitude pour les compatibilités des fichiers avec des noms accentués entre ReiserFS et ext4, ext3 ou ext2

Pour réaliser une sauvegarde sans erreur vers une partition de sauvegarde formatée en ext3 ou ext4, il faut être propriétaire de cette partition. Voir la note intitulée "Les problèmes de droits ou de permissions (disques de sauvegarde partitionnés en ext3)" sur cette page.

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.

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/

Attention : l'indication d'un répertoire de destination nouveau, vide (ou ne contenant que la précédente sauvegarde de /home), dédié exclusivement à la sauvegarde de /home et ne contenant rien d'autre, est indispensable si vous ne voulez pas effacer tout ce que contient la partition de destination.

Vous noterez donc dans les trois exemples ci-dessous que le répertoire de destination porte un nom qui évoque sa destination de sauvegarde "/mnt/SAV/" dans l'exemple de soupaloignon, "/media/Sauve_home/SauvHomeLieu/" dans l'exemple de Sorbus, "/media/save_homes/" dans l'exemple de poupoul2.

L'utilisation de l'option --del ou de l'option --delete, indispensable pour une sauvegarde de /home à l'identique, efface en effet dans le répertoire de destination tout ce qui n'est pas conforme au répertoire /home de la source.

Proposition soupaloignon
rsync -rltgoDv --del --ignore-errors --force /home/votre_identité/ /mnt/SAV/
  • 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/votre_identité/ : répertoire source
  • /mnt/SAV/ : répertoire destination

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

Proposition Sorbus
rsync -av --del --stats /home/ /media/Sauve_home/SauvHomeLieu/
  • -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/ : répertoire source
  • /media/Sauve_home/SauvHomeLieu/ : répertoire destination
Proposition poupoul2
rsync -a --stats --progress --delete /home/ /media/save_homes/

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
  • --progress : montre l'avancement pendant le transfert.
  • --delete : efface avant le transfert les fichiers qui n'existent pas sur la source.
  • --del : efface au cours du transfert (pas avant) les fichiers qui n'existent pas sur la source.
  • /home/ : répertoire source
  • /media/save_homes/ : répertoire destination==
Propositions diverses

A : Avoir la possibilité de synchroniser le Home et différents Dossiers de ce dernier séparément , avoir un retour du déroulement par mail, et ceci en trois clics.

B : Sauvegarde des données de tous les utilisateurs managée par les services de systemd au lieu des commandes cron avec alertes à l'écran de l'utilisateur connecté. Conservation des très vieilles données dans une autre partition. Sauvegardes lentes régulières et sauvegardes rapides à l'arrêt machine.

Les options sont -aPv –delete –exclude=

À vous !

À vous d'adapter les chemins des "source" et "destination" en fonction de votre configuration.

Il existe un grand nombre d'options que l'on peut passer dans rsync. Les propositions ci-dessus, éventuellement associées à des filtres, conviennent bien pour une sauvegarde de /home. Mais si vous voulez creuser d'avantage, vous pouvez choisir les options qui vous conviennent le mieux, en fonction de ce que vous voulez faire en consultant la traduction du manuel de rsync en français ou en lançant "man rsync" en console (en anglais, mais version du manuel plus récente que la traduction française actuellement disponible).

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, comme dans l'exemple suivant :

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/

Pour ceux qui se posent des questions sur la rédaction de leur commande Rsync, ce post du forum peut éventuellement apporter quelques réponses à leurs questions.

Un peu long pour cette partie, mais nous avons préféré bien détailler ce qui se passait, et vous offrir plusieurs choix. Pour la réalisation c'est beaucoup plus rapide par contre : un simple copier/coller de la ligne de commande de votre choix dans la console (après avoir modifié vos chemins d'accès).

Maintenant c'est bien sympa, mais retaper cette ligne dans le terminal à chaque sauvegarde, cela risque d'être un peu lourd. Ça tombe bien, c'est le but du paragraphe suivant…

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, vous pouvez consulter la page de la documentation à ce sujet.

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

#!/bin/bash
rsync -rltgoDv --del --ignore-errors --force /home/votre_identité/ /mnt/SAV/
read

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 !"

Et voilà, d'un simple double-clic (eh oui, facile le jeu de mots ;-)) vous avez réalisé votre sauvegarde.

Ok, c'est bien joli, mais il y a une fenêtre qui s'affiche, il faut valider par «Lancer dans un terminal», il n'y aurait pas quelque chose de plus esthétique ?

Et bien c'est justement le but des paragraphes qui suivent, ça tombe bien non ?

Voici une proposition commentée de script de sauvegarde de /home sur le forum. Vous y trouverez de la sécurité (étant lancé par root), la possibilité de mettre des arguments afin de sauvegarder d'autres répertoires et obtenir de l'aide. Le disque de destination est monté et démonté automatiquement. Il permet de raccourcir le temps de la sauvegarde en se basant sur la dernière sauvegarde effectuée. Il est interactif et prévient en cas d'erreurs. Cependant, malgré les différents tests effectués, il peut contenir quelques erreurs que vous pouvez signaler sur le topic du forum. Sur la page vous obtiendrez des explications, et un
/chemin/du/script/Nom_du_script -h

vous donnera une explication détaillée. Concernant le lanceur sur le bureau, il faut y ajouter un argument pour la destination qui peut être un dossier, une partition nommé par son chemin (dans /dev/) ou par son label.

Il faut d'abord ranger votre fichier «sauvegarde-home.sh» à un endroit quelconque de votre disque dur ; par exemple dans un dossier «scripts» de votre «home».

Créez un raccourci pour lancer votre script de sauvegarde d'un clic sur une icône de votre bureau.

Commande : utilisez le bouton "parcourir" pour indiquer le chemin exact de votre fichier de sauvegarde. Exemple :

/home/scripts/sauvegarde-home.sh

Vous pouvez faire précéder ce chemin d'une autre commande, par exemple :

xterm -geometry 170x60 -sb -rightbar -hold -e

Cette commande ouvre une fenêtre de terminal permettant de visualiser la sauvegarde en cours et son résultat. Vous pouvez régler la taille du terminal xterm "-geometry 170x60" en fonction de la taille de votre écran. Pour faire défiler les données avec l'ascenseur : utiliser clic droit/clic gauche.

Vous aurez alors dans la ligne "Application" du lanceur :

xterm -geometry 170x60 -sb -rightbar -hold -e /home/scripts/sauvegarde-home.sh

De la même façon, vous pouvez créer un lanceur dans la barre des tâches.

Créez un raccourci pour lancer votre script de sauvegarde d'un clic dans le menu.

Bien choisir l'endroit où vous voulez le mettre : soit dans un dossier déjà existant, soit en créant un nouveau menu. On peut par exemple créer un menu "Sauvegarde", dans lequel on rajoute un élément "Sauvegarde home".

Menu principal/Nouvel élément. Donner un nom significatif, un commentaire si vous le désirez. Et maintenant le plus important, dans le champ «Commande» entrez le chemin complet vers votre fichier. Par exemple : "/home/votre_identité/03\ outils/00scripts/sav-home.sh" ou bien "/home/scripts/sauvegarde-home.sh"). Important : Si un ou plusieurs de vos noms de dossiers comportent des espaces, il faut mettre un «\ » devant l'espace. Pour éviter toute erreur dans la rédaction du chemin, utilisez le bouton "parcourir". Valider l'option "Exécuter dans un terminal". Mettre une icône pour que cela fasse beau ;-) Cliquer sur "Fermer".

Et voilà, direction menu Applications maintenant. C'est pas mignon ça ?

Environnement

Par exemple pour sauver REPERTOIRE_A_SAUVER dans REPERTOIRE_DE_SAUVEGARDE avec

  • Une sauvegarde chaque jour de la semaine qui n'est écrasée que la semaine suivante et
  • Une sauvegarde chaque semaine qui est conservée un an.
  • Ou une sauvegarde incrémentale conservant toutes les modifications effectuées.

Le répertoire de sauvegarde est déjà obligatoirement monté. L'idéal étant qu'il soit décrit dans /etc/fstab. Il peut être dans:

  • Une partition du disque interne. Méthode qui ne protège pas d'une panne mécanique du disque ni d'une grosse fausse manipulation dans ce disque.
  • Une partition d'un autre disque interne. Méthode qui ne protège pas d'une grosse fausse manipulation se trompant de disque.
  • Une partition d'un disque externe connecté en USB.
  • Une partition d'un disque réseau réseau protégeant d'une destruction du lieu où est stocké l'ordinateur émetteur.

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

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 :

#!/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

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.

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
Noter que l'ordinateur doit fonctionner à 23 heures et 23 heures 30 le vendredi pour que ces sauvegardes soient exécutées.

Sauvegarde utilisant une fois l'espace disque émetteur augmenté de la taille cumulée des modifications

Créer le script de sauvegarde

Prendre le soin de renseigner les répertoires à traiter et de vérifier que le répertoire sortie est aussi accessible en écriture à root.

cat>/$HOME/Rsync.sh<<EOF
#!/bin/bash
#######################################
source="REPERTOIRE_A_SAUVER"             #### Exemple source=$HOME/'Mon Répertoire'
destination="REPERTOIRE_DE_SAUVEGARDE"   #### Sans espaces ni caractères spéciaux. Exemple destination=/media/Sauvegarde/MaSauvegarde
Conservation=366                         #### Toutes les modifications des fichiers sont conservées pendant 366 jours.
##################################
#  Epuration et Sauvegarde des fichiers de REPERTOIRE_A_SAUVER.
###################################
shopt -s globstar
   find "\$destination"  -name "*.OLD-*"  -mtime +\$Conservation -exec rm -v {}\; 
   rsync -aRbcx --delete --suffix=".OLD-\$(date +"%y%m%d%H")"  "\$source"  \$destination 
EOF  
sleep 1
chmod +x $HOME/Rsync.sh
cat  $HOME/Rsync.sh   #### afin de vérifier que les anti-slash ont bien été éliminés.

Créer le fichier service de la sauvegarde, l'activer et vérifier qu'il fonctionne.

mkdir -pv $HOME/.config/systemd/user
cat>$HOME/.config/systemd/user/Rsync.service<<EOF 
[Unit]
Description=Duplication du répertoire $source dans le répertoire $destination
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=$HOME/Rsync.sh
TimeoutSec=15minutes
#### Durée exécution maxima d'exécution avant plantage      
[Install]
WantedBy=timers.target
EOF
sleep 1 
systemctl --user enable Rsync
systemctl --user start  Rsync
systemctl --user --no-pager status Rsync

Créer et Activer le service cyclique horaire et journalier

Voir les codifications possible. Adapter si besoin.

cat>$HOME/.config/systemd/user/Rsync.timer<<EOF
[Unit]
Description=Lance une sauvegarde toutes les deux heures et à 16 heures 45
[Timer]
OnActiveSec=1h
OnUnitActiveSec=2h
OnCalendar=*-*-* 16:45:00
[Install]
WantedBy=timers.target
EOF
sleep 1
systemctl --user enable Rsync.timer
systemctl --user start Rsync.timer 
systemctl --user --no-pager status Rsync.timer

Cette méthode présente l'avantage de réaliser la sauvegarde juste avant l'arrêt de l'ordinateur… et non au redémarrage comme on pourrait le faire avec des outils comme at ou anacron. En cas d'impossibilité de redémarrer, on dispose ainsi de la sauvegarde la plus récente.

La mise au point de cette méthode se fait en quatre étapes assez simples. Au final, elle permet, d'un seul clic sur un bouton de la barre des tâches, d'arrêter l'ordinateur en faisant précéder cet arrêt d'une sauvegarde de tous les éléments nouveaux ou modifiés sur /home.

Il existe une variante permettant d'utiliser les boutons d'arrêt normal de l'ordinateur mais elle ne permet pas d'empêcher l'arrêt de l'ordinateur si la sauvegarde comporte des erreurs!!!

La solution idéale pour toujours disposer d'une sauvegarde totalement à jour.

Objectif : disposer d'une sauvegarde à l'identique (avec option --del) de '/home'… et en plus une sauvegarde en double du bureau (Desktop) et du dossier "Documents", (sans l'option --del) pour ne pas avoir à regretter de ne disposer que d'une sauvegarde ayant fidèlement effacé des documents qui auraient été effacés par erreur du bureau ou du dossier "Documents".

1ère étape : créer le script de sauvegarde

En voici un modèle. À vous de l'adapter selon vos besoins :

#!/bin/bash
# Vérifie la présence du volume : le script effectue la vérification du montage de la partition "Sauve_home" du disque dur externe usb.
# Si cette partition est montée, l'autre partition de ce même disque externe (qui sert dans ce script à la sauvegarde du contenu d'une partition fat32), est forcément montée aussi.).
if [ ! -e "/media/Sauve_home/" ]
then
echo "Erreur, le volume de sauvegarde est absent."
exit
fi
if [ ! "$(mountpoint /media/Sauve_home)" = "/media/Sauve_home est un point de montage" ]
then
echo "Erreur, le volume de sauvegarde n'est pas monté."
fi
#titre de lancement de la sauvegarde générale
echo
echo "LA SAUVEGARDE GENERALE EST EN COURS D'EXECUTION AVANT ARRET DE L'ORDINATEUR"
echo
# pour donner un nom "raccourci" (incluant le chemin) au fichier donnant l'historique des installations,
# mises à jour et désinstallations de paquets, fichier nommé "historique_inst_maj_desinst.log" :
  histor=/home/votre_identité/Documents/Sauvegardes/historique_inst_maj_desinst.log
 
# pour mettre à jour le fichier actualisé de l'historique des installations, mises à jour et désinstallations de paquets :
zgrep -h " installed \| upgrade \| remove " /var/log/dpkg.log* | sort | uniq > $histor
 
# pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror.log :
backup=/home/votre_identité/Documents/Sauvegardes/backuperror.log
# à noter l'usage des ">" : un seul ">" 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 '/home' vers la partition ext4 du disque dur externe :
rsync -av --del --stats  --filter "- .thumbnails/" --filter "- .Trash/" --filter "- *.tmp" --filter "- *.iso" --filter "- lost+found/" --filter "- .cache/" --filter "- .beagle/"  /home/ /media/Sauve_home/SauvHomeLieu/ 2> $backup
 
# Sauvegarde du bureau (/home/votre_identité/Desktop) vers la partition ext4 du disque dur externe :
rsync -av --stats --filter "- *.iso" /home/votre_identité/Bureau/ /media/Sauve_home/SauvHomeLieuDesktop/ 2>> $backup
 
# Sauvegarde du dossier 'Documents' (/home/votre_identité/Documents) vers la partition ext4 du disque dur externe :
rsync -av --stats --filter "- *.iso" /home/votre_identité/Documents/ /media/Sauve_home/SauvHomeLieuDocuments/ 2>> $backup
 
# 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 $backup ]; then
{
  date >> $backup
}
fi

Choix éventuel d'ajouter l'arrêt de l'ordinateur dans le script.

# Arrêt de l'ordinateur :
# Sous LUCID :
dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
# Sous Intrepid (?) :
#gnome-power-cmd.sh shutdown
# Sous JAUNTY :
#gnome-power-cmd shutdown
# Sous KARMIC :
#/usr/lib/indicator-session/gtk-logout-helper --shutdown
# Sous JAMMY :
systemectl poweroff
Pour les ordinateurs qui sont éteints chaque jour… ou plusieurs fois par jour, l'idéal est de pouvoir lancer les sauvegardes à l'arrêt de l'ordinateur. Les commandes d'arrêt du script précédent ne sont pas universelles sous Linux. Elles fonctionnent sous Ubuntu (gnome), Xubuntu (xfce)… et sans doute pour Kde4 (ce que nous n'avons pas vérifié)… Mais elles peuvent ne pas être fonctionnelles sous certains environnements. Dans ce cas, il faut la remplacer par la commande suivante :
sudo shutdown -P now

et suivre les indications de l'étape 3 ci-dessous.

Note : d'autres éléments de sauvegarde, en plus de /home, peuvent être intégrés dans un script comme celui-ci, par exemple des sauvegardes de documents d'une partition Fat32 vers une partition de sauvegarde Fat32 :
# Sauvegarde de "Mes Documents" de hda2 vers la partition FAT32 du disque dur externe :
rsync -av --stats --filter "- *.tmp" --filter "- *.iso" /media/hda2/Mes_documents_Lieu/ /media/disk/SauvMesDocsLieu/ 2>> $backup
  
# Sauvegarde des profils TB et FF de hda2 vers la partition FAT32 du disque dur externe :
rsync -av --stats --filter "- Trash" --filter "- Junk" --filter "- *.msf" --filter "- Cache/" /media/hda2/ProfilsTBFF/ /media/disk/SauvProfilsTBFFLieu/ 2>> $backup

2ème étape : Lancement de la sauvegarde

Il est possible de fabriquer un lanceur qui contiendra l'arrêt de l'ordinateur.

Ajouter au tableau de bord un "lanceur d'application personnalisé" (clic droit sur celui des tableaux de bord où se trouve l'icône d'arrêt de l'ordinateur)… Nom du lanceur : "Sauvegarde Générale + Arrêt"

Commande :

xterm -geometry 170x60 -sb -rightbar -hold -e /home/votre_identité/Documents/Sauvegardes/sauvegarde_generale

Vous pouvez régler la taille du terminal xterm "-geometry 170x60" en fonction de la taille de votre écran. Pour faire défiler les données avec l'ascenseur : utiliser clic droit/clic gauche.</code>

On peut utiliser une icône semblable à celle d'arrêt de l'ordinateur… et signifiant en même temps la sauvegarde. Il est judicieux de placer l'icône de ce lanceur juste à côté de celle commandant l'arrêt du PC (pour association d'idée).

On a ainsi le choix pour arrêter l'ordinateur :

  • sans sauvegarde, clic sur l'icône d'arrêt de l'ordinateur :
    (ce qui permet d'accéder aux autres choix habituels : Redémarrer, Hibernation, etc.)
  • avec sauvegarde, clic sur l'icône :
    (avec dans ce cas obligatoirement l'arrêt de l'ordinateur).

Il est possible de lancer le script pendant l'arrêt standard de l'ordinateur

Prendre connaissance du fonctionnement des services de systemd.

Se mettre administrateur et faire un copier/coller de ces commandes après avoir adapté le nom du script à lancer et la durée d'exécution prévisible.

cat>/etc/systemd/system/Sauvegarde.service<<EOF    
[Unit]
Description=Sauvegarde Générale
DefaultDependencies=no
Before=shutdown.target sleep.target 
[Service]
Type=oneshot
ExecStart=/Lieu/de/stockage/du/script/de/Sauvegarde
StandardOutput=journal+console
StandardError=journal+console
TimeoutSec=15minutes
#### Durée exécution avant plantage      
[Install]
WantedBy=shutdown.target sleep.target
EOF
sleep 1
systemctl enable Sauvegarde
###Vérifier qu'il se lance sans erreur
systemctl --no-pager status Sauvegarde;journalctl --no-pager -b -g Sauvegarde

Quitter le mode administrateur.

3ème étape : permettre le lancement du shutdown sans mot de passe

Cette étape est nécessaire seulement si la commande que vous utilisez pour l'arrêt de l'ordinateur à la fin du script est :
sudo shutdown -P now

Dans, le cas contraire, vous pouvez directement passer à la 4ème étape. En effet, si à la fin du script, la commande que vous utilisez pour arrêter l'ordinateur est (Jusqu'à Hardy) :

gnome-power-cmd.sh shutdown 

ou bien sous Jaunty :

gnome-power-cmd shutdown

ou bien sous Karmic :

/usr/lib/indicator-session/gtk-logout-helper --shutdown

il est inutile de modifier le fichier "/etc/sudoers". Ces commandes "gnome-power-cmd.sh shutdown" ou "gnome-power-cmd shutdown" ou "/usr/lib/indicator-session/gtk-logout-helper --shutdown" sont donc à préférer si l'une d'elle est fonctionnelle dans votre environnement.

Ceci est nécessaire pour que le script puisse arrêter l'ordinateur après réalisation de la sauvegarde, si vous utilisez pour cela la commande "sudo shutdown -P now" dans le script.

Cette petite manipulation est aussi nécessaire si vous utilisez "sudo shutdown" dans Grsync.

[voir le manuel 'man shutdown', en français]

Cette commande doit être lancée par "sudo"… et exige donc le mot de passe à l'arrêt de l'ordinateur, ce qui n'est pas très pratique.

Il suffit de modifier les autorisations du fichiers /etc/sudoers via la commande visudo :

sudo visudo

A la fin du fichier, on ajoute ceci :

# Autorisation du shutdown par l'utilisateur "votre_identité"
  votre_identité ALL=NOPASSWD:/sbin/shutdown
Depuis Hardy, "sudo visudo" fonctionne avec l'éditeur de texte vi. Pour ceux qui ne maîtrisent pas l'utilisation de vi, il est possible d'éditer le fichier /etc/sudoers avec nano :
export EDITOR=nano && sudo -E visudo

ou avec gedit :

export EDITOR=gedit && sudo -E visudo

L'option-E préserve les variables d'environnement de l'utilisateur.

4ème étape : créer un script nommé "signalement_erreurs"

Ce script, lancé au démarrage, affiche le fichier backuperror au démarrage de l'ordinateur si ce fichier backuperror n'est pas vide.

Contenu de ce script :

#!/bin/bash
# ce script est destiné à être exécuté en tâche de fond lors du démarrage de l'ordinateur... Il a pour objet de signaler les éventuelles erreurs de la sauvegarde lancée lors de l'arrêt précédent de l'ordinateur.
#
# Pour donner un nom abrégé au fichier en indiquant le chemin correspondant.
# ("backuperror.log" est le fichier destiné à enregistrer les éventuelles erreurs de sauvegarde.)
backup=/home/votre_identité/Documents/Sauvegardes/backuperror.log
# Indique une action (l'édition par "gedit") si le fichier n'est pas vide (ce que vérifie l'option -s) :
if [ -s $backup ]; then
{
  gedit $backup
}
# 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 $backup
fi

N.B. : dans ce script, remplacez si besoin "gedit" par l'éditeur de fichier disponible sur votre version d'Ubuntu, Kubuntu, Xubuntu ou Edubuntu…

Alors, la sauvegarde se fait juste avant l'arrêt de l'ordinateur. Au démarrage : RAS s'il n'y a eu aucune erreur lors de la sauvegarde… … mais s'il y a eu la moindre erreur lors de la sauvegarde, le fichier "backuperror" est ouvert par gedit (ou autre éditeur de fichier). Pour que ce script soit lancé au démarrage, deux possibilités :

Soit ajout classique.

Système→Préférences→Sessions→Onglet "Programmes au démarrage"→Ajouter→Parcourir (pour indiquer le chemin du script "signalement_erreurs")→Valider

Soit ajout d'un service reprenant le script.

cat>$HOME/.config/systemd/user/Gedit.service<<EOF 
[Unit]
Description=Lancer gedit
[Service]
Type=oneshot 
ExecStartPre=sleep 30
#### Afin de permettre à la partie graphique de finir de  s'initialiser. 10 secondes sont probablement suffisantes.
ExecStart=/home/%u/signalement_erreurs
ExecStartPost=systemct --user stop Gedit
[Install] 
WantedBy=default.target  
EOF
systemctl --user enable Gedit

Le paragraphe qui précède explique comment savoir s'il y a eu des erreurs au cours du processus de sauvegarde dans le cas d'une sauvegarde associée à l'arrêt de l'ordinateur. Il est possible aussi, si vous n'associez pas la sauvegarde à l'arrêt de l'ordinateur, d'être informé dans le terminal du plus ou moins bon déroulement du processus de sauvegarde.

Pour obtenir dans le terminal un message indiquant la réussite du processus de sauvegarde, ou au contraire la présence d'erreurs, inspirez-vous du script précédent.

A la fin de ce script, remplacez la commande "sudo shutdown -P now" par :

# Retour sur la qualité de la sauvegarde :
if [ -s $backup ]; then
{
echo "Il y a eu des erreurs : consultez le fichier /home/votre_identité/Documents/Sauvegardes/backuperror.log"
}
else echo "Sauvegardes réussies"
fi
echo "Processus terminé"
read

… en adaptant comme il convient le chemin de votre fichier "backuperror.log".

Si vous obtenez le message "Sauvegardes réussies", cela signifie que le processus s'est déroulé sans erreur. Lors des premières utilisations de votre script, vérifiez cependant la qualité de vos sauvegardes en effectuant les tests qui conviennent.

Dans un contexte, d'arrêt automatique, il faut enlever les options quiet splash du grub pour pouvoir visualiser le message.(non testé)

En cas de crash du disque dur qui contient /home il suffirait, à priori, de remplacer le disque dur du /home par celui de la sauvegarde, et de faire certainement quelques manipulations au niveau du /etc/fstab pour que tout reparte.

En cas de crash physique du /home, au lieu d'intervertir les disques, il est possible d'en racheter un neuf. Une fois Ubuntu réinstallé, il suffit de reprendre la ligne de commande de rsync, mais en inversant source et destination.

Page réalisée par : Sorbus et soupaloignon avec les contributions de poupoul2, jrev, Micnight, yanemail… et des autres participants au fil de discussion dédié (31 décembre 2007) ——]

  • tutoriel/sauvegarder_home_avec_rsync.txt
  • Dernière modification: Le 24/03/2024, 18:35
  • par geole