Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'un script de sauvegarde sur 5 point

Rsync sous linux

Sujet résolu
10 juillet 2010 à 21:04:45

Bonsoir à tous.

Voila, je suis en train de réfléchir sur un système de sauvegarde de mes données.
Actuellement, chaque soir, je sauvegarde mes données (windows et linux) sur un disque dur externe.
Voici mon script:
sudo rsync -rLtgoDv --del --ignore-errors --force /home/ /media/Elements/backup
sudo rsync -rLtgoDv --del --ignore-errors --force /media/windowsseven/Users/Pascal/Desktop/ /media/Elements/backup/mesdocumentsseven/Bureau


En gros, je fais du différentiel dans le but de sauvegarder les documents sur windows (photo, projet créer sous photoshop) et sous linux (document perso + script et projet web).
Seulement, ce type de sauvegarde me semble un peu pauvre! Je m'explique, je n'ai qu'un seul point de sauvegarde.
J'aimerais optimisé ce script dans le but d'avoir au minimum, 5 sauvegardes. En gros mon idée est d'avoir 5 dossiers backup:
Backup 1 .... Backup 2.... .... ..... .... Backup 5.
Je souhaiterais pouvoir synchroniser chaque jour dans un dossier différent. Comme ça, je pourrais récupérer un fichier que j'aurais supprimer, 3 sauvegardes avant par exemple.
Pensez vous que cela soit possible?

Merci d'avance.
lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
10 juillet 2010 à 22:06:02

Citation : lemirandais

Je souhaiterais pouvoir synchroniser chaque jour dans un dossier différent. Comme ça, je pourrais récupérer un fichier que j'aurais supprimer, 3 sauvegardes avant par exemple.


Si c'est juste pour ça, pas besoin de garder 5 sauvegardes complètes. Il te faut juste garder les modifications entre deux sauvegardes.
Pour ça, tu peux regarder du côté de l'option --backup de rsync (d'autres softs, comme rdiff-backup ou cpio te permettent de faire ça bien aussi).

Après, si tu veux juste faire une sauvegarde complète dans un dossier différent à chaque fois, tu peux utiliser date(1) pour nommer tes dossiers :
#!/bin/sh
DATE=$(date +%y%m%d)
mkdir /chemin/vers/backup-$DATE
rsync <options> <dossier_à_sauvegarder> /chemin/vers/backup-$DATE

  • Partager sur Facebook
  • Partager sur Twitter
10 juillet 2010 à 22:25:34

Citation : kna


Après, si tu veux juste faire une sauvegarde complète dans un dossier différent à chaque fois, tu peux utiliser date(1) pour nommer tes dossiers :

#!/bin/sh
DATE=$(date +%y%m%d)
mkdir /chemin/vers/backup-$DATE
rsync <options> <dossier_à_sauvegarder> /chemin/vers/backup-$DATE




