Utilisation de Robocopy pour sauvegarde sur un NAS

Objectif : sauvegarder des répertoires de mon disque dur vers un partage réseau (NAS) qui devra contenir le miroir exact des répertoires sources.
Outil utilisé : Robocopy (version XP027, inclus avec Windows 7)
Sources des répertoires : Laptop HP EliteBook 8530w sous Windows 7 Pro 64 bit, Filesystem : NTFS
Cible des répertoires : NAS Western Digital My Book World Edition II (modèle à 2 disques, lumière blanche, configuré en RAID 1), Filesystem : EXT3

J’ai fait de nombreux tests, j’ai lu le guide officiel de 35 pages qui date un peu (version XP010), étudié toutes les options (switchs) de Robocopy. Voici mon retour d’expérience, les problèmes que j’ai rencontré et les interrogations qui en découlent…

Le switch /DCOPY:T permet de conserver la date de modification (colonne “modifié le” de l’explorateur Windows) des dossiers sources dans le répertoire de destination. Si vous omettez ce switch les répertoires dans le dossier de destination prennent la date de modification du moment où les répertoires sont créés dans la destination.

Le switch /FFT est obligatoire dans le cas où vous traitez des répertoires source/destination sur des volumes ayant des systèmes de fichiers différents (dans mon cas je pars de NTFS pour aller vers mon NAS qui est en EXT3). Si vous omettez ce switch Robocopy considère que les fichiers sont différents entre la source et la destination même s’ils sont strictement identiques en tout point.

Les switchs /XJ ou encore /SL, permettant d’exclure les points de jonctions et les liens symboliques de fichiers ne me seront pas utiles. En effet, j’indique avec précision chaque chemin avec une ligne pour chaque dossier source / dossier destination. Exemple : Je veux sauvegarder “Mes Images” et “Téléchargements”. Ma premiere ligne indique “C:\Users%username%\Pictures” et ma seconde “C:\Users%username%\Downloads”. Si je voulais sauvegarder ces répertoires en sauvegardant directement leur répertoire parent “C:\Users%username%” le switch /XJ me serait alors utile car ce dossier est pourvu de points de jonction.

Le switch /EFSRAW ne me sera pas utile car je n’ai pas de fichier encrypté.

Le switch /X me pose problème. Je n’arrive pas à reproduire une situation où je vois la différence dans le log que j’utilise ou non ce switch. “/X signale tous les fichiers supplémentaires et pas uniquement ceux sélectionnés.” Si quelqu’un peut m’éclairer en me donnant un cas concret je suis preneur !

Mon 1er script était : robocopy “C:\source” “\ip_address\target” /MIR /DCOPY:T /FFT /V /NP /LOG+:“C:\LOG.txt” /R:5 /W:12

Les switchs /V /NP /LOG+ sont justes utiles pour le log. En parlant du log justement…j’avais un problème d’affichage des caractères accentués, réglé avec la commande chcp 1252 exécutée avant de lancer robocopy et qui permet de changer la page de codes actives (par défaut j’étais en chcp 850). En faisant ça plus de souci tout s’affiche nickel dans le log !

J’ai aussi testé le switch /MT (uniquement dispo avec Windows 7 et Windows Server 2008 R2) permettant de faire des copies en multi-thread mais le fait d’introduire cette commande désactive le switch /NP (du coup, le log affiche le pourcentage de progression) et désactive également des éléments d’informations utiles dans le “job summary” (le résumé du log affiché tout en bas). Ce bug n’a visiblement jamais été corrigé donc je n’utiliserai pas ce switch.

Par défaut, Robocopy fonctionne en mode /COPY:DAT c’est à dire que les infos de sécurité NTFS ne sont pas recopiées dans le répertoire de destination. Pour cela on peut prévoir de rajouter /COPYALL (toutes les infos NTFS sont recopiées, équivalent à /COPY:DATSOU) ou bien rajouter seulement les infos de sécurité ACL NTFS (switch /SEC, équivalent à /COPY:DATS). Concernant le mode par défaut /COPY:DAT j’ai pu remarqué que dans mon cas le “A” était ignoré, revenant à /COPY:DT puisque lorsque je regarde mon dossier de destination j’ai l’attribut “N” pour tous les fichiers et “D” pour tous les dossiers alors que du côté de mon répertoire source j’ai des fichiers en lecture seule, archive, etc. Pour tester, j’ai fait un simple copier/coller d’un fichier du répertoire de destination (sur le NAS donc) vers C:\ et là j’ai chaque fichier en attribut Archive. A quoi correspondent “N” pour les fichiers et “D” pour les dossiers en tant qu’attributs côté répertoire de destination ? Est ce lié au fait que je pars de NTFS pour aller vers EXT3 ? Est-ce un comportement normal ou un bug ? Vaut-il mieux donc utiliser /COPY:DT au lieu du mode par défaut, /COPY:DAT ?

