Besoin
J’ai rajouté la fonction de serveur de sauvegarde à mon petit dockstar . Le besoin est de :
- sauvegarder l’ensemble de mes données sur un disque dédié installé sur celui-ci :
- sauvegarde locale des répertoires importants du serveur lui-même,
- sauvegarde des autres machines Linux de mon petit réseau LAN
- sauvegarde de mes sites internet, avec le cas particulier d’un site wordpress hébergé sur Free (c’est moins important pour les sites hébergés sur OVH qui dispose de backups proposés par l’hébergeur)
- sauvegarder ces backups dans le cloud, chiffrés
Voici un petit aide-mémoire sur la manière dont j’ai traité le premier point
Principe du serveur de sauvegarde
Le dispositif est basé sur trois logiciels libres :
- le programme perl rsnapshot qui gère des sauvegardes de systèmes de fichier par « snapshot » (clichés) localement ou en réseau via rsync
- l’utilitaire rsync, qui permet la réplication de répertoires localement ou sur SSH. rsnapshot s’appuie nativement sur rsync pour faire des sauvegardes incrémentales
- l’utilitaire lftp qui comme son nom ne l’indique pas est un utilitaire de transfert de fichiers qui supporte une multitude de protocoles (pas seulement FTP mais aussi HTTP, FTPS, SFTP et …). Il possède des fonctionnalités de scripting et de réplication d’arborescence de répertoires.
rsnapshot permet de copier l’image complète des répertoires à sauvegarder dans des répertoires « snapshot » tournants et avec une périodicité paramétrable (n snapshots « heure », p snapshots « jour », q snapshots « mois » …), qu’on peut facilement exploiter pour les restaurations. L’espace disque est utilisé de manière assez efficace car il n’écrit qu’une fois les fichiers dupliqués entre snapshots, grâce aux « hard links » Linux.
Pour sauvegarder les données d’un système « dans le cloud » sans accès SSH, on complète rsnapshot par lftp qui a des fonctions très similaires à rsync pour les réplications.
Installation et utilisation de rsnapshot
Configuration de base et sauvegarde locale
On peut suivre le bon tutorial « sauvegarde automatisée de votre machine avec rsnapshot » pour mettre rapidement en œuvre les sauvegardes locales avec rsnapshot
Attention à la syntaxe de rsnapshot.conf :
- les séparateurs sont des TAB et pas des espaces.
- il faut mettre un / à la fin des répertoires à sauvegarder
Par ailleurs, changer l’option sync_first à 1 (voir la page man de rsnapshot), et modifier la crontab en conséquence. Il y a deux commandes à passer pour faire un snapshot dans ce cas. Pour la config standard ça donne :
0 */4 * * * /usr/bin/rsnapshot sync && /usr/bin/rsnapshot hourly 45 23 * * * /usr/bin/rsnapshot sync && /usr/bin/rsnapshot daily 30 23 * * 0 /usr/bin/rsnapshot sync && /usr/bin/rsnapshot weekly 15 23 1 * * /usr/bin/rsnapshot sync && /usr/bin/rsnapshot monthly
Sauvegardes via le réseau LAN
On va réaliser ces sauvegardes avec rsync sur SSH. Il faut donc que rsync et ssh soient installés sur la machine à backuper :
- sur debian :
apt-get install rsync
- sur openWrt :
opkg install rsync
Les backups sont déclenchés par le serveur de backup, qui doit pouvoir accéder aux données des autres machines via rsync sur SSH. On préfèrera utiliser une authentification par clefs, en définissant le serveur comme client SSH de confiance. Cela permet d’éviter de laisser logins et mots de passe en clair dans des fichiers de config.
Pour cela, on créé un couple de clefs publique et privée sur notre serveur sans passphrase, puis on copie la clef publique sur chacun des clients. (voir Using Rsync and SSH et Sauvegardes automatisées depuis le cron du serveur qui donnent le principe avec rsync) :
# ssh-keygen -t rsa # ssh-copy-id -i /root/.ssh/id_rsa.pub root@machineBackupee
Pour une machine openWrt, il faut passer les commandes suivantes pour compléter (les clefs ne sont pas au même endroit)
# cat /root/.ssh/authorized_keys >> /etc/dropbear/authorized_keys # chmod 0600 authorized_keys # rm -r /root/.ssh
Sauvegarde d’un poste qui ne reste pas toujours allumé
Pour la sauvegarde de mon PC sous Linux, je préfère utiliser une instance de rsnapshot installée sur celui-ci, avec un montage réseau samba sur le disque de sauvegarde du dockstar :
Avantages :
- le PC est plus puissant que le dockstar qui mouline lors des sauvegardes
- il est allumé de manière assez irrégulière, et il n’est donc pas garanti que les sauvegardes s’effectuent bien…
Inconvénients :
- la configuration n’est pas centralisée sur le seul serveur de sauvegardes
- sécurité : oblige à faire des autorisations SSH dans les deux sens
Utiliser fcron pour lancer les snapshots (pallie au fait que la machine n’est pas toujours up)
Sauvegarde distantes sur Internet
SSH n’est pas le bon protocole pour cette tâche : d’une part il n’est pas disponible sur tous les serveurs, et d’autre part il n’est pas du tout optimum en terme de perfs hors LAN. On utilisera plutôt FTP ou mieux une variante sécurisée, grâce à lftp adossé à rsnapshot :
- un script lftp va faire la réplication des répertoires à sauvegarder sur un répertoire local, déclenché par rsnapshot
- rsnapshot va prendre des snapshots de ce répertoire
Remarque : si quelqu’un avait un peu de courage, ce serait encore mieux de modifier rsnapshot pour lui permettre de prendre en charge lftp au même titre que rsync
Sauvegarde d’un site WordPress hébergé sur Free
Pour sauvegarder un site WordPress, il faut sauvegarder d’une part les fichiers et d’autre part la base MySQL associée. Le tutorial Sauvegarde ftp et mysql automatisée chez free.fr indique comment le faire avec lftp, en tenant compte des particularités de Free qui fournit une page dynamique pour faire un dump de la base de données.
Sur le serveur de sauvegarde les répertoires miroir des différents sites seront dans /home/backup :
- miroir du site1 = /home/backup/site1.free.fr . C’est ce répertoire dont rsnapshot va prendre des images…
- dump de la base de données du site 1 = /home/backup/site1.free.fr/MySQdump.gz
ainsi que les scripts de sauvegarde lftp à créer pour chaque site (lftp-site1, etc)
Pour chaque site à sauvegarder, créer le fichier lftp-site1 en modifiant les login et mot de passe (attention à bien laisser l’ordre des backups : fichiers puis MySQL car le fichier de dump MySQL est supprimé par le backup fichiers)
lcd /home/backup FreeSaveFiles site1 FTPpassword FreeSaveMySQL site1 MySQLpassword bye
et modifier ses permissions de manière à ce qu’il ne soit lisible que de root :
# chmod 600 /home/backup/lftp-site1
Lancer lftp pour créer le répertoire ~/.lftp et les fichiers associés avec les permissions adéquates
lftp bye
Editer ~/.lftp/rc (ou /etc/lftp.conf si vous souhaitez que ce soit disponible pour l’ensemble des utilisateurs du serveur) pour ajouter les lignes suivantes :# general : ne pas garder de log dans ~/.lftp ni d'historique des commandes
set xfer:log false
set cmd:save-rl-history true
# FreeSaveFiles nomsite password : sauve dans nomsite.free.fr
alias FreeSaveFiles "eval -f \"set mirror:parallel-transfer-count 2; set mirror:set-permissions false; open ftp://ftpperso.free.fr; user $0 $1; mirror --delete --only-newer --verbose . $0.free.fr \" "
# FreeSaveMySQL nombase password : sauve dans nombase.free.fr/MySQLDump.gz
alias FreeSaveMySQL "eval -f \"open http://sql.free.fr; set http:post-content-type application/x-www-form-urlencoded; quote post /backup.php \\\"login=$0&password=$1&check=1&all=1 \\\" > $0.free.fr/MySQLdump.gz \""
et modifier ses permissions de manière à ce qu’il ne soit lisible que de l’utilisateur :
# chmod 600 ~/.lftp/rc
Vérifier que ça marche en lançant la réplique à la main
# lftp -f /home/backup/lftp-site1
éditer /etc/rsnapshot.conf (attention à bien utiliser des tab et pas des espaces comme séparateurs. Je ne sais pas comment le faire en HTML, donc il faut modifier ça à la mano si on fait un copier/coller) :
backup_script /bin/date "+ backup of site1.free.fr started at %c" unused1 backup_script /home/backup/lftp -f /home/backup/lftp-site1 unused2 backup /home/backup/site1.free.fr site1.free.fr/ backup_script /bin/date "+ backup of site1.free.fr ended at %c" unused9
Tester la syntaxe du fichier modifié :
# rsnapshot -t hourly
Tester pour de vrai …
# rsnapshot hourly
Sauvegarde d’un site simple
Dans l’exemple ci-dessus (sauvegarde base et fichiers d’un hébergement Free) il était nécessaire de préciser user et mot de passe dans l’URL permettant de récupérer le dump de la base MySQL. Dans la plupart des autres cas on a affaire à une authentification standard et il est possible d’utiliser le fichier ~/.netrc pour conserver login et mot de passe, ce qui permet de simplifier les scripts de backup et garder login et mots de passe dans un fichier standard :
Indiquer login et mot de passe de la machine à sauvegarder et sécuriser l’accès au fichier de config
# vi ~/.netrc machine mamachine login monlogin password monpassword # chmod 600 ~/.netrc
On peut désormais s’authentifier avec lftp sans indiquer à chaque fois le mot de passe. Par exemple , la commande suivante permet de lister le répertoire racine du site site1.free.fr :
lftp -d -e ls ftp://site1@ftpperso.free.fr/
Mon retour d’expérience sur rsnapshot
La CPU monte pas mal sur mon petit dockstar (charge CPU entre 2,5 et 4,5 lorsque les fichiers sont effectivement sauvegardés) mais ça n’empêche pas le serveur squeezebox de fonctionner correctement. On voit dans le graphe ci-dessous l’initialisation du process avec le 1er backup horaire qui dure une petite heure et demi mais les suivants rien du tout, les fichiers à sauvegarder n’ayant pas été modifiés. Au besoin on peut utiliser nice.
Liens utiles et références
Sauvegardes Linux (général)
rsync
- How to Backup Linux? 15 rsync Command Examples
- Using rsync over ssh et Using Rsync and SSH
- Do-It-Yourself Backup System Using Rsync donne le principe des sauvegardes par clichés avec rsync, principe mis à profit par rsnapshot. Il donne aussi de bons conseils, en particulier concernant la sécurité. RsyncSnapshots présente des scripts qui utilsent le principe (en français)
rsnapshot
- rsnapshot : site officiel
- sauvegarde automatisée de votre machine avec rsnapshot : tutorial d’installation sur le très bon blog de nicolargo
- Rsnapshot : utilitaire de prise de cliché : un autre bon tutorial, qui donne quelques explications complémentaires utiles
- How to install and setup Rsnapshot incremental remote backup : un autre tutorial, qui donne une méthode de configuration permettant d’avoir des politiques de backup différentes par host en lançant autant d’instances de backup que de hosts (utile en particulier pour que des backups lents ne bloquent pas tout).
lftp
- lftp : site officiel
- lftp : automatiser les transferts avec des scripts
- page wiki
- CLI Magic: Quick and easy backup with lftp
sauvegarde des sites perso Free
- Sauvegarde ftp et mysql automatisée chez free.fr : indique comment sauvegarder avec lftp un site wordpress free
- Sauvegarder un site Internet (blog) hébergé chez Free.fr avec rSnaphot : je suis parti de là mais en regardant d’un peu près il me semble que l’ensemble des fichiers sera récupéré à chaque fois car le miroir se fait sur un répertoire temporaire effacé dès que le script est terminé.