Votez pour ce serveur
Tous les jours sur :

serveurs Minecraft




Cliquez pour découvrir...




... et bien d'autres

short-url : #1 05 May 2012 16:46

boozaa
Hummm...boozaa
Inscription : 29 Jan 2011
Messages : 1 771

[TUTO] Sauvegarde incrementale via cron

Plop,

si vous souhaitez faire des backups de votre serveur sous linux à intervalles réguliers je vous propose ce petit script.
J'utilise RSYNC pour la copie incrémentale et crontab pour son lancement à intervalles réguliers.

Le script que j'ai nommé 'backup.sh' :

#!/bin/bash

rsync -a --del --filter "- craftscripts/" --filter "- schematics/" --filter "- *.lck" /source/ /destination/
exit 0

Que fait ce script ?

Il lance une copie via rsync avec les arguments suivants :
-a : équivalent à -rlptgoD donc à :
    -r : parcours le dossier indiqué et tous ses sous-dossiers, save incrémentale
    -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

--del : permet de supprimer les fichiers sur "destination" qui n'existent plus sur "source"

--filter : permet de ne pas prendre en compte un fichier ou un sous dossier. Par exemple '--filter "- craftscripts/"' veut dire que rsync ne doit pas copier ni traiter ce sous dossier alors que '--filter "- *.lck"' voudrait dire de ne pas prendre ni traiter les fichiers avec l'extension .lck.
Concernant les dossiers à exclure vous pouvez par exemple exclure les dossiers de vos Mondes car dans la suite de ce topic je vous donne un autre moyen de les sauvegarder en versioning.

On le rend exécutable

chmod a+x backup.sh

On test son efficacité

On le lance une fois pour voir si il fait bien une sauvegarde complète de source vers destination :

./backup.sh

Allez voir dans le dossier de destination si vous y trouvez tout c'est ok.

Création d'un job cron

Pour lancer ce script automatiquement à intervalles réguliers j'utilise crontab.
Je vous laisse vous informer sur son utilisation mais je vous donne un exemple.

On va dire que mon script 'backup.sh' est situé dans '/home/Minecraft/'.

J'édite la crontab :

crontab -e

Un fichier s'est ouvert en écriture dans lequel une ligne est une 'tâche planifiée'.

Voici ce que j'ajoute si je veux que ce script soit lancé toutes les 15 minutes :

*/15 * * * * /home/Minecraft/backup.sh

Voici ce que j'ajoute si je veux que ce script soit lancé toutes les heures :

@hourly /home/Minecraft/backup.sh

Vous remarquerez le @hourly...
Vous avez selon la version de cron d'installé également accés à ces raccourcis :
@yearly
@annually
@monthly
@weekly
@daily
@midnight


A vous de jouer...

Hors ligne

short-url : #2 05 May 2012 17:01

boozaa
Hummm...boozaa
Inscription : 29 Jan 2011
Messages : 1 771

Re : [TUTO] Sauvegarde incrementale via cron

Si vous souhaitez rajouter un filtre d'exclusion il vous suffit juste de modifier le fichier 'backup.sh' c'est tout bien sur.

Hors ligne

short-url : #3 06 May 2012 17:42

boozaa
Hummm...boozaa
Inscription : 29 Jan 2011
Messages : 1 771

Re : [TUTO] Sauvegarde incrementale via cron

Sauvegarder les Mondes de son serveur avec rdiff-backup

rdiff-backup permet de faire des sauvegardes en version.
C'est à dire qu'il peut sauvegarder de manière incrémentielle en ne sauvegardant que les différences mais en plus vous permet de conserver les états précédents et les rétablir.

Je vous propose ce script pour sauvegarder grâce à rdiff-backup:

worldName="Nom_Du_Monde"
bukkitFolder="/chemin/vers/bukkit/"
saveFolder="/chemin/vers/dossier/sauvegarde/des/mondes/"
numberOfDayToKeepSave=7


## Ne pas toucher ce qui suit sauf si vous savez ce que vous faites ##
source=$bukkitFolder$worldName
destination=$saveFolder$worldName
if [ -d $source ]; then
nice -n 19 rdiff-backup $source $destination && nice -n 19 rdiff-backup --remove-older-than $numberOfDayToKeepSave"D" --force $destination
fi

source=$bukkitFolder$worldName"_nether"
destination=$saveFolder$worldName"_nether"
if [ -d $source ]; then
nice -n 19 rdiff-backup $source $destination && nice -n 19 rdiff-backup --remove-older-than $numberOfDayToKeepSave"D" --force $destination
fi

source=$bukkitFolder$worldName"_the_end"
destination=$saveFolder$worldName"_the_end"
if [ -d $source ]; then
nice -n 19 rdiff-backup $source $destination && nice -n 19 rdiff-backup --remove-older-than $numberOfDayToKeepSave"D" --force $destination
fi

exit 0

Explications

Vous devez modifier les 4 premières lignes du script pour mettre les chemins spécifiques à vos besoins.

La variable 'numberOfDayToKeepSave' est le nombre de jours à conserver dans l'historique des versions de rdiff-backup.

