Sauvegarde mirroir via SFTP avec WinSCP

Classé dans : Administration, Sauvegarde | 8 commentaires

lundi 02 janvier 2012

Je cherchais depuis quelques temps une solution, libre de préférence ou tout du moins gratuite, pour effectuer la sauvegarde en ligne de mon dossier de données perso.

J'ai environ 25 go de données en constante augmentation et ue ligne ADSL limitée, il me fallait donc impérativement une solution qui puisse faire une sauvegarde différentielle, comme le fait très bien Robocopy en local, le tout devant tourner sous Windows.

J'ai donc lancé quelques tests sur plusieurs utilitaires pouvant synchroniser des fichiers via FTP :

  • Syncback SE : fonctionne plutôt bien pour faire de la sauvegarde vers FTP, jusqu'au jour je me suis aperçu qu'il modifiait en local les dates des fichiers pour permettre de retrouver les fichiers modifiés => Exit SyncBack
  • Cobian backup : je n'ai pas réussi à faire du différentiel.

j'ai ensuite testé les solutions de backup en ligne, mais je n'ai pas non plus trouvé mon bonheur (trop cher, trop lent ou trop limité,...)

Voyant que le FTP risquait de me limiter, je me suis ensuite tourné vers les solutions utilisant le SFTP ( je disposais déjà chez OVH d'un hébergement mutualisé de 100 Go accessible par SFTP pour 4 ou 5 €/mois).

J'ai testé RSync pour Windows. Ca fonctionnait bien mais ce n'était pas très stable et en cas de coupure de la connexion, il fallait reprendre de zero.

J'ai alors trouvé la solution au travers de l'utilitaire Open Source WinSCP que j'utilisais déjà pour accéder à des machines Linux. Un petit script dessus et c'était bon.

Voyons voir comment procéder :

1/ Installation

Rien de plus simple :

  1. Créez un  dossier WinSCP quelque part sur votre disque.
  2. Dans ce dossier, créez les sous-dossiers suivants :
    • bin
    • inc
    • log
  3. Téléchargez la version portable de WinSCP 5 (la 4 gère mal les accents dans les noms de fichier) : http://winscp.net/eng/download.php.
  4. Décompressez l'archive et copiez le fichier winscp.exe dans le dossier bin.

2/ Paramétrage

  1. Lancez le fichier wiscp.exe et configurez une nouvelle connexion (il faut bien enregistrer le mot de passe).
  2. Donnez à cette configuration un nom explicite et sans caractères spéciaux :

     
  3. Configurez le script WinSCP pour le backup :
    Créez un fichier backup.script dans le dossier inc et insérez le contenu suivant (en l'adaptant à vos chemins):

option batch on
option confirm off

open <nom de la session précedemment créée>

option transfer binary

synchronize remote <D:\dossier-local> </home/fred/dossier-distant> -delete -criteria=size

close
exit
  1. Créez à la racine du dossier le fichier backup.bat et insérez le contenu suivant :
@echo off
del log\synchro.log
bin\winscp.exe /console /script=inc\backup.script /log=log\backup.log

3/ Lancement de la sauvegarde

Il suffit de lancer le fichier backup.bat.

En cas de problème, consultez le fichier log/backup.log.

La synchro initiale va être très longue, mais les suivantes ne prendront en compte que les fichiers modifiés depuis le dernier lancement et sera beaucou plus rapide.

WinSCP, en cas de coupure de connexion reprend là où il s'était arrêté.

 

Conclusion

Cette solution fonctionne tellement bien chez moi que je l'utilise désormais au travail pour faire des backup distants sur des serveurs qui comportent plusieurs millions de fichiers répartis sur plus de 150 Go (il a fallu plus d'une semaine pour la synchro initiale entre les 2 hébergeurs, mais maintenant quelques heures suffisent toutes les semaines).



Commentaires

Le 13 novembre 2012 Schmitt a dit :

Développeur dans la société dans laquelle je travaille, je vous remercie pour votre éclaircissement. J'utilisais déjà WinSCP mais en mode Windows. Il me fallait automatiser un dépôt de fichier sur un serveur SSH sans intervention de qui que ce soit. J'ai du adapter évidemment mais cela fonctionne parfaitement. La synchro est rapide. Merci.

Le 24 décembre 2012 Trebonius a dit :

Merci pour cet article, qui m'a vraiment aidé !

Est-il possible d'avoir avec cette méthode une syncrhonisation "bidirectionnelle" : si un fichier a été modifié/supprimé sur le serveur, que cette modification/suppression soit répercutée sur ma machine locale ?

Le 12 février 2013 cunimb a dit :

Merci beaucoup pour ces explications très claires.

Le 25 novembre 2013 Thierry a dit :

Bonjour
Erreur "HOST DOES NOT EXIST"
j'ai suivis scrupuleusement a la lettre...

Le 10 décembre 2013 denis a dit :

Bonjour

Merci pour cette solution, cela fonctionne à merveille.

Le 06 août 2014 Kitecat a dit :

Merci, ca marche très bien et simplement.
J'ai enlevé l'argument -criteria=size
car lorsqu'un fichier était modifié sans changement de taille, il n'était pas pris en compte.
Du coup la détection est sur la date, ce qui n'est pas parfait non plus.

Le 20 février 2015 Philippe a dit :

Bonjour,
Merci pour cette procédure très efficace.
Pour moi, la cerise sur le gâteau serait que la procédure se fasse en 3 étapes :
1- Identification des fichiers à mettre à jour
2- Copie de ces fichiers dans une archive 'aaammdd....' pour conserver l'historique
3- Synchronisation
Avez vous une idée pour ajouter les étapes 1- et 2- ?
Merci
Philippe

Le 03 mai 2015 Mickaël a dit :

Bonjour,

Merci pour ce tuto. J'utilisais jusqu'à présent FullSync qui ne fonctionne plus.
Synchro très rapide, encore merci.

Fil RSS des commentaires de cet article