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.
4 réactions
1 De hoper - 02/05/2017, 14:21
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 De Sima - 03/05/2017, 15:57
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 De sima - 03/05/2017, 17:33
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 De Tetsumaki - 04/05/2017, 18:27
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