Pour les infos de sécurité NTFS, que ce soit /COPY:DATS, ou /COPY:DATSO ou /COPY:DATSOU aucun ne passe et le fait d’introduire le “S”, le “O” ou le “U” me retourne un message d’erreur “ERREUR 5 (0x00000005) Copie de la sécurité NTFS dans le répertoire de destination”. En relisant la doc de ROBOCOPY (XP010) j’ai pu confirmer ce comportement. On peut y lire le paragraphe suivant : “If either the source or the destination volume is not NTFS, requests to copy security information are ignored. Only one attempt is made to copy NTFS security information for each file or directory copied.” Effectivement, en testant avec un répertoire de destination local sur mon laptop pas de souci avec /COPYALL…les répertoires source et cible sont tous les 2 sur des Filesystem NTFS. J’imagine qu’il n’est pas possible de faire autrement et que cela est lié au FileSystem EXT3 ?

Quand je regarde l’onglet “Sécurité” des fichiers présents sur le NAS je remarque que le groupe “Tout le monde” dispose d’un contrôle total et que deux autres lignes sont présentes : “nobody (Unix User\nobody)” et “jewab (Unix Group\jewab)”. Ces deux lignes ayant chacune un accès Lecture + Ecriture. A quoi cela correspond t-il ? Est-ce un bug ou un comportement normal ?

En comparant les dates dans l’explorateur Windows à l’aide des colonnes “Modifié le” et “Date de création” j’ai pu constater des différences entre la source et la cible. En effet, dans mon répertoire de destination les dates sous la colonne “Modifié le” sont identiques à la source à la fois pour les fichiers et les dossiers (pour les dossiers cela est possible grâce au switch /DCOPY:T). En revanche, sous la colonne “Date de création” aucune date affichée dans mon répertoire de destination ne correspondent à celles de mon répertoire source; que ce soit pour les fichiers ou les dossiers. Au final, j’ai donc mon répertoire de destination sur mon NAS avec les dates sous la colonne “Date de création” identiques à celles sous la colonne “Modifié le” pour les fichiers et les dossiers. Cela est-il normal ? Est-il possible de forcer Robocopy à conserver les bonnes dates pour la colonne “Date de création” ?

Mon script actuel : robocopy “C:\source” “\ip_address\target” /MIR /COPY:DT /DCOPY:T /FFT /V /NP /LOG+:“C:\LOG.txt” /R:5 /W:12

Voilà, j’espère que ce “pavé” de texte n’est pas trop indigeste… Pour une meilleure visibilité j’ai mis mes questions en italique, gras, souligné dans les différents paragraphes. Avis aux experts de Robocopy j’ai besoin de vous !

Merci d’avance
WaxMax

Tu aurais dû désactiver les smileys dans ton message, parce que ça bousille certaines lignes de commandes…

Pour la date de création, il faut savoir que c’est celle où les fichiers ont été créés sur le volume considéré : si tu copies aujourd’hui un fichier (modifié avant-hier) de A vers B, alors le fichier de B aura pour DM avant-hier, mais pour DC seulement aujourd’hui

En gros, c’est donc un comportement normal, car “date de création” ne signifie pas “date de création du fichier dans l’absolu”, mais uniqument “sur ce volume”.

En ce qui me concerne : il m’arrive de vouloir synchroniser deux dossiers sur plusieurs volumes différents, mais c’est vrai que lorsqu’on passe de l’heure d’hiver à l’heure d’été, Windows a la mauvaise habitude de changer l’heure de modification des fichiers du disque dur interne (alors qu’il ne devrait pas y toucher, normalement). Et lorsque je synchronise un dossier local et un dossier sur DD externe, il copie aussi les fichiers déjà présents… On peut donc le forcer à les ignorer avec le paramètre /dcopy:t (ou /dst) ?
Edité le 30/09/2011 à 11:46

Tout d’abord, chapeau pour le post (et le boulot que tu as déjà fait avec robocopy), il risque plus d’aider du monde que t’aider toi :ane:

Bon pour les histoires de systèmes de fichiers, je ne pourrait pas t’aider n’ayant moi-même jamais mis les mains dans ce cas de figure.

Par contre pour l’histoire des dates de création/modification, il faut savoir qu’il y a un bug connu chez MS au moins sur 2003. Le problème est plus une mauvaise lecture des informations par l’OS que de mauvaises informations sur les fichiers.

Il y a un KB pour ce patch mais malheureusement pour moi il n’est pas suffisant, certains serveurs en ont besoin, d’autres pas (alors qu’ils sont quasi identiques dans l’install) et même en installant ce patch le problème n’est pas systématiquement résolu.

Sinon en rêgle générale pour travailler avec Robocopy, j’utilise deux choses qui me facilite la vie:

  • Robocopy GUI, une interface graphique pour générer facilement des lignes de commandes
  • l’option /NOCOPY qui permet d’exécuter la ligne et d’obtenir un log du résultat sans pour autant faire la moindre action (pas de copie, suppression…)

En espérant que cela puisse t’aider.