rsnapshot est un outil de sauvegarde basé sur rsync. Grâce à rsnapshot, il est possible de prendre des instantanés de vos systèmes de fichiers à différents instants. Utilisant les liens durs, rsnapshot créé l’illusion de l’existance de multiples sauvegardes complétes, tout en n’occupant que la place d’une seule plus les différences. Couplé avec ssh, il est également possible de prendre des instantanés de systèmes de fichiers distants. Ce document est un tutoriel d’installation et de configuration de rsnapshot.
rsnaphost est écrit en Perl et dépends de rsync. OpenSSH, GNU cp et le programme BSD logger sont également recommandés mais pas necessaires. Tous ceux-ci devraient être présents sur la plupart des systèmes Linux. rsnapshot est écrit avec le plus petit dénomitateur commun en tête. Au minimum il ne requiert que Perl 5.0004 et rsync. Ceci fait qu’il fonctionne sur quasiment n’importe quel système UNIX vous voudrez l’installer. Il a été testé avec succès avec Perl 5.0004 à 5.8.2, sur Debian, Redhat, Fedora, Solaris, Mac OS X, FreeBSD, OpenBSD, et IRIX.
source: http://www.rsnapshot.org/howto/1.1/rsnapshot-HOWTO.fr.html
aptitude install rsnapshot vi /etc/rsnapshot.conf
Configurer votre répertoire de stockage, pour ma part, un disque dur externe
snapshot_root /media/backup/
Décommenter les lignes
cmd_cp /bin/cp cmd_ssh /usr/bin/ssh
L’option suivante est intéressante, elle permet d’utiliser rsync
pour la création de lien dur, plutôt que la commande cp -al
link_dest 1
Modifier l’intervalle de sauvegarde
######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. hourly, daily, weekly, etc. # ######################################### retain hourly 6 retain daily 7 retain weekly 4 #retain monthly 3
hourly ne veut pas dire toutes les heures mais toutes les 4 heures par défaut, donc le 6 permet d’avoir des sauvegardes sur 24h (6*4). Cela étant dit, il est possible de définir hourly s’exécutant toutes les heures.
daily s’exécute tous les jours et garde un historique sur 7 jours.
weekly s’exécute toutes les semaines et garde un historique sur 4 semaines.
Dans mon cas, je voudrais garder les 30 derniers jours et pourquoi pas garder les 12 derniers mois.
retain daily 30 retain monthly 12
Modifier ensuite à la fin du fichier la section
############################### ### BACKUP POINTS / SCRIPTS ### ###############################
Comme bon vous semble. Pour mon cas, je veux sauvegarder tout le répertoire /var/www de mon serveur web distant vers mon serveur de backup ou rsnapshot est installé et ce de façon journalière. Je vais donc mettre
backup root@edmc73.com:/var/www/ edmc73.com/
La sauvegarde du répertoire /var/www de mon serveur web se fera sur mon serveur de backup dans /media/backup/edmc73.com/var/www
Si votre serveur web à un port ssh différent, vous pouvez le spécifier de cette façon.
backup root@edmc73.com:/var/www/ edmc73.com/ ssh_args=-p1234
Pour tester si notre config fonctionne, utilisez la commande
rsnapshot configtest
qui devrait retourner
Syntax OK
Ensuite la simulation d’un backup journalier
:~# rsnapshot -t daily echo 11500 > /var/run/rsnapshot.pid mkdir -m 0755 -p /media/backup/daily.0/edmc73.com/ /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \ --rsh=/usr/bin/ssh root@edmc73.com:/var/www \ /media/backup/daily.0/edmc73.com/ touch /media/backup/daily.0/
On voit ici ce que va faire rsnapshot. Créer un fichier de lock, créer le répertoire cache, faire un rsync via ssh dans les répertoires qui vont bien.
Assurez vous que votre serveur de backup est bien accès au serveur à sauvegarder via ssh avec une clé public (voir SSH)
Et assurez-vous d’avoir installez rsync sur la machine à sauvegarder
aptitude install rsync
Pour programmer l’exécution, nous allons configurer le cron de rsnapshot
vi /etc/cron.d/rsnapshot
Toujours dans mon cas, décommentez la ligne daily et monthly.
Vous pouvez lancer la commande suivante à la main
rsnapshot -v daily
Mais sachez qu’à chaque fois que vous la lancerez, vous décalerez votre sauvegarde. daily.0 deviendra daily.1 et la nouvelle sauvegarde sera daily.0 De ce fait, l’écart entre les 2 daily ne sera pas d’une journée. Donc à éviter !
Sous windows, un service rsync existe, il s’appelle cwRsync Server et est disponible normalement ici ⇒ https://www.itefix.no/i2/cwrsync mais à l’heure ou j’écris ces lignes, le site ne répond pas et j’ai trouvé un site non officiel proposant le téléchargement ici ⇒ http://www.backupassist.com/rsync/
Exécutez cwRsyncServer_4.1.0_Installer.exe et suivez les instructions, n’installez pas SSH (nous sommes dans mon cas dans un réseau local, pas la peine de crypter nos données).
Un mot de passe est proposé pour faire tourner le service, laissez ceci par défaut, nous n’en avons pas besoin.
Modifiez le fichier C:\Program Files\cwRsyncServer\rsyncd.conf ou C:\Program Files\ICW\rsyncd.conf
use chroot = false strict modes = false hosts allow = * log file = rsyncd.log # Module definitions # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work # [test] path = /cygdrive/c/Documents and Settings/Moi read only = false transfer logging = no UID = 0 GID = 0 exclude from =/cygdrive/C/Program Files/ICW/exclude.txt
Exemple :
- /Recent/ - /Local Settings/Temp/ - /Local Settings/Historique/ - /Local Settings/Temporary Internet Files/ - /Cookies/ - /Favoris/ - /IECompatCache/ - /IETldCache/ - /PrivacIE/ - /SendTo/ - /UserData/ - /Voisinage*/ - Thumbs.db - desktop.ini - NTUSER.DAT - ntuser.dat.LOG
En savoir plus sur les exclusions ⇒ https://www.itefix.no/i2/content/excluding-directories-cwrsync
Allez dans votre gestionnaire de service ou pour aller plus vite [Touche Windows]+r tapez services.msc puis Entrée
Recherchez RsyncServer. Par défaut il est en Manuel, double-cliquez dessus, mettez le type de démarrage en automatique pour qu’il se lance à l’ouverture de Windows puis cliquez sur Démarrer pour lancer le service.
“RsyncServer”
“Protocoles et ports” : TCP : 873
“Etendue” : ajouter l’adresse ip de votre serveur
Pour vérifier votre config, allez sur votre serveur de backup et listez les fichiers qui seront synchronisés avec la commande
rsync -n 192.168.0.1::test
Aucune modification ne sera faite.
Coté rsnapshot, j’ai créé un répertoire différent pour ma machine windows, je vais l’appeler /media/backup/windows
Je crée un nouveau fichier de config en copiant celui existant
cp /etc/rsnapshot.conf /etc/rsnapshot_windows.conf
Je m’assure de modifier le répertoire de sauvegarde
snapshot_root /media/backup/windows
De commenter l’option de rsync à traver ssh
# Uncomment this to enable remote ssh backups over rsync. # #cmd_ssh /usr/bin/ssh
Adaptez vos intervalles de backup dans la section qui va bien
######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. hourly, daily, weekly, etc. # #########################################
Modifiez le lockfile si votre sauvegarde est indépendante des autres sauvegardes déjà présentent sur votre serveur.
lockfile /var/run/rsnapshot_windows.pid
Je conseillerai de décommenter l’option suivante et la mettre à 1. Cela permet que si votre PC est éteint, rsnapshot ne fera pas tourner son cycle de sauvegarde, ce qui évite de perdre de vieilles sauvegarde et de faire une copie pour rien.
sync_first 1
Si cette option sync_first
pose problème, j’ai trouvé une alternative qui est peut être mieux.
Il suffit de tester si le PC est dispo avant de lancer la copie et cela grâce à la pre-commande dispo dans le fichier de config.
cmd_preexec /etc/rsnapshot_pre
Mettez le script suivant dans /etc/rsnapshot_pre
/usr/bin/rsync 192.168.0.1::Test # ou votre nom de partage if [ $? -ne 0 ] # on test si le code de retour de la commande rsync est différente de zéro then echo "rsyncd indisponible. PC éteint?" exit 1 fi
Et le point de backup
backup 192.168.0.1::test PC-MOI/
On retrouve l’adresse ip du PC windows à sauvegarder, le double “::“ qui permet de spécifier le module sur lequel on se connecte. On retrouve notre test et le nom du répertoire à destination de la sauvegarde.
Il ne reste plus qu’a configurer notre cron.d
vi /etc/cron.d/rsnapshot
Ajoutez les lignes suivantes suivant vos intervalles
0 20 * * * root /usr/bin/rsnapshot -c /etc/rsnapshot_windows.conf daily 30 19 1 * * root /usr/bin/rsnapshot -c /etc/rsnapshot_windows.conf monthly
Ici j’ai décidé de lancer le backup à 20h, l’option -c de rsnaphot permet de définir un fichier de config spécifique.
Et voila, il ne vous reste plus qu’à installer un petit server samba afin d’accéder facilement à vos backup depuis windows et vous voila tranquille ;)
Créer un script intermédiaire qui sera appelé par rsnapshot en tant que programme rsync (voir fichier de conf)
# Votre traitement pour logguer ce que vous voulez /usr/bin/rsync $@ if [ $? -ne 0 ] then # traitement si la commande rsync échoue else # traitement si la commande rsync à fonctionné fi
Condition: sauvegarde sur une partition btrfs avec un rsnapshot configuré avec link_dest qui permet de dire à rsync de créer lui meme les liens dur. La sauvegarde s’effectue tous les soir sur un poste de travail. Quand ce poste de travail est éteint, je me retrouve avec un répertoire de backup vide. Normalement, le lendemain, toutes les données devrait se retélécharger.
Et ben non, dans la dernière version de rsnapshot, celui-ci vérifie si le répertoire donné dans link_dest est vide, si c’est le cas, il va chercher plus loin
Inspiré du tuto http://it.werther-web.de/2011/10/23/migrate-rsnapshot-based-backup-to-btrfs-snapshots/
Le tuto ci-dessus part d’un disque de backup en ext4 qu’il convertit ensuite en btrfs, donc lisez le si vous êtes dans ce cas.
Ici on fait déjà nos backups sur une partition btrfs, on va modifier les appels aux commandes cp
et rm
en les remplaçant par btrfs subvolume snapshot
et btrfs subvolume delete
L’avantage est la rapidité de la création d’un snapshot par rapport à la création de liens physique et aussi que le snapshot conserve toutes les meta-données des fichiers contrairement aux liens physiques.
Si vous partez de rien, You must create hourly.0 as a BTRFS subvolume from the outset, otherwise it will be created as a directory and propogate itself. You lose the advantage of BTRFS.
# btrfs subvolume create daily.0 # btrfs subvolume create monthly.0 # rsnapshot -c /etc/rsnapshot.conf daily
Script rsnapshot_plug_cp_btrfs qui remplacera la commande cp
#!/bin/bash # Arg 1: -al # Arg 2: /testbtrfs/backups/hourly.0 # Arg 3: /testbtrfs/backups/hourly.1 /sbin/btrfs subvolume snapshot $2 $3
Script rsnapshot_plug_rm_btrfs qui remplacera la commande rm
#!/bin/bash # Arg 1: -rf # Arg 2: /testbtrfs/backups/hourly.4/ # echo 1: $1 2: $@ # Essaie de supprimer le répertoire donné avec la commande btrfs subvolume delete en premier # Si la commande échoue, on supprime le répertoire avec la commande rm if [ "$1" = "-rf" -a "$3" = "" ]; then # "on essaie de supprimer avec btrfs" /sbin/btrfs subvolume delete $2 error=$? if [ $error -eq 13 ]; then # EC 13 => Le répertoire spécifié n'est pas un sous volume rm $@ elif [ $error -ne 0 ]; then echo Erreur en supprimant avec btrfs $? fi else rm $@ fi
Copier ces fichiers ou vous le souhaitez et rendez les exécutables avec chmod 755
Maintenant il faut migrer nos répertoires de sauvegarde en sous volume btrfs. Un script plus poussé est fourni dans le tuto en lien au début de ce chapitre. Ici nous le prenons le cas de backup uniquement journalier (daily)
D’abord on créer un répertoire old pour y stocker tous nos backup daily
mkdir old mv daily.* old
Maintenant nous allons créer un sous volume du plus vieux des backups et y copier son contenu
btrfs subvolume create daily.29 rsync -avi --numeric-ids old/daily.29/ daily.29/
Ensuite nous allons créer un snapshot de ce sous volume et synchroniser celui avec le backup suivant et remonter ainsi jusqu’au dernier backup le plus récent.
btrfs subvolume snapshot daily.29 daily.28 rsync -avi --delete --numeric-ids old/daily.28/ daily.28/ btrfs subvolume snapshot daily.28 daily.27 rsync -avi --delete --numeric-ids old/daily.27/ daily.27/ ... btrfs subvolume snapshot daily.1 daily.0 rsync -avi --delete --numeric-ids old/daily.0/ daily.0/
On doit aussi pouvoir faire un petit script avec une boucle
for (( c=29; c>0; c-- )) do btrfs subvolume snapshot daily.$c daily.$(($c - 1)) rsync -avi --delete --numeric-ids old/daily.$(($c - 1))/ daily.$(($c - 1))/ done
On supprime ensuite les vieux backups
rm -fr old
Maintenant il faut modifier votre fichier de config rsnapshot.conf
Je ne sais pas si l’option suivante est nécessaire, mais dans le doute
no_create_root 1
Maintenant nos 2 scripts. Adapter suivant le chemin ou vous avez placé vos scripts
cmd_cp /bin/rsnapshot_plug_cp_btfrs cmd_rm /bin/rsnapshot_plug_rm_btfrs
A tester aussi
one_fs 1