Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Backup incrémental du répertoire /home
#1

Bonjour,
je vais mettre en place une sauvegarde incrémentièle du /home chaque jour.
Je pars sur la syntaxe rsync de ce script mais comme j'aime bien comprendre ce que je fais je me pose qq questions sur les options employée pour le rsync :

/usr/bin/rsync -a --no-o --delete --safe-links --link-dest=$TARGET/backup.1 $SOURCE $TARGET/backup.0/

-a => archive mode : je pense avoir compris (on garde les dates, les droits .....)

--no-o => on enlève la fonction owner ... : je ne comprends pas pourquoi on l'enlève 8), je vais faire le rsync avec sudo est ce que je garde cette option quand même ?

--delete => ca c'est pour ne pas copier les fichiers qui ont été supprimés vers le rep cible, ok

--safe-links => hum hum je dirai que cela fait que rsync ne copiera pas les liens symboliques qui ne pointent pas vers l'arborescence copiée. Certe .... mais est ce recommandé ? car j'ai vu un peu partout la syntaxe -r qui demande à prendre tout les sous-repertoires et qui ne doit pas être employée avec cette option.

--link-dest => bon là c'est clair c'est pour mettre en place les liens pour ne pas avoir les fichiers répliqués dans chaque sauvegarde, j'aime cette option qui permet de ne pas se prendre la tête pour restaurer, par contre je ne vois pas trop comment rsync fait pour s'y retrouver car c'est le script qui "gère" les fichiers et leurs noms avant de lancer rsync .... cela veut dire que rsync garde un historique de ce qu'il a fait précédemment qq part ? mais si c'était le cas, le fait de changer les noms de fichiers sabote ce suivi non ? si vous pouviez m'en dire plus.

Je pense également exclure certains répertoires comme indiqué ici en 2.2 pas de contre-indication avec la syntaxe précédente ?
Répondre
#2

Citation :par contre je ne vois pas trop comment rsync fait pour s'y retrouver car c'est le script qui "gère" les fichiers et leurs noms avant de lancer rsync .... cela veut dire que rsync garde un historique de ce qu'il a fait précédemment qq part ? mais si c'était le cas, le fait de changer les noms de fichiers sabote ce suivi non ?
en relisant un peu mieux la syntaxe j'ai compris, cela se passe ici :
--link-dest=$TARGET/backup.1 $SOURCE $TARGET/backup.0/

on indique le rep depuis lequel les liens vont être fait avec --link-dest, ensuite le répertoire source (celui qui doit être sauvegardé) qui est renseigné plus haut dans le script et enfin le répertoire de destination de la sauvegarde.

Je comprends donc comment rsync retrouve ses petits.
Du coup je ne vois plus comment les liens sont conservés entre les rep quand on les supprime ...
Répondre
#3

Citation :Du coup je ne vois plus comment les liens sont conservés entre les rep quand on les supprime ...
Il s'agit de liens physiques, donc supprimer un seul fichier ne supprime pas les données Smile
voir ici les explications pour les débutants comme moi

Citation :--no-o => on enlève la fonction owner ... : je ne comprends pas pourquoi on l'enlève 8) , je vais faire le rsync avec sudo est ce que je garde cette option quand même ?
du coup cette option change le propriétaire des fichiers en root à la place du user, je n'aime pas trop cela, est ce que j'ai raison ?
Répondre
#4

Je pars donc sur cela :
Code :
[== Indéfini ==]
#!/bin/bash
#set -xv

targetDir=/mnt/Backup_Nas/Daily
source=/home/

sudo rm -Rf $targetDir/backup.2
sudo mv $targetDir/backup.1 $targetDir/backup.2
sudo mv $targetDir/backup.0 $targetDir/backup.1

sudo rsync -a --delete --safe-links --link-dest=$targetDir/backup.1 $source $targetDir/backup.0/
Répondre
#5

finopat a écrit :--delete => ca c'est pour ne pas copier les fichiers qui ont été supprimés vers le rep cible, ok


--delete c'est pour supprimer du répertoice cible quand ils ne sont plus présent dans le répertoire source.
(on part donc du principe que ce n'est pas une "erreur" si ils ne sont plus dans la source.. sinon on s'efface son backup)



Sinon, moi j'utilise rdiff-backup (qui s'appuie sur la lib rsync) et qui (pour moi) donne plus de fonctionnalités.
Répondre
#6

j'ai un peu modifié le script, je fais le rsync avant de supprimer et renommer les fichiers et envoie un mail (ca c'est juste pour la frime lol).
J'ai un peu galéré pour le while et la décrémentation d'une variable mais rien d'insurmontable avec google Wink
Je ne trouve pas ma solution super élégante mais je suis arrivé à le faire, c'est déjà ça Smile

Code :
[== Indéfini ==]
#!/bin/bash
#set -xv

#sauvegarde le répertoire /home en entier avec un historique de 30 sauvegardes
#et des liens physiques entre les rep pour ne pas perdre trop d'espace en cas de gros fichiers

targetDir=/mnt/Backup_Nas/Daily
sourceDir=/home/
date=$(date +"%d-%m-%Y")

