J'ai détaillé divers outils en ligne de commandes, plus haut, je vais maintenant expliquer comment se servir de la commande
tar.
Pourquoi tar ?
Il est vrai qu'il existe d'autres outils de sauvegarde en ligne de commandes, j'en ai parlé antérieurement.
Néanmoins,
tar est un outil qui fait quasiment tout (à ma connaissance, il ne fait pas encore la vaisselle cependant

).
Il permet de sauvegarder une arborescence entière en la compressant pour en réduire la taille très simplement.
Il permet, tout aussi simplement, de restaurer cette arborescence.
En raison de sa facilité d'utilisation et de ses possibilités, j'ai donc décidé de privilégier cet outil plutôt qu'un autre.
Présentation générale de tar
À partir d'un fichier archive, la commande
tar est capable de restaurer des fichiers ou des arborescences de fichiers.
Une archive tar contient le chemin absolu des fichiers sauvegardés. Pensez donc, avant de restaurer quoi que ce soit, à vous placer dans le répertoire /(racine) de votre système. Dans le cas contraire, le fichier sera restauré à partir du répertoire courant.
Cette commande peut aussi bien traiter un fichier ordinaire, une arborescence de fichier, un périphérique d'archivage local ou distant.
L'archive dans laquelle est assemblée la sauvegarde permet de conserver les droits relatifs aux fichiers ainsi que leur emplacements respectifs.
Bref, un véritable couteau suisse
On va maintenant voir comment s'en servir pour réaliser nos sauvegardes, mais je vous assure, il a encore d'autres possibilités.
Utilisation de tar pour la sauvegarde
La sauvegarde manuelle
Exécutez les commandes suivantes en tant que simple utilisateur (sauf si on vous renvoit un message d'erreur de permission).
La syntaxe générale de la commande
tar est la suivante :
Code : Console | tar -paramètres opérande1(archive.tar) opérande2(cible) |
Alors, si on désire par exemple sauvegarder le dossier personnel de l'utilisateur
guest sur un disque dur externe monté sur /media/votre_media en conservant les chemins absolus et en profitant de la compression GNU des données on fera :
Code : Console | tar -cvzf /media/votre_media/home_de_guest.tar.gz /home/guest |
Le paramètre
-c indique qu'on veut créer une sauvegarde, le paramètre
-v rend la commande un peu plus parlante (au moins, on sait ce qu'elle fait la petite cachottière

) et le paramètre
-f signifie qu'on doit assembler l'archive dans un fichier.
N'oubliez pas le paramètre "-z", il permet de profiter de la compression GNU des données, pour réduire la place occupée par ces dernières !
Pour restaurer le répertoire home que l'on vient de sauvegarder, on se place d'abord dans /(racine), ensuite :
Code : Console | tar -xvzf /media/votre_media/home_de_guest.tar.gz home/guest |
Le paramètre
-x exprime qu'on extrait un fichier pour le restaurer.
Vous aurez remarquez que je n'ai pas mis le "/" devant home, au deuxième argument de tar. Pour une raison que j'ignore, tar omet les "/" dans ce cas là... C'est pour ça qu'il faut se placer dans le répertoire /(racine) avant toute restauration
Si on désire sauvegarder l'intégralité de son système, la marche à suivre est identique, à l'exception près que le dossier n'est pas /home/guest, mais uniquement /.
Si on veut regarder le contenu d'une archive.tar sans en extraire quoi que ce soit, on fait :
Code : Console | tar -tf /emplacement_archive/archive.tar |
Le paramètre
-t permet de lister le contenu de l'archive.
Si maintenant on s'aperçoit après création de l'archive.tar qu'on a oublié un fichier, on l'ajoute via :
Code : Console | tar -rvf /emplacement_archive/archive.tar /emplacement_fichier/fichier_a_ajouter |
Le paramètre
-r donne la possibilité d'ajouter un fichier à l'archive.
C'est pénible de devoir, à chaque sauvegarde, préciser quels dossiers sauvegarder manuellement, ya pas un autre moyen de le faire ?
Évidemment si
Il faut, pour cela, utiliser ce qu'on appelle un script bash et automatiser son lancement si nécéssaire via la crontab.
Je vous encourage d'ailleurs à utiliser la solution du script, elle permet de sauvegarder plusieurs dossiers à la fois en un seul clic !
Pratique si on préfère ne pas devoir spécifier manuellement quels dossiers sauvegarder à chaque sauvegarde.
J'en parlerai après, je vais d'abord expliquer comment réaliser une sauvegarde incrémentale au moyen de la commande
tar pour information.
La sauvegarde incrémentale avec tar
On va pour cela utiliser la commande touch.
Imaginons qu'on veuille sauvegarder les fichiers modifiés (ou créés) après le 29 juillet à 00h05.
On fera :
Code : Console | touch -t 07290005 .comparaison
find ~ -newer .comparaison | tar -c -T - -f /media/votre_media/incr.tar |
La première commande va créer un fichier caché nommé comparaison qui servira de base pour comparer. Les paramètres à indiquer à la commande touch font croire au système que vous avez créé le fichier .comparaison le 29/07 à 00h05.
Attention au format de la date.
Ensuite, au moyen de la commande find, on compare la date de création du fichier comparaison avec le reste du système, et tout ce qui a été créé ultérieurement au fichier .comparaison (tel qu'on a falsifié sa création

) est envoyé à la commande tar, au moyen du pipe "|", qui se charge de la sauvegarde.
Pratique non ?
Cette possibilité était donnée à titre informatif, les commandes dump/restore gèrent remarquablement bien la sauvegarde incrémentale.
On sait maintenant comment réaliser une sauvegarde complète de tout le système, une sauvegarde incrémentale de tout le système. On va voir comment automatiser ces actions au moyen d'un script !
Création d'un script bash de sauvegarde complète
J'espère que vous avez lu la fin du
tutoriel de M@teo21 où est expliquée la structure des scripts bash, afin que vous comprenniez la construction de celui qui va suivre.
Plutot que de vous expliquer ligne par ligne, je vais vous livrer un script où les lignes seront commentées dedans même.
Les données sont systématiquement écrasées à chaque sauvegarde avec les scripts suivants.
Voici d'abord un script qui sauvegarde les dossiers que vous lui avez spécifiés dans une archive
backup.tar.gz sur le support que vous aurez choisi.
Code : Bash 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | #!/bin/sh
# Enregistrez ce script sous le nom de backup.sh. Prennez note de son emplacement.
echo "------------------------------------------------------";
echo "- Sauvegarde complète du système";
echo "------------------------------------------------------";
echo "";
echo "Création de l'archive";
# On crée l'archive .tar en précisant entre guillemets les chemins absolus des dossiers à sauvegarder.
tar -cvzf /votre_support/backup.tar.gz "/etc/" "/root" "/home" "/var" "/usr/local"
echo "------------------------------------------------------";
echo "";
echo "Vérification de l'existence de l'archive";
# On teste si l'archive a bien été créée
if [ -e /votre_support/backup.tar.gz ]
then
echo ""
echo "Votre archive a bien été créée.";
echo ""
else
echo ""
echo "Il y a eu un problème lors de la création de l'archive.";
echo ""
fi
echo "### Fin de la sauvegarde. ###";
|
Ensuite, un script qui va chercher l'archive précédemment créée, qui en extrait l'intégralité des fichiers/répertoires et qui les replace à leur emplacement initial.
Code : Bash 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/sh
# Enregistrez ce script sous le nom restore.sh. Prennez également note de son emplacement.
echo "------------------------------------------------------";
echo "- Restauration du système";
echo "------------------------------------------------------";
echo "";
echo "Récupération et extraction de l'archive";
# On se place à la /(racine), comme je l'ai expliqué tout à l'heure.
cd /
# On extrait les répertoires archivés en ne mettant PAS le / devant, comme expliqué tout à l'heure.
tar -xvzf /votre_support/backup.tar.gz "etc" "root" "home" "var" "usr/local"
echo "------------------------------------------------------";
echo "";
echo "### Fin de l'extraction des fichiers. ###";
|
Vous connaissez la manoeuvre à appliquer sur ces deux scripts pour les rendre exécutables.
Un petit coup de :
Code : Console | chmod +x backup.sh restore.sh |
Et le tour est joué
Ce serait un bon exercice que de créer un script permettant de sauvegarder incrémentiellement ses données tous les jours et de les sauvegarder complètement une fois par mois !
Ensuite, je vous laisse le soin de créer un éventuel lanceur sur votre bureau pour éviter de devoir répéter l'opération qui consiste à se placer dans le dossier où est enregistré le script et à l'exécuter.
Ce qui se fait via les commandes suivantes :
Code : Console | cd /dossier_du_script
./votre_script.sh |
Automatisation des tâches
Si, comme moi, ça vous dérange encore de devoir cliquer pour sauvegarder vos données (on peut oublier de le faire, aussi...) alors il va falloir automatiser tout cela via la crontab.
Je ne vais pas vous la décrire dans le détail, pour cela, repportez-vous au
tutoriel de M@teo21.
Bon, dans un console, lancez :
Code : Console
Et choisissez 3 pour Nano, à moins que vous ne préfériez Vim ou emacs (si vous l'avez installé).
Votre écran devrait ressembler à ceci :
Code : Console | GNU nano 2.0.7 Fichier : /tmp/crontab.4u4jHU/crontab
# m h dom mon dow command
[ Lecture de 1 ligne ]
^G Aide ^O Écrire ^R Lire fich.^Y Page préc.^K Couper ^C Pos. cur.
^X Quitter ^J Justifier ^W Chercher ^V Page suiv.^U Coller ^T Orthograp. |
Rajoutez une ligne comme celle-ci, pour que vos sauvegardes soient effectuées tous les lundis à 19h30 par exemple.
Code : Console | 30 19 * * 1 cd /dossier_où_est_enregistré_backup.sh | ./backup.sh |
Enregistrez votre fichier via Nano, la crontab vous informe de la prise en compte des changements et le compte est bon.
Inutile d'automatiser la restauration de données. À moins que vous ne prévoyiez de perdre vos données toujours au même moment, c'est un peu inutile (je dis ça plus pour rire qu'autre chose).
Cas du serveur distant par SSH
Alors, je n'ai pas encore trop parlé de la sauvegarde distante sur un serveur par SSH.
Je ne vais pas vous expliquer ici comment fonctionne la synchronisation sur un serveur par le protocole SSH, ce n'est pas le but du tuto.
Sachez que si vous désirez sauvegarder vos données sur un serveur distant, le mieux est encore de créer son archive.tar.gz, de la stocker localement (sur votre disque même ou sur un disque dur externe) et d'ensuite l'envoyer via SSH sur votre serveur distant.
Tenez, voici un exemple pratique. On souhaite envoyer l'archive backup.tar.gz sur son serveur via le protocole SSH.
Il faut pour cela utiliser un client SSH !
Je vous recommande d'utiliser
SCP (pour
Ssh
Co
Py) qui s'utilise comme la commande
cp (installation classique via le gestionnaire de paquets).
Il est évident qu'il faut au préalable s'identifier avant toute transaction avec le serveur.
La commande suivante permet de se connecter au serveur, moyennant l'entrée de votre mot de passe (il ne s'affichera pas lorsque vous le rentrerez, comme d'habitude en console) :
Code : Console | ssh utilisateur@votreserveur.com |
Revenons en à notre exemple ! On fera donc :
Code : Console | scp /emplacement_archive/backup.tar.gz utilisateur@serveurdistant.exemple.fr |
Ce qui aura pour effet de copier notre archive.tar.gz dans le répertoire courant du compte sous lequel vous êtes connecté sur le serveur distant !
Il est évident que si l'on désire utiliser les scripts bash mis à disposition, il faudra au préalable les modifier !
Si on désire récupérer ses données depuis le serveur distant, il faut d'abord récupérer l'archive et en extraire ensuite les fichiers.
Pour récupérer l'archive, on inverse simplement les opérandes de la commande
cp scp
Je ne vous fait pas l'injure de vous remettre la commande d'extraction/restauration des fichiers (allez si, quand même).
Code : Console | tar -xvzf /votre_support/backup.tar.gz "etc" "root" "home" "var" "usr/local" |
Où les dossiers entre guillements sont ceux, rappelons le, que vous aviez décidé de sauvegarder.
N'oubliez pas d'oublier (c'est le comble ça

) le "/" au début du chemin de vos dossiers.