Migrer un serveur de fichiers avec Robocopy

Je vous propose de découvrir dans ce tutoriel comment migrer les fichiers d’un serveur vers un nouveau serveur avec l’outil Robocopy. Il existe de nombreux outils, plus ou moins complexes, avec une interface plus ou moins attrayante, permettant de migrer un serveur vers un autre, mais le plus performant, de part ses options et sa robustesse, reste indéniablement Robocopy. En plus il est GRATUIT!

Les préparatifs de la migration

Tout d’abord si vous avez un OS antérieur à Windows Server 2003 R2, téléchargez et installez la dernière version de Robocopy disponible sur le Kit de Ressources Windows 2003.

robocopy.exe sera installé dans C:\Program Files\Windows Resource Kits\Tools.

Si vous avez installé le kit de ressources sur votre station d’administration, copiez robocopy.exe sur le C:\ du serveur sur lequel vous souhaitez migrer les données, votre nouveau serveur de fichiers.

Pour les versions plus récentes (Windows Server 2003 R2 / 2008 / 2008 R2 / 2012 et 2012 R2), Robocopy est déjà intégré.

Connectez-vous sur le nouveau serveur de fichier et ouvrez une invite de commande.

Tapez cd\ afin de vous positionner sur le C:\ de votre nouveau serveur. Vous pouvez ainsi accéder à robocopy.exe

A noter que si vous installez le Kit de ressources directement sur votre nouveau serveur, celui ci sera référencé dans le « Path » du serveur ce qui rendra Robocopy accessible depuis n’importe quelle emplacement de votre ligne de commande.

Le principe pour migrer un serveur

Pourquoi prévoir une longue interruption de la production pour migrer plusieurs centaines de gigaoctets voir de téraoctets? Il est possible de lancer la copie des fichiers du serveur source vers le serveur cible plusieurs jours en avance puis de réaliser une mise à jour incrémentielle de temps en temps afin de n’avoir que très peu de modification à synchroniser.

Ainsi le jour J il ne reste plus qu’à couper l’accès aux utilisateurs à l’ancien serveur, lancer une dernière synchronisation des fichiers récemment modifiés, puis d’établir l’accès sur le nouveau serveur.

Vous pouvez même vous simplifier la vie en redonnant l’ancien nom de serveur au nouveau serveur, ce qui vous évitera de mettre en place des scripts de migration des lecteurs réseaux de vos utilisateurs ;-). Bien entendu s’il suffit de modifier le logon script de vos utilisateurs pour les faire pointer vers le nouveau serveur, un changement de nom ne posera pas de problème. Pensez toutefois à bien communiquer auprès des utilisateurs en leur demandant de ré-ouvrir leur session au moment voulu pour que le nouveau mappage soit pris en compte!

Construire son script

Robocopy propose de nombreuses options parfois complexes et qui seront bien souvent inutiles. Concrètement lorsque l’on veut déplacer des données d’un serveur vers un autre, l’idéal est de conserver exactement la même arborescence et de récupérer les droits NTFS associés. Je déconseille fortement de mélanger migration ET réorganisation lors d’une même opération. Vous risquez de vous emmêler les pinceaux.

Pour lancer la copie d’un partage source vers un partage cible il faut lancer la commande suivante:

robocopy "\\serveursource\share" "\\serveurcible\share"

Mais il sera possible d’agrémenter cette commande grâce à de nombreuses fonctionnalités !

/MIR : Cette option permet de reporter les changements de la source vers la cible. Si un fichier est créé sur la source il va être copié vers la cible. Si un fichier est supprimé sur la source, il le sera également sur la cible.

/SEC : Cette autre option géniale permet de migrer également les droits NTFS !

/B : Cette option est très utile si en tant qu’administrateur vous n’avez pas tous les droits NTFS sur certains dossiers. Je vous la conseille donc fortement si vous ne voulez pas être dans l’obligation de vous réapproprier les dossiers en question manuellement pour pouvoir les migrer.

/LOG : Autant garder un historique de la copie. Cette option désactive le « verbose » à l’écran. Voir l’option qui suit !

/TEE : Lorsque l’on utilise /LOG l’intéractivité à l’écran peut être conservé grâce à cette option

/MON:x : Permet de lancer la commande en mode monitor, c’est à dire que la commande va rester active et attendre un certain nombre x de changements apportés sur la source pour les copier sur la cible. Ainsi la première fois tout va être copié et la commande va attendre les changements.

