Il existe très certainement un script qui fasse la même chose, mais j'avais envie de maitriser mes sauvegardes. A la base, je voulais un script simple, avec très peu de ligne. A la fin, j'arrive avec un script de 143 lignes de code (cat sauvegarde-1.0.sh | grep -v "^$" | grep -v "^#"|wc -l).
Mon script se télécharge ici : http://www.gnunux.info/projets/sauvegarde/
Ce dont j'ai besoin :
- sauvegarde incrémentale d'une semaine ;
- sauvegarde de répertoires de mon serveur allumé 24h/24 ;
- sauvegarde de mes clients, éteint la nuit (voire plus) ;
- sauvegarde de mysql et de la base de paquet sur le serveur ;
- avoir une sauvegarde de la sauvegarde du serveur (et uniquement du serveur) sur un deuxième disque ;
- fournir un rapport (un courriel) lorsque les sauvegardes sont fini ;
- fournir un rapport en cas de défaillance d'une sauvegarde (poste non atteignable pendant 24h par exemple) ;
- fournir l'espace disque en fin de sauvegarde dans le rapport.
Pour cela, j'utilise rsync(2) coté client, comme serveur.
Pour la configuration serveur rsyncd sur les clients :
- dans /etc/rsyncd.conf :
uid = root gid = root use chroot = yes max connections = 4 syslog facility = local5 pid file = /var/run/rsyncd.pid
[gnunux] path = /home/gnunux comment = gnunux read only = yes list = no auth users = util secrets file = /etc/rsyncd.secrets hosts allow = 192.168.1.1
- dans /etc/rsyncd.secrets (avec chmod 600 /etc/rsyncd.secrets) :
util:MotDePassRsync
Ensuite, il faut copier le script (en modifiant les options) dans /etc/cron.hourly, sous le nom de "sauvegarde", pour avoir une tentative de sauvegarde toutes les heures.
Les deux variables les plus importantes sont :
- REPSAUVS : liste des répertoires locaux hebergeant la sauvegarde. Le premier correspond à la sauvegarde complète et les autres, à la liste des répertoires locaux acceuillant la sauvegarde du serveur.
- REPS : répertoire à sauvegarder. La syntaxte est celle de rsync pour les noms de répertoire.
Les sauvegardes sont enregistrées de la manière suivante :
- maitre : contient une copie du répertoire de sauvegarde
- lundi, mardi, ... : contient l'ancienne copie d'un fichier modifier.
Par exemple, je créé le fichier "toto.txt" lundi, mercredi je le modifier. Le jeudi, dans "maitre" j'ai la version actuelle et dans "jeudi" j'ai la version initiale.
Limites :
- Liste d'exclusion commune à tous les hôtes ;
- Mot de passe rsync commun à tous les hôtes.
Besoins futurs :
- sauvegarde de la sauvegarde sur un client, parfois éteint
- lancer des commandes sur les clients