Tout ou presque sur les logiciels libres, linux, protection de la vie privée... et aussi Humeur!

Aller au contenu | Aller au menu | Aller à la recherche

Scripts de sauvegardes journalières et hebdomadaires

bin-bash scripts ligne de commandeJ'avais pris cela sur un site, je ne sais plus où et ça a bien fonctionné un certain temps puis plus rien lorsque j'ai passé un des serveurs qui était sous Ubuntu serveur 12.04 sous Debian 8.7

J'ai donc repris en grande partie, même si les bases restent les mêmes. Voici donc la version fonctionnelle.

Sur Debian 8.7

Automatiser les sauvegardes.

Dans cet exemple, il s'agit de sauvegarder chaque jour de la semaine (samedi, dimanche, lundi, mardi, etc.), puis le vendredi soir, on sauvegarde sur le n° de la semaine. Puis on repart sur samedi, dimanche, etc.

Avant tout vous devez définir le "lieux" de sauvegarde, s'agit-il d'un disque dur supplémentaire, d'un disque externe, d'un lieu distant (par ssh ou autres)... Bref vous devrez adapter les scripts à vos choix et besoin.

Il s'agit là d'une idée sur le principe, à chacun de se l'approprier.

Ici je vais partir du principe que j'ai un disque dur chiffré supplémentaire monté sur /mnt/
Il est nommé "save" et le répertoire de sauvegarde est "s_server"

ce qui donne le chemin de sauvegarde "/mnt/save/s_server"

Avant tout, vous devez savoir en quelle langue sont vos jours de la semaine (anglais, français, etc.).

date +%A
vendredi

Le résultat est Français.
Connectez-vous en administrateur.

su root

Créer le script qui créera les répertoires des n° de semaine et les jours de la semaine.

#!/bin/bash
for x in lundi mardi mercredi jeudi vendredi samedi dimanche {01..52}
do
mkdir $x
done

Pourquoi {01..52} et non {1..52}? il suffit de lire le man date

man date
(...)
%V     ISO week number, with Monday as first day of week (01..53)
(...)

On voit donc qu'il faut numéroté de 01 à 52, car la 53ème semaine, lorsqu'elle existe est à cheval entre deux années et c'est donc pas dramatique de rater une semaine.

Rendre le script exécutable et on le place (dans notre exemple plus haut) dans "/mnt/save/s_server/", puis on l’exécute...

./faire_mkdir.sh

Un petit "ls" pour vérifier que tout est ok.

Nous allons créer un fichier des dossiers à exclure. Si votre sauvegarde est locale, il faudra exclure le dossier de sauvegarde ;-) dans notre cas "/mnt/save/s_server/" vous pouvez exclure tout ce qui ne vous semble pas judicieux, à vous de voir.

cd /etc/
nano rsync.exclude

On y met tout ce que l'on souhaite exclure.
Ci-dessous "/mnt/" obligatoire dans l'exemple puisque la sauvegarde ce fait sur "/mnt/save/s_server/", le reste en fonction de vos besoins.
Faites un copié/collé de ce qu'il y a ci-dessous.

# Mettez ici tous les dossiers que vous souhaitez exclure
# - /boot/
- /media/
- /lost+found/
- /mnt/
- /proc/
- /opt/
- /run/
- /srv/
- /tmp/
- /sys/

Créer les deux scripts ci dessous:

nano /etc/cron.daily/jour.sh

Copié/collé de ce qu'il y a ci-dessous

#!/bin/bash
# On va l'appeler "jour.sh"
# Sauvegarde quotidienne
jour=$(date +%A)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$jour

Ce qui donne le chemin /etc/cron.daily/jour.sh et rendez-le exécutable.

chmod +x /etc/cron.daily/jour.sh

Puis:

nano /etc/cron.weekly/semaine.sh

Copié/collé de ce qu'il y a ci-dessous

#!/bin/bash
# On va l'appeler "semaine.sh"
#  Sauvegarde hebdomadaire
semaine=$(date +%V)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$semaine

Ce qui donne le chemin /etc/cron.weekly/semaine.sh et rendez-le exécutable.

Chmod +x /etc/cron.weekly/semaine.sh

Maintenant il suffit juste de créer la crontab

crontab -e