Oui mais là, sa me fait copier 35go de donnée à chaque sauvegarde. (oui j'ai presque 2 ans de photo)

L'idée théorique est de faire une seule backup complete, la cloner à 5 fois, meme 3, je pense que sa sera suffissant et de basculer chaque jour automatique sur un dossier backup différent, sans devoir chaque fois faire une backup complete.
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
12 juillet 2010 à 9:00:07

@kna: en relisant ta réponse: "Si c'est juste pour ça, pas besoin de garder 5 sauvegardes complètes. Il te faut juste garder les modifications entre deux sauvegardes.
Pour ça, tu peux regarder du côté de l'option --backup de rsync."
C'est je pense la meilleure solution, car de cette manière, je ne suis pas oublié de tous resynchroniser. Le seul problème c'est que je ne vois pas quelle option permet de faire ceci.
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
13 juillet 2010 à 11:53:11

Citation : elalitte

J'ai fait un tuto là dessus si cela t'intéresse.



Je viens de lire ton tutoriel et je le trouve très bien fait, j'ai mieux compris la différence entre différentiel et incrémentiel. Cependant, je ne vois pas comment faire avec la méthode incrémentielle pour récupérer les données à une date D.
Vu que je suis assez nul dans les scripts bash, quelqu'un pourrait-il me donner un petit coup de main SVP.


Merci d'avance.
lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
13 juillet 2010 à 12:07:42

Le principe est que ton script va créer chaque jour un répertoire qui contiendra les données modifiées ou effacées dans la journée.
Ainsi, si tu as perdu un fichier il te suffira de retourner le jour où tu l'as effacé, et bingo !
Si jamais tu ne connais pas le jour exact, tu pourras faire une recherche par nom.

Le script donné dans le tuto est déjà plus ou moins prêt à être utilisé, nous pouvons t'aider si tu as des questions sur certaines lignes:

#!/bin/sh

 # Script de sauvegarde incrementale du repertoire /original sur la machine serveur

 # Ce script utilise l'outil de synchronisation rsync pour faire une image
 # globale du repertoire /original de la machine serveur dans le repertoire
 # /copie/main/ de la machine client. 
 # Les sauvegardes incrementales journalieres sont dans chacun
 # des repertoires identifies par la date dans le repertoire
 # /copie/old_data. Par exemple, le repertoire
 # 2004-11-25 contiendra les valeurs des fichiers a ce jour qui seront
 # recuperables.

 # Variable representant le jour de la sauvegarde
 JOUR=`date +%Y-%m-%d`

 # On cree le repertoire du jour et un fichier timer qui nous donnera
 # les heures de debut et de fin du transfert
 if [ -d "/copie/old_data/$JOUR" ]
 then
   echo "Le repertoire /copie/old_data/${JOUR} existe deja !";
 else
   mkdir /copie/old_data/$JOUR;
 fi
 touch /copie/old_data/$JOUR/timer
 echo "---------------------------------" >> /copie/old_data/$JOUR/timer
 echo "Heure de demarrage du transfert:" >> /copie/old_data/$JOUR/timer
 date >> /copie/old_data/$JOUR/timer
 echo "---------------------------------" >> /copie/old_data/$JOUR/timer

 # On lance le script rsync de transfert des fichiers
 /usr/local/bin/rsync -e ssh --force --ignore-errors  
          \ --delete --backup --backup-dir=/copie/old_data/$JOUR -av serveur::original/ 
          \ /copie/main

 # On ecrit l'heure de fin dans le timer
 echo "Heure de fin du transfert:" >> /copie/old_data/$JOUR/timer
 date >> /copie/old_data/$JOUR/timer
 echo "---------------------------------" >> /copie/old_data/$JOUR/timer

 # On detruit les fichiers vieux de plus de 30 jours
 find /mnt/sauvegarde/old_data/ -atime +30 -exec rm -rf {} \;


  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2010 à 13:56:52

Merci pour ce script.
Si je comprend bien, je fais une seule copie globale et chaque jour, sa enregistre les fichiers modifier entre le jour de la sauvegarde globale et le jour en cours.
Est ce bien cela car supposons qu'au jour 15, j'ai ajouter 1go, a partir du 16eme jour, je recopie les fichiers plus le meme giga que celui du jour 15 et ainsi de suite.
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
13 juillet 2010 à 15:15:42

Citation : lemirandais

Merci pour ce script.
Si je comprend bien, je fais une seule copie globale et chaque jour, sa enregistre les fichiers modifier entre le jour de la sauvegarde globale et le jour en cours.
Est ce bien cela car supposons qu'au jour 15, j'ai ajouter 1go, a partir du 16eme jour, je recopie les fichiers plus le meme giga que celui du jour 15 et ainsi de suite.


Exactement.
Si tu ajoutes des trucs, ça va dans le répertoire de copie, si tu en enlèves, ça va dans le répertoire de backup du jour en cours.
Globalement, tu ne copies que très peu d'infos chaque jour une fois que la synchronisation a été faire une fois.
  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2010 à 15:42:02

Actuellement je copie chaque soir le dossier /home vers mon disque dur /media/Elements/backup/

Je ne passe pas par ssh car je suis en local et que je ne trouve pas l'utilité de le faire.

Si je comprend bien mon code, je dois remplacé dans ton script
/copie/old_data/ par /media/Elements/backup/old_data
/copie/main/ par /home
et modifier la derniere ligne par /media/Elements/backup/old_data -atime +7 -exec rm -rf {} \;


Il faut donc maintenant modifier la ligne de commande rsync pour la passer de ssh à du normal.

Pour résumer, chaque fichier ajouter et modifier sont ajouté dans /media/Elements/backup/ et les les fichiers supprimer sont enregistré dans /media/Elements/backup/old_data

Désolé de paraitre lourd, mais je préfère tous comprendre que de l'appliquer bêtement.

lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
13 juillet 2010 à 17:47:37

Citation : lemirandais

Actuellement je copie chaque soir le dossier /home vers mon disque dur /media/Elements/backup/

Je ne passe pas par ssh car je suis en local et que je ne trouve pas l'utilité de le faire.

Si je comprend bien mon code, je dois remplacé dans ton script
/copie/old_data/ par /media/Elements/backup/old_data
/copie/main/ par /home
et modifier la derniere ligne par /media/Elements/backup/old_data -atime +7 -exec rm -rf {} \;


En fait non :p
La source de ce que tu veux copier /home/ c'est mon partage "original/" ici. Dans le tp, c'est le partage qu'on créé dans rsyncd.conf.
Ensuite, l'endroit dans lequel on fait la copie est /copie/main/, ce qui correspond à ton /media/Elements/backup/main/
Puis, je copie tous les fichiers effacés à une date donnée dans un répertoire à la date du jour /copie/old_data/$JOUR, ce qui pourrait correspondre chez toi à /media/Elements/backup/backup/$JOUR

Citation : lemirandais

Désolé de paraitre lourd, mais je préfère tous comprendre que de l'appliquer bêtement.


Au contraire, c'est ce que j'appelle être intelligent moi de toujours chercher à bien comprendre ce que l'on fait ;)
  • Partager sur Facebook
  • Partager sur Twitter
14 juillet 2010 à 11:56:21

Bonjour

Je suis en train de relire ton tutoriel

Voici ce que j'ai fait:

lemirandais@lemirandais-laptop:~$ rsync --daemon
lemirandais@lemirandais-laptop:~$ sudo netstat -anp | grep rsync
[sudo] password for lemirandais: 
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3007/rsync      
tcp6       0      0 :::873                  :::*                    LISTEN      3007/rsync

Puis

root@lemirandais-laptop # nano /etc/rsyncd.conf
 # Fichier de configuration de rsync
 uid = root
 gid = root
 log file = /var/log/rsyncd.log

 [original]
   path = /home
   comment = Le répertoire à copier
   list = yes
   read only = yes

Puis j'ai ceci:
lemirandais@lemirandais-laptop:~$ rsync 127.0.0.1::
original       	Le repertoire à copier


Je pense que j'ai un problème quelque part car je ne comprend pourquoi il ne me met pas home à la place de original.


  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
15 juillet 2010 à 11:01:00

C'est correct.
En fait c'est le nom du partage qui apparaît, c'est normal, mais c'est bien ton répertoire /home qui est partagé, si tu fais une synchro, ce sera avec /home.
  • Partager sur Facebook
  • Partager sur Twitter
15 juillet 2010 à 20:45:09

Je n'ai pas eu le temps de tester car je suis énormément occupé (festival dans ma ville et je fais tous les soirs des photos).
Si j'ai bien compris, voici le code qui devrait fonctionner chez moi:
#!/bin/sh

 # Script de sauvegarde incrementale du repertoire /original sur la machine serveur

 # Ce script utilise l'outil de synchronisation rsync pour faire une image
 # globale du repertoire /original de la machine serveur dans le repertoire
 # /copie/main/ de la machine client. 
 # Les sauvegardes incrementales journalieres sont dans chacun
 # des repertoires identifies par la date dans le repertoire
 # /copie/old_data. Par exemple, le repertoire
 # 2004-11-25 contiendra les valeurs des fichiers a ce jour qui seront
 # recuperables.

 # Variable representant le jour de la sauvegarde
 JOUR=`date +%Y-%m-%d`

 # On cree le repertoire du jour et un fichier timer qui nous donnera
 # les heures de debut et de fin du transfert
 if [ -d "/media/DISQUEDUR/backup/old_data/$JOUR" ]
 then
   echo "Le repertoire /media/DISQUEDUR/backup/old_data/${JOUR} existe deja !";
 else
   mkdir /media/DISQUEDUR/backup/old_data/$JOUR;
 fi
 touch /media/DISQUEDUR/backup/old_data/$JOUR/timer
 echo "---------------------------------" >> /media/DISQUEDUR/backup/old_data/$JOUR/timer
 echo "Heure de demarrage du transfert:" >> /media/DISQUEDUR/backup/old_data/$JOUR/timer
 date >> /media/DISQUEDUR/backup/old_data/$JOUR/timer
 echo "---------------------------------" >> /media/DISQUEDUR/backup/old_data/$JOUR/timer

 # On lance le script rsync de transfert des fichiers
 /usr/local/bin/rsync -e ssh --force --ignore-errors  
          \ --delete --backup --backup-dir=/media/DISQUEDUR/backup/old_data/$JOUR -av 127.0.0.1::original/ 
          \ /media/DISQUEDUR/backup/main

 # On ecrit l'heure de fin dans le timer
 echo "Heure de fin du transfert:" >> /media/DISQUEDUR/backup/old_data/$JOUR/timer
 date >> /media/DISQUEDUR/backup/old_data/$JOUR/timer
 echo "---------------------------------" >> /media/DISQUEDUR/backup/old_data/$JOUR/timer

 # On detruit les fichiers vieux de plus de 30 jours
 find /media/DISQUEDUR/backup/old_data/ -atime +30 -exec rm -rf {} \;

  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
16 juillet 2010 à 9:20:32

Ben je testerais la semaine prochaine, je suis un peu pris ce week end.

Dernière question, pour la récupération des données, par exemple, si mon disque dur principal crame (j'espère pas), comment faire pour récupérer les données "backé"?

Merci pour ton aide elalitte.
lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
16 juillet 2010 à 10:40:46

Citation : lemirandais

Ben je testerais la semaine prochaine, je suis un peu pris ce week end.

Dernière question, pour la récupération des données, par exemple, si mon disque dur principal crame (j'espère pas), comment faire pour récupérer les données "backé"?

Merci pour ton aide elalitte.
lemirandais



Tu n'auras plus qu'à refaire une synchro inverse de ton main vers ton nouveau disque !
  • Partager sur Facebook
  • Partager sur Twitter
16 juillet 2010 à 10:45:28

Ok, merci pour cette réponse rapide. Le problème est presque résolu.
J'ai un dernier soucis, mais qui concerne mon organisation de travail sous windows.
Dans mon dossier home, j'ai mon dossier des travails, un dossier contenant ma base de donnée mysql, et un dossier symbolique qui correspond au dossier mes documents de windows.
A ce niveau j'ai un petit problème, j'aimerais copier également de contenu du Bureau de windows car il m'arrive que j'enregistre dessus des PJ reçu par mail.
Sous linux, même si j'ai la même organisation que sous windows, je ne suis pas ce problème car le Bureau est présent dans /home/lemirandais/

Comment ferais tu, un autre lien symbolique dans /home?

Quel serait la meilleur solution?

lemirandais

EDIT: pour la synchro inverse, je suppose une ligne de commande comme ceci:
/usr/local/bin/rsync -e ssh --force --ignore-errors  
          \ --delete --backup --backup-dir=127.0.0.1::original/ -av  
          \ /media/DISQUEDUR/backup/main
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
16 juillet 2010 à 10:53:24

Citation : lemirandais

Ok, merci pour cette réponse rapide. Le problème est presque résolu.
J'ai un dernier soucis, mais qui concerne mon organisation de travail sous windows.
Dans mon dossier home, j'ai mon dossier des travails, un dossier contenant ma base de donnée mysql, et un dossier symbolique qui correspond au dossier mes documents de windows.
A ce niveau j'ai un petit problème, j'aimerais copier également de contenu du Bureau de windows car il m'arrive que j'enregistre dessus des PJ reçu par mail.
Sous linux, même si j'ai la même organisation que sous windows, je ne suis pas ce problème car le Bureau est présent dans /home/lemirandais/

Comment ferais tu, un autre lien symbolique dans /home?


Si tu synchronise /home, tu auras aussi /home/lemirandais car rsync est récursif. Donc normalement ça devrait le faire.

Citation : lemirandais

EDIT: pour la synchro inverse, je suppose une ligne de commande comme ceci:

/usr/local/bin/rsync -e ssh --force --ignore-errors  
          \ --delete --backup --backup-dir=127.0.0.1::original/ -av  
          \ /media/DISQUEDUR/backup/main

A priori non, il faut que tu créées un nouveau partage dans ton rsyncd.conf qui pointe vers ton main, puis que tu synchronise vers ton nouveau répertoire /home. (pas besoin de backup pour la copie, ensuite tu referas le script habituel pour refaire de nouveaux backups)
  • Partager sur Facebook
  • Partager sur Twitter
23 juillet 2010 à 21:20:36

Je viens de tester le script et voici le message d'erreur que j'ai en retour:

sh sauvegarde2test.sh 
ssh: connect to host 127.0.0.1 port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [Receiver=3.0.7]
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
25 juillet 2010 à 11:24:45

J'utilise encore mon premier script de backup mais j'aimerais bien passer à cette version 2.
Quelqu'un pourrait-il m'aider à finir le script?

Merci d'avance
lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
27 juillet 2010 à 11:01:03

Personne ne voit d'où vient le problème?

lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
28 août 2010 à 21:07:41

Je me permet de relancer le topic car le script ne fonctionne pas.
Si quelqu'un peut m'aider.

Merci d'avance
lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
30 août 2010 à 8:54:48

Il dit qu'il n'arrive pas à se connecter en ssh.
Le script fonctionne-t-il en rsync simple ?
Le ssh fonctionne-t-il ?
  • Partager sur Facebook
  • Partager sur Twitter
30 août 2010 à 13:28:12

rsync fonctionne puisque mon premier script que j'utilise encore fonctionne.
ssh sur l'ip 127.0.0.1 fonctionne aussi

lemirandais
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
30 août 2010 à 13:55:03

Alors comment expliquer cela ?
"ssh: connect to host 127.0.0.1 port 22: Connection refused"

Il faudrait que tu mettes en place une authentification par clef ssh pour que ce soit automatique.
  • Partager sur Facebook
  • Partager sur Twitter
30 août 2010 à 20:46:59

Citation : elalitte

Alors comment expliquer cela ?
"ssh: connect to host 127.0.0.1 port 22: Connection refused"

Il faudrait que tu mettes en place une authentification par clef ssh pour que ce soit automatique.


Regarde ce qui ce passe quand je me connecte en ssh
ssh leknoppix@127.0.0.1
leknoppix@127.0.0.1's password: 
Linux leknoppix-laptop 2.6.32-22-generic #36-Ubuntu SMP Thu Jun 3 22:02:19 UTC 2010 i686 GNU/Linux
Ubuntu 10.04.1 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/

Your CPU appears to be lacking expected security protections.
Please check your BIOS settings, or for more information, run:
  /usr/bin/check-bios-nx --verbose

9 packages can be updated.
0 updates are security updates.

Last login: Sat Jul 24 10:42:37 2010 from localhost


Puis le script suivant fonctionne bien:
sudo rsync -rLtgoDv --del --ignore-errors --force /home/ /media/Elements/backup
sudo rsync -rLtgoDv --del --ignore-errors --force /media/windowsseven/Users/Pascal/Desktop/ /media/Elements/backup/mesdocumentsseven/Bureau


Pour les clé ssh, ça sera après.

lemirandais

  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
31 août 2010 à 9:46:54

Ah oui mais non !
En ssh tu te connectes en leknoppix et en ssh en root.

Par ailleurs, tu ne dis pas à quelle machine tu veux te connecter dans ta commande rsync...
  • Partager sur Facebook
  • Partager sur Twitter
31 août 2010 à 9:57:53

Citation : elalitte

Ah oui mais non !
En ssh tu te connectes en leknoppix et en ssh en root.

Par ailleurs, tu ne dis pas à quelle machine tu veux te connecter dans ta commande rsync...


la ligne de commande actuelle rsync permet de faire une synchro avec un disque dur brancher sur disque dur branché sur un port usb.
  • Partager sur Facebook
  • Partager sur Twitter
Dommage, impossible de mettre ma signature
31 août 2010 à 10:08:36

Ah ok, dans ce cas pas besoin de ssh.

Si tu veux utiliser ssh, précise la machine à laquelle se connecter, cad 127.0.0.1.
  • Partager sur Facebook
  • Partager sur Twitter