La sauvegarde du système

Qu'est-ce que RSync ?

Contexte

Dans le cas d'une utilisation majeure de Linux, il est important de connaître les logiciels vous permettant de faire de la sauvegarde. Ici nous allons voir à quoi sert Rsync et comment l'utiliser. Cette tâche devant faire l'objet d'un suivi régulier, la mise en œuvre se fera de manière manuelle mais aussi de manière automatisée.

Introduction

RSync, pour Remote Synchronization, est un logiciel libre de synchronisation de fichiers ou dossiers.

RSync est un logiciel libre de sauvegarde, on parlera notamment de la sauvegarde incrémentale ou de la sauvegarde différentielle.

RSync fonctionne sous Linux, ici nous ferons une manipulation via Linux Debian 11, avec le paquet adéquat installé.

Le principe de fonctionnement de RSync est plutôt basique dans son utilisation simple. Vous renseignez les fichiers ou documents à sauvegarder et vous spécifiez l'endroit où il doit faire la sauvegarde.

Bien entendu, nous pouvons réaliser cette action de manière manuelle, ou de manière automatisée.

L'avantage que nous avons ici est que la sauvegarde peut se faire sur la même machine pour les essais mais aussi sur un serveur distant. Rappelez-vous de ce que vous avez déjà vu, il est préférable d'effectuer l'ensemble des sauvegardes sur un serveur ou un espace de stockage type cloud mais jamais sur la machine propre en question.

