Sauvegarde automatique d'un serveur linux avec rsync
Prenons le cas de deux serveurs linux, un serveur "sandbox.riffzone.net" que je veux automatiquement sauvegarder sur un second serveur "carbon.riffzone.net".
Sur carbon.riffzone.net, j'installe d'abord rsync:
apt-get install rsync
Puis je crée, toujours sur carbon.riffzone.net, une clé ssh pour mes futures opérations avec rsync:
ssh-keygen -t rsa
J'obtiens d'une part, dans ~/.ssh/id_rsa, une clé privée qui se présente sous cette forme:
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAocm7KjdmRiOHQGH8kXndebAK/1XesQQHmvOET8qqan9Vvn6Q WOPreHCx7b19XoPlzFm3FjSQAZrJHqteu8yEEM8p8/Fjt4ObT3Q4PYsMY7xiYYDN v3XHof8I6Pf7grl7kBmnR5l/QQ8/N4xomOao+/V+Jq7tBrg1ZMG6wadF9kYOrhGt .... R67WUQKBgF039++AVNlCsKLR6RD+n5z16nSE9VsyfLTeWU8OS5NfEpkr9fYTWuIr aHKnUz6LXZz6hzN8V/yOq3uYJtR9GCMqAqUW1z5Lw3RvGpVMz6QFkHIGRPsKaJHo S1myZTT9ad2UkBCBGZ8y8ShZT/AGFi/2o/Umx1cIicn0Blfkzs1T -----END RSA PRIVATE KEY-----
ainsi, dans ~/.ssh/id_rsa.pub, qu'une clé publique qui se présente sous cette forme:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABFV....zgyqzVT4YFohujBZowOwarV root@carbon.riffzone.net
On laisse la clé privée là où elle est, on récupère par contre la clé publique qu'il va falloir copier puis coller dans le fichier /root/.ssh/authorized_keys ou /root/.ssh/authorized_keys2 de la machine à sauvegarder. On enregistre.
Sur carbon.riffzone.net, connectons-nous manuellement sur sandbox.riffzone.net:
ssh root@sandbox.riffzone.net
Si on se connecte bien sans mot de passe, alors on peut continuer.
Sur carbon.riffzone.net, on va maintenant tester rsync. Mettons qu'on veuille sauvegarder sandbox.riffzone.net:/etc/ sur carbon.riffzone.net:/home/sandbox/etc/, on va exécuter la commande suivante:
rsync -avzh root@sandbox.riffzone.net:/etc/ /home/sandbox/etc/ --delete
Cette commande va effectuer une copie miroir du répertoire /etc/ de sandbox.riffzone.net dans le répertoire /home/sandbox/etc/ de carbon.riffzone.net, en supprimant les fichiers présents sur carbon.riffzone.net qui ne sont plus dans sandbox.riffzone.net (d'où la présence de l'option --delete).
Il n'y a plus qu'à programmer quotidiennement cette commande dans le crontab de carbon.riffzone.net.
Pour rappel, si on veut faire tourner ça en tâche de fond, sans sortie sur stdout ni stderr, on rajoute encore à la fin de la ligne de commande " > /dev/null 2>&1 &":
rsync -avzh root@sandbox.riffzone.net:/etc/ /home/sandbox/etc/ --delete > /dev/null 2>&1 &
Un cran plus loin, une fois lancée la commande précédente, si on veut qu'elle continue à tourner toute seule même après déconnexion de notre session (volontairement ou accidentellement), lancer d'abord la commande jobs, qui liste comme son nom l'indique les tâches en cours:
jobs
Chaque élément de la liste commence par un identifiant numérique entre crochets, par exemple:
[1]+ Running rsync -avzh .... --delete > /dev/null 2>&1 &
Il vous suffit d'exécuter la commande suivante, reprenant l'identifiant du job que l'on veut libérer, ici le "1":
disown -h %1
Remplacez bien sûr le "1" par votre identifiant à vous.