Migrations de serveurs de fichiers avec Robocopy partie 1 sur 2

Ce blog est la partie 1 d’une série en 2 parties. Pour voir la partie 2, cliquez ici.

Avec diverses saveurs de systèmes d’exploitation Windows Server sortant du support cette année, je me suis retrouvé avec un nombre décent de migrations de serveurs de fichiers d’un système à un autre. Parfois, si le serveur n’a pas d’autres rôles ou fonctions installés autres qu’un simple serveur de fichiers, alors je pourrais simplement dé-partager les partages sur le serveur d’origine, détacher le disque dur virtuel de celui-ci, attacher le disque dur virtuel au nouveau serveur et partager à nouveau les partages. Cela permet de conserver les autorisations NTFS si les deux serveurs sont membres du même domaine Active Directory. Elle est aussi généralement très rapide car il n’est pas nécessaire de copier des téraoctets de données d’un serveur à l’autre. Cependant, ce processus ne fonctionne de manière élégante que lorsque les données de partage de fichiers existent sur un volume qui n’est pas celui où Windows ou toute application sont installés.

Lorsque le besoin se fait sentir de dupliquer les données pour la migration vers le nouveau serveur, je reviens toujours au vieux fidèle-Robocopy (Robust File Copy for Windows). Robocopy existe depuis l’époque de NT4 en 1996, donc ce n’est probablement pas la première fois que vous en entendez parler. À l’époque et jusqu’en 2008, elle était disponible avec le téléchargement du kit de ressources Windows. À partir de 2008, il a été intégré aux systèmes d’exploitation des ordinateurs de bureau et des serveurs, à commencer par Vista et Server 2008. Donc, il y a de fortes chances que si vous démarrez une invite de commande sur votre ordinateur et que vous tapez « robocopy / ? », vous verrez apparaître sur votre écran le dump d’aide d’informations sur la façon d’utiliser l’utilitaire.

Il y a pas mal d’options quand il s’agit de migrations de serveurs de fichiers à l’aide de Robocopy, et vous pourriez ne pas savoir par où commencer. Soyez prudent avec certaines des options si vous ne faites qu’essayer, car certaines d’entre elles déplacent les données (en supprimant les fichiers et les dossiers dans l’emplacement source ou l’emplacement cible).

Au fil des années d’utilisation, j’ai trouvé que cette syntaxe est celle à laquelle je reviens encore et encore:

robocopie \Sourceserver\ShareName D :\Shares\ShareName /e /b /copyall /PURGE /r:5 /w:5 /MT:64 /tee /log+:D:\Shares\log_ShareName _%date:~-10,2% »-« %date:~7,2% »-« %date:~-4,4%.txt /v

Décomposons cela.

Robocopy
Initie la commande.

\Sourceserver\ShareName
Le premier paramètre est toujours l’emplacement de la source. En général, je lance toujours Robocopy à partir du nouveau serveur de fichiers car:

  • Il aura probablement une version plus récente de Robocopy installée ; et
  • Je n’aurai probablement pas encore les partages construits sur le nouveau serveur.

D:\Shares\ShareName
Le deuxième paramètre est toujours l’emplacement de destination. Je vous encourage vivement à ne pas les placer sur le volume du système d’exploitation C:\\ lorsque cela est possible. J’aime aussi créer un dossier racine appelé « Shares » et y placer tous les dossiers partagés au lieu de les laisser à la racine. Il y a de multiples avantages à cela que j’ai trouvé au fil des ans.

Les paramètres suivants n’ont pas besoin d’être dans un ordre particulier.

/e

Ceci copie les sous-répertoires, y compris les vides. C’est ici que la véritable valeur de Robocopy entre en jeu. Si elle ne copiait que les fichiers du dossier partagé de premier niveau, elle n’aurait pas beaucoup de valeur.

/b
Ceci copie les fichiers en mode Sauvegarde. Cela ne crée pas un instantané VSS, mais au lieu de cela, cela est utile si le compte Windows avec lequel vous exécutez Robocopy peut ne pas avoir un accès complet à l’emplacement source en raison des ACL dans NTFS.

/copy all
Alors vous vous êtes peut-être demandé, pourquoi tous ces tracas ? Pourquoi ne pas naviguer vers les deux emplacements et copier-coller les fichiers d’un emplacement à l’autre ? Ce paramètre copie toutes les informations du fichier. Ainsi, il n’y a pas de nouvel horodatage, ou de propriétaire, ou de permissions NTFS héritées alors qu’il ne devrait pas y en avoir, etc. Toutes les informations sur le fichier comprennent :

  • Data
  • Attributs
  • Timestampes
  • Sécurité (NTFS ACLs)
  • Infos du propriétaire
  • Infos d’audit

/PURGE
Ce paramètre supprime les fichiers et dossiers de destination qui n’existent plus dans la source. Notez que techniquement, l’utilisation des paramètres /e et /PURGE ensemble donne le même effet que l’utilisation d’un seul paramètre par lui-même (/mir – pour « miroir »), mais je préfère avoir un grand « PURGE » majuscule dans la syntaxe ainsi quand je le regarde, je sais que je suis probablement en train de supprimer quelque chose. La question qui se pose ici est la suivante : si le fichier ou le dossier n’existe plus dans l’emplacement source, pourquoi tenterais-je de le copier sur la cible ? En outre, pourquoi voudrais-je supprimer un fichier qui n’a jamais existé en premier lieu.