/RH:hhmm-hhmm : Cette option permet de lancer le script qu’à une certaine plage horaire, très pratique si vous préférez lancer la copie la nuit.

/MOT:x : Idem que /MON mais cette fois x correspond à un nombre de minutes d’attente avant de relancer la synchro.

Grâce à ces quelques options, il en existe beaucoup d’autres, j’effectue mes migrations très simplement.

Je lance mes commandes depuis une invite de commande ou depuis un fichier batch si j’ai plusieurs partages localisés un peu n’importe où …

Quelques jours avant le changement de serveur je lance ma première copie grâce à la commande suivante :

robocopy "\\serveursource\share" "\\serveurcible\share" /MIR /SEC /B /RH:2000-0700 /TEE /LOG+:c:\journal.log

De cette manière ma copie se déroule de 20h à 6h du matin. Si mon volume de données à copier est tel que cela n’a pas suffit ! Je peux le relancer une seconde fois, une troisième fois …

Lorsque tout est copié, j’utilise plutôt la commande suivante:

robocopy "\\serveursource\share" "\\serveurcible\share" /MIR /SEC /B /MOT:10 /TEE /LOG+:c:\journal.log

Le script va rester en stand-by et toutes les 10 mn, les changements vont être synchronisés ! Je laisse le script actif jusqu’au jour de la migration, sans stress.

Et pour finir le jour de la bascule, je coupe l’accès aux utilisateurs et je lance :

robocopy "\\serveursource\share" "\\serveurcible\share" /MIR /SEC /B /TEE /LOG+:c:\journal.log

Ensuite je change le nom des serveurs afin de nommer mon nouveau serveur comme l’ancien et ma migration est terminée ! Je prend soin de supprimer mon script afin de ne pas le relancer par accident. Ceci étant l’ancien serveur étant arrêté et renommé, il n’y a pas de risque.

Gérer les problèmes d’accents

Selon la langue du système il est possible que Robocopy ait du mal à interpréter les accents. Pour éviter cet écueil Il suffit d’ajouter une simple petite commande à votre script, pour en savoir plus consultez mon article Comment éviter les problèmes d’accents avec Robocopy.

11 commentaires sur “Migrer un serveur de fichiers avec Robocopy”

  1. Bonjour Cris, je vois qu’on vis les mêmes frustrations.

    Tu peux consulter mon blog à ce propos :

    Page de code/code page dans les scripts
    http://www.sysblog.ca/?p=29

    En résumé, tu peux ajouter « chcp 1252 » pour changer le code de page au début de ton script ou dans ta ligne de commande.

  2. Salut, intéressant ton tuto, dis moi comme tu laisse le script actif sur le serveur ? tu te connect en TS et tu laisse ta session ouverte ?

  3. bonjour, j’ai le même problème avec robocopy et les accents. Le test dir fonctionne très bien.

    Avez vous finalement résolu le souci.

    Cordialement

  4. Cris,

    Je suis très surpris par ton problème d’accent. J’ai comme l’impression que ton interpréteur DOS ne comprend pas le français ;-). Peux tu aller voir dans tes paramètres régionaux si tu utilises bien le bon language.

    Je ne pense pas que cela robocopy soit la cause du problème. Essayes de lancer une autre commande comme :

    dir « Données »

    @+

  5. Hananen

    Tu utilises le /ETA pour afficher le pourcentage et le /NP qui lui annule tout affichage … :-(. Enlève le /NP (No Progress) et ca va fonctionner @+

  6. bonjour
    j’ai fais un test de copie de dossier du disque c vers d , et je voudrais pouvoir voir le pourcentage de copie , j’arrive pas , dans ma ligne de commande y a pas le NP ;
    robocopy « \\cbi17931\c$\save » d:\sauvfich /E /SEC /LOG /NP /ETA /TEE /R:5 /W:5

  7. Merci pour cet article, robocopy c’est super, sauf que je rencontre un problème avec les accents, pourtant j’utilise EDIT pour faire le BAT, sinon super outil.
    à+
    Cris

    PS: Si vous avez une solution pour les chemins avec accent dans robocopy je suis preneur, car il interpréte le chemain « \Donn,es » au lieu de « \Données »

Laisser un commentaire