L'utilisation de 'nice -n 19' permet de placer une priorité très basse pour cette tâche pour ne pas gêner le fonctionnement de votre serveur.

Le script sauvegardera le dossier du Monde, de "_the_end" et de "_nether" si ces derniers existent.


Le mettre en place

Créez un fichier par exemple 'saveWorld.sh', collez le code à l'intèrieur et sauvegardez.
Le '.sh' est important sauf si vous précisez le shebang '#!/bin/bash' en début de fichier auquel cas vous pouvez ne mettre aucune extension.

Donnez lui le droit d'éxecution :

chmod a+x saveWorld.sh

Programmer sa mise en route régulière

Ici on utilise encore crontab donc :

crontab -e

Pour un démarrage journalier voici la ligne à y ajouter :

@daily /chemin/vers/saveWorld.sh


Voir les versions enregistrées

Pour connaitre les sauvegardes d'un Monde datées placez vous dans votre dossier qui contient toutes les sauvegardes et lancez:

rdiff-backup --list-increment-size NomDuDossierMonde

Cela peut donner par exemple :

        Time                       Size        Cumulative size
-----------------------------------------------------------------------------
Sun May  6 17:33:45 2012         16.8 MB           16.8 MB   (current mirror)
Sun May  6 17:32:58 2012          200 KB           17.0 MB
Sun May  6 17:30:55 2012          202 KB           17.2 MB

Vous voyez le gain de ce système ....
Sur mon exemple du dessus il y a 3 versions.
Le (current mirror) est la copie complète, regardez son 'Size' : 16.8MB
Les autres versions sont les incréments et n'étant pas cumulatif ils ne pèsent que le poids des modifications par rapport à la copie complète donc 200Kb et 202Kb ici.


Remettre en place une vieille sauvegarde

On peut mettre D(ay),W(eek), M(onth) et Y(ear) en paramètre.

Par exemple pour remettre la copie d'il y a 3 jours :

rdiff-backup -r 3D /repertoire_de_sauvegarde /repertoire_de_restauration

Par exemple pour remettre la copie d'il y a 1 semaine :

rdiff-backup -r 1W /repertoire_de_sauvegarde /repertoire_de_restauration

Un autre exemple pour remettre la dernière version enregistrée :

rdiff-backup -r now /repertoire_de_sauvegarde /repertoire_de_restauration

Hors ligne

short-url : #4 07 May 2012 17:24

tickleman
Administrateur
Inscription : 30 Jan 2011
Messages : 3 998

Re : [TUTO] Sauvegarde incrementale via cron

Ha ouais bien rdiff je pense que je vais m'en servir pour augmenter notre nombre de sauvegardes sans prendre plus de place ! J'avoue que j'ai jamais osé me mettre à dirvish car j'y comprend rien mais là rdiff avec tes explicaftions ma foi... Let's go !


Creeper.png Admin un jour, Creeper toujours

Hors ligne

short-url : #5 29 Aug 2013 12:52

boozaa
Hummm...boozaa
Inscription : 29 Jan 2011
Messages : 1 771

Re : [TUTO] Sauvegarde incrementale via cron

Petit complément pour parler de 'rdiff-backup-statistics'.
Cette commande se lance ainsi:

rdiff-backup-statistics dossierSauvegarde/

Cela vous donne les statistiques par sauvegarde.

Un autre point intéressant c'est qu'en dossier de sauvegarde on peut indiquer un dossier distant sur un accés ssh. Il suffit de remplacer 'dossier de sauvegarde' par la chaine de connexion ssh:

<utilisateur>@<adresse_ip_de_la_machine_distante>::<repertoire_de_sauvegarde_sur_la_machine_distante>

Dans mon script il suffit donc de mettre cette chaine dans la définition de la variable 'saveFolder'....

Il vous faut au préalable avoir mis en place la connexion ssh avec paire de clefs plutôt que par mot de passe bien sur.

Enjoy,

Dernière modification par boozaa (29 Aug 2013 13:00)

Hors ligne

short-url : #6 30 Aug 2013 10:50

alcaufarm
modératateur
Lieu : a coté de mon voisin
Inscription : 16 Jun 2012
Messages : 221

Re : [TUTO] Sauvegarde incrementale via cron

boozaa c'est le meilleur XD


eJxTVvDNTzm8siixJLW0SMExJzmxNC2xKFehIB_ILcsvLVYoTi0qyyxSUObyzcxLTS5KTCtRSFZPLS5RyElVSMpMzVNQ5EqEaUOoQVLtmlhUksFlZs5lZGrKZWzBZQAAmIEnRQ~~.png

Hors ligne

short-url : #7 30 Aug 2013 11:38

minetienne
Builder Redstonien Fou!!!!!!!
Lieu : Dans de la redstone.
Inscription : 27 Aug 2012
Messages : 262
Site Web

Re : [TUTO] Sauvegarde incrementale via cron

Trop top gg boozaa

Dernière modification par minetienne (30 Aug 2013 11:39)


YOOOOOOOOOOOOOLLLLLLLLLLLOOOOOOOOOOOOOOO! wink

Hors ligne

Pied de page des forums