C’est le deuxième endroit où Robocopy brille vraiment. En général, je ne lance pas Robocopy une fois et c’est terminé, sauf si je copie des données inactives et périmées. Je crée habituellement une tâche planifiée pour exécuter un fichier batch qui inclut les lignes de Robocopy à exécuter. En gardant cela à l’esprit et avec les paramètres ci-dessus, la première exécution de la tâche prendra un certain temps car elle doit effectuer la copie initiale de toutes les données. Cependant, lors de l’exécution suivante (je le configure généralement pour qu’il soit exécuté quotidiennement après les heures de bureau), il examinera la source et la comparera à la cible, et si le fichier n’a pas changé, il n’en fera rien. Si le fichier de la source est plus récent, il écrasera le fichier de la cible. Si le fichier dans la source a été supprimé depuis la dernière exécution du travail, le même fichier dans la cible sera supprimé automatiquement aussi. Pour une migration réelle de partage de fichiers, je configure cette tâche environ une semaine à l’avance, je regarde les journaux qu’elle génère, je résous les problèmes éventuels et je la laisse fonctionner quotidiennement jusqu’à la date prévue pour le transfert. À la date de basculement, je place le partage source en lecture seule et j’exécute une nouvelle fois la tâche Robocopy pour copier tous les deltas qui ont été modifiés depuis la dernière exécution. Ensuite, pour conclure, je dé-partagerais le partage source puis partagerais le nouveau partage.

/r:5
Ce drapeau spécifie le nombre de fois où Robocopy réessayera une copie échouée sur un fichier ou un dossier. Parfois, cela échoue parce qu’il y a un verrou sur le fichier parce que l’utilisateur ou le processus l’a ouvert. Dans ce cas, Robocopy réessaie la copie pour voir si le verrou n’est plus sur le fichier. Par défaut (si vous ne spécifiez pas ce paramètre), Robocopy réessaie la copie 1 million de fois. Sachant que nous allons essayer de copier à nouveau ce fichier lors de la prochaine exécution programmée dans un jour, je suis plus que satisfait d’essayer cinq tentatives, et si la copie ne réussit pas, passer au fichier suivant.

/w:5
Ce drapeau va de pair avec /r. Ce drapeau spécifie la quantité de temps en secondes à attendre entre les tentatives. La valeur par défaut est de 30 secondes. En mettant 2 et 2 ensemble, 1.000.000 * 30 = 30.000.000 de secondes ou 500.000 minutes ou 8.333 heures et 20 minutes ou 347 jours et 5 heures. Cela signifie que si un seul fichier était verrouillé et le restait, Robocopy mettrait presque un an avant de passer à la tâche suivante ! C’est une nécessité pour définir les drapeaux /r et /w de manière appropriée.

/MT:64
Ce drapeau définira un nouveau nombre maximum de threads lors de copies multi-threads. Cela ne copie pas plusieurs fichiers ou dossiers en même temps, mais utilise plutôt plus de threads avec le processeur pour faire la copie qu’il a été configuré pour faire. Le nombre par défaut est de 8. J’aime augmenter ce nombre jusqu’à un total de 64 (gardez cela à l’esprit si vous exécutez plusieurs tâches Robocopy simultanément). L’ouverture du fichier source, l’ouverture du fichier de destination, la copie des données, la fermeture du fichier source et la fermeture du fichier de destination entraînent une surcharge du processeur. Si tout cela doit être fait avant de passer au fichier suivant, il est possible que le sous-système d’E/S soit inactif pendant une partie du temps où il aurait pu travailler. Remarque : votre système semblera probablement lent, car il fait travailler le CPU de manière décente. Si c’est sur un nouveau serveur de fichiers pas encore en production, cela ne devrait pas avoir d’importance s’il est « lent ». »

/tee
Par défaut, lorsque cela est exécuté manuellement à partir de l’invite de commande, Robocopy affichera ce qu’il fait à l’écran. Avec potentiellement des milliers de fichiers à copier, cela constitue un moyen moins qu’efficace de trouver quelque chose qui s’est mal passé. En spécifiant /tee (au lieu de l’omettre complètement), vous obligerez Robocopy à afficher les données dans la fenêtre de la console, ainsi que dans le fichier journal. Ceci est particulièrement utile s’il s’agit de votre première exécution de la tâche Robocopy et que vous cherchez à résoudre un problème qui ne fonctionne pas comme il le devrait. Si je crée une tâche planifiée du travail Robocopy, je recommande de laisser cette commande.

log+:D:\Shares\log_ShareName _%date:~-10,2% »-« %date:~7,2% »-« %date:~-4,4%.txt

Par défaut, la seule journalisation de Robocopy est l’affichage à l’écran. Avec le paramètre /log, spécifiez le chemin d’accès à un nouveau fichier (ou à un fichier existant). Le fichier sera écrasé s’il existe déjà. Cependant, lorsque vous effectuez ce processus avec une tâche planifiée, vous pouvez souhaiter voir toutes les itérations de l’exécution au lieu de la plus récente. En spécifiant le + après log (/log+), il sera ajouté au fichier spécifié au lieu de l’écraser. De même, en mettant « _%date:~-10,2% »-« %date:~7,2% »-« %date:~-4,4% » dans le nom du fichier, il créera automatiquement un nouveau fichier (s’il a été exécuté pour la première fois ce jour-là) avec un suffixe de _MM_JJ_AAAAA à la fin du fichier journal pour une référence historique. Pour les partages de fichiers particulièrement importants, même les fichiers journaux peuvent atteindre plusieurs gigaoctets s’ils sont laissés en cours d’exécution pendant des jours et les diviser en journaux quotidiens a beaucoup de sens.

/v
Ce paramètre montre la sortie Verbose, qui montrera les fichiers sautés. En général, vous voulez vraiment voir cela pour vous assurer que les fichiers sautés sont journalisés.

Dans la partie 2 de ce blog, je montrerai comment configurer une tâche Robocopy quotidienne avec le planificateur de tâches.

Vous avez des questions sur la migration de vos serveurs de fichiers ? Contactez Sikich. Nous sommes prêts à vous aider.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.