Choisissez votre interprétateur texte "nano" ou "vi" et copiez les lignes ci-dessous:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Pour Ubuntu ce devrait ressembler à cela:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * sudo /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 sudo /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Ensuite vérifier le lendemain si la sauvegarde à bien fonctionné et revérifiez en fin de semaine.

Articles à lire sur des sujets Similaires

Commentaires

1. Le mardi 2 mai 2017, 14:21 par hoper

Quelques petites remarques si tu me permet :)

- Sur la forme, essaye de supprimer les majuscules dans les commandes "Chmod..."
- Sur le fond, il y a deux choses qui me tracassent :

1) La période de rétention est très faible. Quelques jours au mieux (0 au pire). Bref, tu ne peux pas remonter beaucoup dans le temps... Si tu t'aperçoit au bout d'un mois que tu as fait une boulette, cette boulette à été sauvegardée depuis longtemps, écrasant les fichiers que tu voulais récupérer. (Bon, cela dit avoir des scripts de ce genre en place est déjà INFINIMENT mieux que ce que plein de gens font, on est d'accord!)

2) Plus ennuyeux, à aucun moment tu ne peut vérifier que les sauvegardes se passent bien. En effet, la sortie de tes commandes est envoyée dans /dev/null. Donc le jour ou tes sauvegardes ne se feront plus du tout (parce que le nom du répertoire de sortie aura un tout petit peu changé ou je sais pas quoi, par experience je t'assure que ça finit toujours comme ça) tu n'en saura rien du tout et continuera à être persuadé que tes données sont sauvegardées. Ca, c'est vraiment gênant. Des sauvegardes ne sont valables que si elles sont supervisées d'une façon ou d'une autre (et aussi que des essais de restauration ont lieu de temps en temps ;)

A plus !

PS : Ce qui marrant c'est que tu utilise plusieurs options de rsync (progress, stats) qui ont pour rôles d'afficher des informations supplémentaires... Informations que tu envoi donc directement dans /dev/null !

2. Le mercredi 3 mai 2017, 15:57 par Sima

Merci pour ce commentaire judicieux :
1) la rétention est sur les 7 derniers jours et les 51 dernières semaines (1 an), personnellement ça me paraît suffisant.
2) En effet, tu as tout à fait raison, on pourrait renvoyer vers des "logs".
PS : :-) Il s’agit d’un oubli, les options "progress", "stats", viennent du fait que j’ai fait un copié/collé du début de la commande que je lance habituellement à la main… On peut ici, les enlever, ou les laisser si on décide de rediriger des logs…

3. Le mercredi 3 mai 2017, 17:33 par sima

J'ai oublié,
J'ai corrigé le chmod, je vérifie les sauvegardes assez régulièrement et il m'est arrivé de les restaurer, lors de plantage ou lorsque j'ai passé le server d'Ubuntu à Debian. Bien entendu, les bases de données sont sauvegardées séparément.
;-)

4. Le jeudi 4 mai 2017, 18:27 par Tetsumaki

Salut,

Il est dommage d'utiliser un outil (rsync) qui n'a pas pour utilité la sauvegarde, cela t'oblige à créer plusieurs scripts alambiqués et à faire quelque chose qui au final est peu exploitable.

Tu vas avoir une volumétrie gigantesque de cette façon et tu n'auras pas réellement de contrôle si cela s'est bien passé ou non.

De plus, tu constateras qu'un outil dédié aux backups comme ceux que je vais citer sont beaucoup plus rapide étant donné qu'ils savent faire du différentiel, tu gagneras du temps, de l'espace, de la sécurité.

Je te conseille l'utilisation de rdiff-backup qui ne devrait pas trop te dépayser comparé à rsync si tu veux quelque chose de simple.

Je te conseille encore plus l'utilisation de BorgBackup qui sait faire de la déduplication et chiffrer directement les sauvegardes (je conseille lz4 qui est pour moi le meilleur compromis) et même si tu envoies déjà les données sur un volume chiffré, c'est sympa de le faire mais c'est au choix.

PS : "su -" ou "su - root "et non "su root", ne jamais omettre le "-" sinon tu auras un jour ou l'autre des problèmes de path

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://chispa.fr/sima78/index.php?trackback/89

Fil des commentaires de ce billet