#sauvegarde incrémentielle
sudo rsync -a --delete --safe-links --link-dest=$targetDir/backup.0 $sourceDir $targetDir/backup.new/

#si sauvegarde OK on efface le plus vieux fichier et on renomme tous les fichiers

if [ $? -eq 0 ]; then

  #suppression du plus vieux repertoire
  sudo rm -Rf $targetDir/backup.30

  #déplacement des répertoires 29=>30, 28=>29 ....
  i=29
  x=30
  while ((i>=0))
  do
  file=$targetDir/backup.$i
    if [ -e $file ]
    then
      sudo mv $targetDir/backup.$i $targetDir/backup.$x
    fi

   ((i--))
   ((x--))
  done

  #renommage du fichier.new en backup.0
  sudo mv $targetDir/backup.new $targetDir/backup.0
  message="Sauvegarde OK"
  objet="Sauvegarde journalière du $date OK"

else
#Erreur du rsync

  #suppression du répertoire .new
  sudo rm -Rf $targetDir/backup.new


  message="Sauvegarde FAILED"
  objet="Sauvegarde journalière du $date FAILED"

fi

echo "$message" | mail -s "$objet"  [email protected]
Répondre
#7

Uggy a écrit :Sinon, moi j'utilise rdiff-backup (qui s'appuie sur la lib rsync) et qui (pour moi) donne plus de fonctionnalités.

Pas vu ton post avant de mettre mon script :8
je vais regarder ce que rdiff-backup pourrait m'apporter, je vais encore user google lol
Répondre
#8

UN truc qui ne me convient pas dans mon script; s'il n'y a pas de différence entre le jour de la sauvegarde et la veille un fichier est quand même créé, du coup si je fais une modif avant de partir en vacances je risque de ne pas avoir la sauvegarde de ce que j'ai changé (il me restera tout de même l'image générée chaque semaine).
Avez vous une piste pour pallier ce pb ?
@Uggy : je n'ai pas encore regardé rdiff, si la solution passe par là fais moi signe Smile
Répondre
#9

Voila ce que j'ai fait avec rdiff-backup
http://blog.uggy.org/post/2013/11/25/Bac...ec-le-Rasp

A voir si ca peut te servir dans ton cas de figure aussi.
Répondre
#10

bon, je dois avouer que je suis presque convaincu Uggy Smile

Voilà ce que j'aime bien avec rdiff-backup :
- backup incremental (idem que le script avec rsync que je voulais faire)
- facilité de la restauration de la dernière sauvegarde (idem que le script avec rsync que je voulais faire)
- s'il n'y a pas de changement dans le répertoire source, aucun changement n'est fait dans le rep destination (avantage rdiff)
- possibilité de lister quels fichiers ont changé par rapport au rep source (utilisation plus simple => avantage à rdiff)

par contre je ne suis pas arrivé à restaurer un fichier modifié (qui est donc dans rdiff-backup-data du rep destination) vers un nouveau fichier
Si je viens de trouver, heu par contre côté script ya plus grand chose à faire là lol
je mets au propre demain ce que je compte faire car là il est l'heure d'aller dodo Smile
Merci Uggy pour ce bel os à ronger !!!
Répondre
#11

Bonjour à tous,
voici donc ce que j'ai fais :
j'ai créé un répertoire Backup pour mettre le script + un fichier "list" dans lequel je mettrais les fichiers à exclure

le script que je vais mettre dans le crontab :

Code :
[== Indéfini ==]

#!/bin/bash
#set -xv

#sauvegarde le répertoire /home en entier avec un historique des modifs de six mois

date=$(date +"%d-%m-%Y")

#sauvegarde du /home, fichiers à exclure sont à indiquer dans le fichier list
sudo rdiff-backup --include-globbing-filelist list /home /mnt/Backup_Nas/homeDaily/

#si sauvegarde OK suppression des modifs supérieures à 6 mois
if [ $? -eq 0 ]; then
  sudo rdiff-backup --remove-older-than 6M /mnt/Backup_Nas/homeDaily
else
#Erreur
  message="Sauvegarde FAILED code de retour : $?"
  objet="Sauvegarde journalière du $date FAILED"
  echo "$message" | mail -s "$objet"  [email protected]
fi

le contenu du fichier list :
Code :
[== Indéfini ==]
- **.iso
- **.tmp
- **klibido/
- **lost+found/
- **.Trash/
- **.beagle/
- **cache/
- **CACHE/
- **Cache/
- **.thumbnails/

Bien entendu la suppression des fichiers de plus de 6 mois ne concernera que les modifs et les fichiers supprimés, ce qui ne change pas reste disponible dans le rep de destination de rdiff indéfiniment.

lien vers la doc officielle pour les curieux