RSync se base donc sur un envoi de fichiers ou dossiers vers un espace de stockage. On parlera donc de la source (qui correspond à l'expéditeur) et l'hôte de réception (pour l'espace de stockage où se trouvera vos fichiers).

RSync analysera l'ensemble des fichiers ou dossiers qui sont envoyés et après comparaison, il n'enverra que les fichiers / dossiers qui ont été modifiés ou ajoutés à la sauvegarde.

Cette analyse entre les fichiers / dossiers de la source et celle de l'hôte de réception ne prendra en compte que les modifications effectuées sur la source.

ExempleCas

Prenons un dossier que nous appellerons « Travail ». Dans ce dossier se trouve un fichier nommé « BilanCompta.xls ». Ceci est conservé sur un serveur de fichiers que nous nommerons « Serv1 ».

On veut pouvoir sauvegarder ce dossier sur le deuxième serveur qui se nomme « Serv2 ».

Lors du premier envoi, une comparaison entre la source et l'hôte de réception va se faire et après cette comparaison, sachant que c'est le premier envoi, la copie se fera de manière intégrale (disons que ceci est fait le lundi).

Le jeudi, vous allez refaire une sauvegarde et on note que dans le dossier « Travail » se trouve un autre fichier en plus de l'existant qui se nomme « FeuilleCongé.xls ».

Lorsque vous allez lancer la sauvegarde, le même principe d'analyse se fera et à ce moment-là, il notera que « BilanCompta.xls » est déjà présent et n'a pas été modifié depuis, il ne copiera donc que le nouveau fichier « FeuilleCongé.xls ».

Dans le cas où le fichier « BilanCompta.xls » est modifié entre les deux sauvegardes, il effectuera une nouvelle sauvegarde du fichier pour le sauvegarder avec les modifications.

Commandes

RSync, comme d'autres logiciels, utilise des commandes avec ce que l'on appelle des arguments.

La commande pour signifier qu'on va solliciter RSync est très simple, il s'agit de rsync.

Les arguments possibles sont :

Nous allons voir le type de syntaxe que vous êtes susceptible de rencontrer.

Nous allons reprendre notre dossier « Travail », et nous allons voir une syntaxe simple de sauvegarde dans un premier temps, au fil des syntaxes vous aurez les informations mais ce sera toujours le dossier « Travail » qui sera référent.

1ère syntaxe : Sur le serveur même.

rsync /home/Directeur/Travail /tmp/Travail

rsync : commande pour dire que nous utilisons le logiciel RSync.

/home/Directeur/Travail : chemin du dossier source.

/tmp/Travail : chemin du dossier cible.

2ème syntaxe : vers un serveur distant « Serv2 ».

rsync /home/Directeur/Travail @ipServ2:/home/Sauvegarde/Travail

rsync : commande pour dire que nous utilisons le logiciel RSync.

/home/Directeur/Travail : chemin du dossier source.

@ipServ2:/home/Sauvegarde/Travail : chemin du dossier sur le serveur « Serv2 » (@ipServ2 pour spécifier l'adresse ip du serveur).

3ème syntaxe : vers un serveur distant « Serv2 » avec les arguments.

rsync -e ssh -avz /home/Directeur/Travail NomCompte@ipServ2:/home/Sauvegarde/Travail

rsync : commande pour dire que nous utilisons le logiciel RSync.

-e ssh : on demande la connexion ssh pour l'envoi des données.

-avz : on demande ici l'archivage puis le verbose et la compression.

/home/Directeur/Travail : chemin du dossier source.

@ipServ2:/home/Sauvegarde/Travail : chemin du dossier sur le serveur « Serv2 ». en spécifiant le nom du compte pour la connection ssh (@ipServ2 pour spécifier l'adresse ip du serveur).

Il ne vous reste plus qu'à mettre en application ceci dans la prochaine partie.

Mise en application et automatisation

Nous allons prendre deux serveurs Linux Debian 11, le premier se nommera « DebServ1 » et le deuxième se nommera « DebServ2 ».

Nous allons créer un dossier dans le home qui nous nommerons « Travail », a l'intérieur vous pouvez créer un fichier texte simple appelé « Test » (vous pouvez aussi faire les manipulations avec un autre fichier plus lourd si besoin, selon votre choix).

L'ensemble des manipulations se feront via ssh pour l'administration des deux serveurs.

Un exemple des deux paramétrages des serveurs « DebServ1  et « DebServ2 ».

MéthodeTest sur la machine Serv1 en local

Étape 1 : Installation du paquet pour Rsync.

apt-get update && apt-get upgrade -y

apt-get install rsync

Étape 2 : Création du dossier et du fichier.

Étape 3 : Essai de sauvegarde dans un autre dossier sur le serveur, ici ce sera le dossier /tmp.

rsync /home/Travail/ /tmp/Travail/

Étape 4 : Le dossier Travail a été créé, vérifions si le fichier « Test » est dedans.

Le fichier n'est pas présent, refaisons la commande avec l'argument « -a » pour l'archivage et le récursif.

Étape 5 : Commande avec argument « -a » et vérification.

Nous avons bien l'ensemble du dossier qui a été créé avec le fichier « Test ». C'est validé.

MéthodeEnvoi de la sauvegarde sur « DebServ2» avec ssh

On garde les mêmes éléments et on passe directement aux manipulations d'envoi sur le serveur « DebServ2 ».

Étape 1 : cCommande.

rsync -e ssh -avz /home/Travail geoff@192.168.100.20:/tmp/Travail/

Étape 2 : Vérification de l'obtention du dossier sur le « DebServ2 ».

Vous avez réussi à envoyer le dossier vers l'autre serveur. Nous allons pouvoir passer à la suite pour pousser l'exercice plus loin.

Complément

Delafond

Automatisation de la tâche avec « cron »

« Cron » c'est quoi ?

« Cron » est un outil de planification de tâche, il vous permettra d'automatiser certaines tâches que vous avez à réaliser de manière automatique. Un peu sur le même principe que le planificateur de tâches sous Windows.

Le principe de fonctionnement est simple, on se base sur une notion de temps et de la commande à exécuter, ceci se passe dans le fichier nommé « crontab ».

Sachant que « Cron » fonctionne avec une échelle de temps, il va falloir remplir dans un premier temps ces champs sous la forme suivante :

Pour la commande, nous savons que ceci est :

rsync -e ssh -avz /home/Travail geoff@192.168.100.20:/tmp/Travail/

Vous trouverez aussi « * » qui aura pour valeur de prendre tous les champs.

Il ne nous restera plus qu'à assembler les deux pour avoir notre commande. Pour cet exemple nous allons dire que cette tâche fonctionnera toutes les 5 minutes.

La syntaxe sera donc ceci :

Je vous invite comme pour RSync à ne pas hésiter à aller chercher des informations complémentaires sur son utilisation, cet outil très simple permet une très grande flexibilité dans son utilisation.

MéthodeMise en application de l'automatisation de la tâche

Étape 1 : Vérification de l'état du service « cron ».

systemctl status cron

Étape 2 : Accès au fichier « crontab » (Il est recommandé de procéder à une copie de ce fichier avant modification).

crontab -e puis choisissez avec quoi vous souhaitez ouvrir le fichier 1 pour Nano, 2 pour Vim.

Étape 3 : Vous obtenez donc un fichier entièrement commenter ( # ), mettez-vous sur la fin et ajouter la ligne :

*/5 * * * * rsync -e ssh -avz /home/Travail geoff@192.168.100.20:/tmp/Travail/

Étape 4 : Enregistrez le fichier et redémarrez le service « cron ».

systemctl restart cron puis systemctl status cron afin de s'assurer du bon redémarrage de celui-ci.

Étape 5 : Consultez les tâches inscrite dans « cron ».

crontab -l si ceci a bien été implémenté, vous devez retrouver votre ligne.

Étape 6 : Il nous faudra patienter 5 minutes avant la première exécution. Si vous souhaitez voir ce qu'il se passe, tapez cette commande pour avoir l'interaction en temps réel :

tail -f /var/log/cron.log

MTA pour Mail Transfert Agent, ceci peut vous être utile si vous souhaitez une notification d'état de fonctionnement de Rsync et Cron via mail, un outil comme postfix peut-être employé.

Ajout d'élément dans la sauvegarde

Dans la continuité de ce que nous avons vu dans la partie 1, nous allons ici compléter les actions en ajoutant de la difficulté et aussi faire une restauration d'un dossier « /home/ » sur une nouvelle machine virtuelle.

Rappel

Lors du précédent module (la sauvegarde partie 1) nous avons vu comment se présentait le principe de la sauvegarde avec RSync, ici nous allons aborder le même thème mais de manière un peu plus poussée.

Dans un premier temps, vous avez été capable de faire la sauvegarde d'un dossier avec un fichier, nous avons aussi parler que si nous ajoutons des fichiers dans le dossier, Rsync proposera une analyse avant la synchronisation afin de seulement ajouter les dossiers ou fichiers qui ont été modifiés.

Bien entendu cela est quand même très intéressant, plus besoin de procéder à une sauvegarde complète de tout à chaque session, juste ce qui à changer. Par conséquent cela veut dire aussi moins de trafic sur le réseau, moins de données en transit donc moins de temps.

ExempleMise en situation

Dans le cas où vous avez un dossier avec l'ensemble de vos fichiers en « .iso », ce dossier va très certainement peser très lourd (plusieurs Go). Si vous ajoutez un autre fichier « .iso », celui-ci sera donc une modification dans le dossier puisque vous avez ajouté un fichier.

Dans le cas d'une sauvegarde complète, vous auriez été obligé de sauvegarder une nouvelle fois l'ensemble du dossier en écrasant l'existant.

En revanche avec RSync, seul le fichier ajouté sera ajouté dans l'archive de sauvegarde, donc un gain de temps énorme.

Dossier ISO >>> 80 Go, on ajoute une nouvelle ISO dans le dossier de 4 Go.

Rsync va analyser le dossier, le comparer à l'archive de sauvegarde et verra que seulement ce fichier mérite d'être ajouté, le transfert ne sera donc pas de 84 Go (80 existant + 4 du nouveau) mais uniquement de 4 Go.

Mise en oeuvre

Qu'allons-nous faire ?

Nous allons voir comment se présente l'ajout d'un document dans le dossier et sa synchronisation dans un premier temps, par la suite nous verrons comment se présente une archive ainsi que sa désarchivation.

Nous reprendrons bien entendu ce qui a été fait précédemment.

RappelOn a fait quoi déjà ?

Lors du précédent module concernant la sauvegarde partie 1, nous avions créé un dossier nommé « Travail » avec un fichier « Test » à l'intérieur.

Ceci se trouvait sur le « DebServ1 », nous avons fait une sauvegarde avec RSync sur le serveur propre puis nous avons aussi envoyé cette sauvegarde sur le « DebServ2 ».

MéthodeOn y va !

Étape 1 : ajout d'un fichier nommé « CaMarche » dans le dossier « Travail »

Étape 2 : commande RSync pour envoyer la sauvegarde sur le DebServ2.

rsync -avz /home/Travail/ root@192.168.100.20:/home/geoff/Travail

Étape 3 : vérification sur le serveur « DebServ2 »

Étape 4 : voyons en ajoutant un dossier nommé « BilanCompta » sur « DebServ1 » puis exécutons RSync.

Étape 5 : constat

On note bien que seul le dossier « BilanCompta » a été ajouté lors de la synchronisation de la sauvegarde avec Rsync.

Étape 6 : si on modifie un fichier / dossier, regardons ce qu'il se passe. Nous allons modifier le fichier « Test » en ajoutant un texte lambda dedans et enregistrer. A la suite de ça nous envoyons une nouvelle fois la sauvegarde.

Étape 7 : maintenant supprimons le fichier « Test » et voyons le résultat.

On constate que ceci n'a pas affecté le dossier d'archive sur « DebServ2 ». Effectivement, cela est plutôt rassurant, si nous supprimons accidentellement un fichier sur « DebServ1 », nous pourrons le récupérer sur « DebServ2 ».

Ajout d'un fichier compresser avec « tar »

Tar, comment l'utiliser ?

Tar, programme permettant la compression et la décompression d'un fichier / dossier ou d'un ensemble de fichier / dossier. C'est exactement la même chose que « winzip ». On prend des fichiers / dossiers et on les compresse pour obtenir une archive.

On retrouve souvent comme format de compression « gzip », cela donnera une archive sous ce format « nomarchive.tar.gz ».

Il existe aussi d'autres formats comme le « Bzip », « Lzma ». Comme pour l'ensemble des commandes sous Linux, l'argument choisi fera le reste.

Exemple de syntaxe :

tar [argument] [nomdelarchive] [DossierCible]

Un petit tour des arguments :

-c : création de l'archive.

-x : extraire l'archive.

-v : verbose (on le fait parler).

-z pour la compression au format Gzip.

-f : utilisation du fichier donnée.

Bien plus d'arguments existent mais n'étant pas l'objet de ce module, je vous laisse le plaisir de vous renseigner sur l'ensemble des possibilités.

TAR

MéthodeCréation d'une archive

Étape 1 : Sur « DebServ1 », nous allons créer l'archive sur le dossier « Travail »

tar -cvf Travail.tar /home/Travail/

Étape 1Bis : variante en Gzip

tar -zcvf Travail.tar.gz /home/Travail/

Étape 2 : décompression de l'archive « Travail.tar », le dossier « Travail » ayant servi est supprimé, si le résultat est OK, on retrouvera le dossier « Travail » après l'extraction.

rm -r Travail

tar -xvf /home/Travail.tar

Étape 2bis : faisons la même chose en avec l'archive « tar.gz »

Rsync et tar

Sauvegarde de l'archive « .tar »

Maintenant que vous avez vu comment se présente l'archivage avec « tar », nous allons pouvoir envoyer cette archive au second serveur « DebServ2 ».

Dans le même temps, nous allons voir comment se présente l'implémentation d'un nouveau fichier dans l'archive ainsi que son extraction.

MéthodeRsync et Tar

Étape 1 : nous allons envoyer l'archive « Travail.tar » (vous pouvez aussi le faire avec « Travail.tar.gz ») sur « DebServ2 ».

rsync -avz /home/Travail.tar root@192.168.100.20:/home/geoff/Travail

Étape 2 : maintenant l'archive est envoyée sur « DebServ2 », nous allons voir si il est possible de le décompresser aussi sur ce serveur afin de pouvoir récupérer le dossier « BilanCompta ».

RappelAutomatisez si besoin

Dans la mesure du possible il sera préférable d'automatiser ce genre de tâche pour que ceci ne soit pas une corvée à mettre en œuvre. Nous avons vu que Cron nous permet d'automatiser la tâche de synchronisation Rsync, en revanche il ne sera pas pratique d'utiliser Cron pour l'archivage.

Il vous sera possible de réaliser un script qui prendre en compte l'archivage avec tar puis par la suite l'envoi via Rsync. À ce moment-là, Cron pourra être mise en œuvre pour déclencher cette tâche qui est exprimée dans le script.

MéthodeAjout d'un fichier à l'archive

Étape 1 : ajoutons le dossier « Direction » au dossier existant « Travail »

Étape 2 : procédons à son archivage.

tar -cvf Travail.1.tar --listed-incremental=/home/geoff/geoff.list /home

Étape 3 : ajoutons un autre dossier dans « Travail » qui se nommera « RessHumaine »

Étape 4 : sauvegarde incrémentale

tar -cvf Travail.2.tar --listed-incremental=/home/geoff/geoff.list /home

Nous voyons ici que le dossier « RessHumaine » a bien été détecté comme nouveau dossier. La numérotation des archives permettra de savoir aussi laquelle est la plus récente (il est aussi possible de le faire par date).

Étape 5 : restauration d'une archive, commençons par la numéro 1. (On aura prit la délicatesse de supprimer le dossier « Travail »)

tar --extract --listed-incremental=/dev/null --file Travail.1.tar

Nous notons bien une erreur avec la première syntaxe.

Étape 6 : restauration de l'archive numéro 2.

tar --extract --listed-incremental=/dev/null --file Travail.2.tar

Visiblement ici, aucune erreur.

Étape 7 : vérification de l'extraction de l'archive.

Nous avons bien récupéré l'ensemble de notre dossier Travail avec les dossiers à l'intérieur.

Restauration complète

Cas pratique

Nous allons prendre le cas où vous avez besoin de restaurer l'ensemble de la machine sur une nouvelle machine virtuelle Linux. Nous allons voir comment faire ceci.

Il vous faudra bien entendu créer une nouvelle VM Linux Debian 11, fraîchement installée pour réaliser ces manipulations.

Pour ce faire nous allons sauvegarder l'ensemble du dossier « /home » de « DebServ1 ». Par la suite nous mettrons en place la restauration de ce dossier sur la nouvelle VM Linux Debian 11.

MéthodeMise en pratique

Étape 1 : archivage du dossier « /home » du serveur « DebServ1 ».

tar -zcvf homeDebServ1.tar.gz /home

Étape 2 : envoi de l'archive sur le « DebClient » dans l'espace « /tmp » puis nous allons procéder à sa restauration en lieux et place du « /home » actuel.

Étape 3 : restauration de l'archive en lieux et place

tar -zxvf homeDebServ1.tar.gz home

On a bien l'ensemble des éléments de l'archivage correspondant a « DebServ1 ».

Étape 4 : remplacement du fichier /home par celui-ci.

cp -r home /

Étape 5 : vérifions sur la partie graphique par la même occasion histoire d'avoir un meilleur retour. (Dans le cas d'un serveur, un simple « ls » fera tout aussi bien le travail comme ci-dessus).

Nous avons bien l'ensemble de l'arborescence créer sur le serveur « DebServ1 »

Fondamental

Pour créer une archive, vous pouvez utiliser un outil comme « Tar », puis le coupler avec Rsync pour en faire la sauvegarde. Rsync effectue bien une synchronisation mais effectue aussi une analyse des données afin de voir quel fichiers / dossiers a été modifié et n'enverra uniquement que les données modifiées. Cela permettra d'avoir des temps de sauvegarde plus courts et une charge moins lourde en transfert.

Pensez à pratiquer assez souvent pour bien prendre l'habitude et surtout chercher à étoffer ses connaissances pour utiliser les commandes « man » ou encore les fonctione « --help », vous verrez un grand nombre d'arguments possibles qui vous sera utile selon vos besoins. Souvenez-vous que l'espace /tmp est la représentation d'un espace de stockage temporaire, il est pratique quand vous avez des documents ou archives à utiliser de manière temporaire comme pour de l'installation ou alors pour désarchiver par exemple.