Commande ROBOCOPY pour effectuer une sauvegarde incrémentielle

31

Je suis submergé par la documentation ROBOCOPY. Je souhaite effectuer une sauvegarde incrémentielle de mes fichiers locaux sur le lecteur réseau (M). Je veux qu'il s'exécute le plus rapidement possible, sans fichier journal et avec le moins de texte possible à l'écran. Mes fichiers sont tous quelque part dans un dossier (MyFolder) qui contient de nombreux sous-dossiers imbriqués. Par «incrémental», je veux dire «ne copiez que ce qui est nouveau ou changé». Je ne veux supprimer aucun fichier historique dans la destination, mais si j'ai changé un fichier, je ne veux que la version la plus récente. Et si je n'ai pas modifié un fichier, je ne veux pas le copier sur le fichier sauvegardé existant. Est ci-dessous correct? (Exécution de Win7 Enterprise.)

robocopy C:\MyFolder M:\MyFolder /z /np /xo /e

S'il vous plaît, pas de suggestions pour autre chose que la photocopie. Je n'ai pas le droit d'installer quoi que ce soit. Et je me fiche des trucs de sécurité. J'ai des gens pour ça (que je les veuille ou non). ;-)

dmm
la source
1
Vous avez besoin d'une option / s ou / e pour copier les sous-répertoires.
David Marshall
@DavidMarshall: oups. Je le savais vraiment. Ajoutée. Alors, je vais bien maintenant?
dmm
Oui. J'utilise quelque chose de similaire.
David Marshall
Le tester maintenant. Il y a encore beaucoup de choses en cours d'écriture sur l'écran. Comment puis-je m'en débarrasser dans les prochaines courses?
dmm
3
Une option qui peut faire une grande différence en termes de performances est d'avoir des transferts multithreads. /MT[:N] J'ai un processeur à 4 cœurs, donc j'utilise généralement quelque chose dans la rage 8-16 pour mon nombre de threads. Je figure 2-4 fils par noyau. Vous devez certainement tester avec différentes valeurs sur votre matériel. Le multithread aide le plus lorsque vous avez beaucoup de petits fichiers. Si vous avez un petit nombre de fichiers volumineux, cela n'aidera pas autant.
Zoredache

Réponses:

40

J'utilise avec succès une variante du script suivant depuis quelques années maintenant:

robocopy C:\source M:\destination /MIR /FFT /R:3 /W:10 /Z /NP /NDL

Explication des paramètres

  • L' /MIRoption (équivalente à /E /PURGE) signifie "miroir" et est l'option la plus importante. Il considère votre dossier source comme le "maître", ce qui le fait écraser toutes les modifications du côté cible, ce qui est un paramètre utile pour une sauvegarde.

  • /FFTest une option très importante, car elle permet une différence de 2 secondes lors de la comparaison des horodatages des fichiers, de sorte que les différences d'horloge mineures entre votre ordinateur et votre périphérique de sauvegarde n'ont pas d'importance. Cela garantira que seuls les fichiers modifiés sont copiés, même si les heures de modification des fichiers ne sont pas exactement synchronisées.

  • /R:3spécifie le nombre de nouvelles tentatives, si la connexion échoue, et /W:10spécifie un temps d'attente de 10 secondes entre les nouvelles tentatives. Ce sont des options utiles lors de la sauvegarde sur un réseau.

  • /Z copie les fichiers en "mode de redémarrage", de sorte que les fichiers partiellement copiés peuvent être poursuivis après une interruption.

  • /NPet /NDLsupprimer une sortie de débogage, vous pouvez en outre ajouter /NS, /NC, /NFLafin de réduire davantage la quantité de la production (voir la documentation pour plus de détails). Cependant, je suggère d'imprimer une sortie de débogage lors des premières exécutions, pour vous assurer que tout fonctionne comme prévu.

Paramètres supplémentaires utiles mentionnés par d'autres utilisateurs

  • /XJDexclut les "points de jonction" pour les répertoires, les liens symboliques qui pourraient causer des problèmes comme des boucles infinies pendant la sauvegarde. Voir les commentaires de Brian pour plus de détails.

  • /MT[:N]utilise le multithreading et peut accélérer les transferts de nombreux petits fichiers. Pour N, une valeur de 2 à 4 fois le nombre de cœurs devrait faire sur une machine normale. Commenté par Zoredache sur la question d'origine.

Modifier en réponse au commentaire de Granger:

Si vous voulez vraiment conserver les fichiers qui existent sur la destination, mais pas sur le côté source, remplacez simplement l' /MIRoption par /E. Cependant, je suggère fortement d'utiliser /MIRlorsque vous souhaitez utiliser la destination pour les sauvegardes incrémentielles. Sinon, tous les fichiers qui ont été renommés ou déplacés à la source encombreront la destination, ce qui signifie que vous obtenez des doublons. Je crée généralement un sous-dossier "sauvegarde" sur la destination qui contient une copie 1: 1 de mon arborescence de dossiers source. De cette façon, vous pouvez toujours conserver les fichiers historiques à côté du dossier de sauvegarde et les supprimer ou les réorganiser en toute sécurité ultérieurement.

pederpansen
la source
Cette commande permet-elle de copier des fichiers avec des autorisations? robocopie C: \ source M: \ destination / MIR / FFT / R: 3 / W: 10 / Z / NP / NDL
Shabeer Sher
4
Sauf que / MIR (/ PURGE) supprimera les fichiers à la destination qui n'existent plus à la source. La question posée indiquait explicitement que ce n'était pas souhaité.
Granger
@Shabeer Non, Robocopy par défaut ne copie que les données (D), les attributs (A) et les horodatages (T). D'autres valeurs doivent être spécifiées avec le paramètre "/ copy: <value>", par exemple "/ copy: DATS" pour inclure les autorisations ACL. Mais depuis que je copie sur un NAS Linux, cela n'a pas beaucoup de sens pour moi.
pederpansen
1
@Brian Merci pour l'astuce. Je n'ai jamais eu de problèmes avec les points de jonction, mais je suppose que cela ne fera pas de mal de les éviter au cas où. Je l'ai ajouté dans ma réponse.
pederpansen
1
@pederpansen: Cela a tendance à se produire lors de la copie de dossiers utilisateur (ou de la copie d'un lecteur entier). Habituellement, le dossier de données d'application est le coupable, car il a un point de jonction pour des raisons de compatibilité des applications. Essayez d'exécuter "cd C: \ Users \ [USERFOLDER] \ AppData \ Local \ Application Data \ application data \ application data \" à partir d'une invite de commande si vous souhaitez voir un exemple de chemin infini. Cela fonctionne même sur Windows 10.
Brian
8

J'aime utiliser ce qui suit:

robocopy "C:\Users\<user>" "F:\robocopy\<user>" /XJD /R:0 /XA:SH /E /ZB /XO /XD "Downloads" "AppData" /LOG:robocopy.log /TEE

Je l'exécute en tant qu'administrateur pour que le mode de sauvegarde ( /boption) puisse faire une copie des fichiers en cours d'utilisation.

Les autres options non liées à la nature incrémentielle de la sauvegarde sont:

/XD pour exclure les répertoires de la sauvegarde.

/XJD pour exclure les points de jonction ("Ma musique").

/R:0 pour définir la nouvelle tentative sur les tentatives infructueuses à 0.

/XA:SH pour ignorer les fichiers cachés et les fichiers système.

Pour supprimer autant d'informations de journalisation que possible, ajoutez les options suivantes /NP /NS /NDL /NFL /NC.

Vince
la source