Uggy, cela te semble correct (j'ai zappé la partie encodage car pour le moment rien de vital sur le rasp .... et pas encore tout à fait à ma portée) ?
Répondre
#12

Salut,
Tu voudrais pas --exclude-globbing-filelist au lieu de --include-globbing-filelist ?
Répondre
#13

Pas trouvé --exclude-globbing-filelist dans la doc (ici)
je regarde si j'y arrive et je te dis
Répondre
#14

Bon, ca passe sans souci et ca fonctionne, je n'avais donc pas bien cherché.
La commande est donc devenue :
Code :
[== Indéfini ==]
sudo rdiff-backup --exclude-globbing-filelist exclList /home /mnt/Backup_Nas/homeDaily/
et le fichier a le contenu :
Code :
[== Indéfini ==]
**.iso
**.tmp
**klibido/
**lost+found/
**.Trash/
**.beagle/
**cache/
**CACHE/
**Cache/
**.thumbnails/
c'est plus intuitif comme cela. Merci Uggy
Répondre
#15

Bon,
le script fonctionne mais avec le crontab ça ne passe pas,
voici le script
Code :
[== Indéfini ==]
#!/bin/bash
#set -xv

#sauvegarde le répertoire /home en entier avec un historique des modifs de six mois

date=$(date +"%d-%m-%Y")

#sauvegarde du /home, fichiers à exclure sont à indiquer dans le fichier list
sudo rdiff-backup --exclude-globbing-filelist exclList /home /mnt/Backup_Nas/homeDaily/

#si sauvegarde OK suppression des modifs supérieures à 6 mois
if [ $? -eq 0 ]; then
  sudo rdiff-backup --remove-older-than 6M /mnt/Backup_Nas/homeDaily

  message="Sauvegarde /home OK"
  objet="Sauvegarde /home du $date OK"


else
#Erreur
  message="Sauvegarde /home FAILED code de retour : $?"
  objet="Sauvegarde /home du $date FAILED"
fi

echo "$message" | mail -s "$objet"  [email protected]

contenu du crontab :
Code :
[== Indéfini ==]
0 2 * * * /home/pat/scripts/Backup/homeDaily.sh
on dirait un pb de droit, j'ai essayé en mettant la ligne de commande dans le cron
sudo rdiff-backup --remove-older-than 6M /mnt/Backup_Nas/homeDaily
mais cela n'a rien changé ...

Les fichiers :
Code :
[== Indéfini ==]
[email protected]:~/scripts/Backup$ ls -l
total 12
-rwxr--r-- 1 pat pat 1229 mai    5 16:10 BackupImage.sh
-rw-r--rw- 1 pat pat  102 mai   10 17:01 exclList
-rwxr--r-- 1 pat pat  704 mai   10 17:07 homeDaily.sh
[email protected]:~/scripts/Backup$ pwd
/home/pat/scripts/Backup
[email protected]:~/scripts/Backup$
Répondre
#16

Donne des chemins complets a tes fichiers
surtout "exclList" que ta cron ne doit pas savoir ou il est
(mais mêmes le binaires, ca ne fait pas de mal, meme si ici je doute que le pb soit les binaires)

Les scripts qui tournent "a la main" mais pas en cron viennent souvent de pb de PATH et de variables d'environnement.


et sinon
essaye d'enlever "sudo".. et met le dans la cron de root
Répondre
#17

Uggy a écrit :Les scripts qui tournent "a la main" mais pas en cron viennent souvent de pb de PATH et de variables d'environnement.
dans le mille Uggy je me suis focalisé pour rien sur les droits des fichiers.
Mais du coup j'ai fais la connaissance de cette page pour mieux m'expliquer les droits de ces fichiers.

Pour les binaires, tu parles de la ligne #!/bin/bash en début de script ?
Merci Smile
Répondre
#18

finopat a écrit :Pour les binaires, tu parles de la ligne #!/bin/bash en début de script ?

Non, je parlais juste de "mail", "rdiff-backup" etc..
"mail" est en fait "/usr/bin/mail" (ou dans le genre) etc...
Répondre
#19

ok merci je comprends
Répondre
#20

Hello, aurais-tu une version finale de ton script ?
merci Smile
Répondre
#21

hello karma0007

voici le script :
Code :
[== Indéfini ==]
#!/bin/bash
#set -xv

#sauvegarde le répertoire /home en entier avec un historique des modifs de six mois

date=$(date +"%d-%m-%Y")

#sauvegarde du /home, fichiers à exclure sont à indiquer dans le fichier list
sudo rdiff-backup --exclude-globbing-filelist /home/pat/scripts/Backup/exclList /home /mnt/Backup_Nas/homeDaily/

#si sauvegarde OK suppression des modifs supérieures à 6 mois
if [ $? -eq 0 ]
then
  sudo rdiff-backup --remove-older-than 6M /mnt/Backup_Nas/homeDaily

  message="Sauvegarde /home OK"
  objet="Sauvegarde /home du $date OK"


else
#Erreur
  message="Sauvegarde /home FAILED code de retour : $?"
  objet="Sauvegarde /home du $date FAILED"
fi

echo "$message" | mail -s "$objet"  [email protected]
et le contenu du fichier exclList :
Code :
[== Indéfini ==]
**.iso
**.tmp
**klibido/
**lost+found/
**.Trash/
**.beagle/
**cache/
**CACHE/
**Cache/
**.thumbnails/
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)