web-dev-qa-db-fra.com

Méthode la plus rapide de copier des fichiers

Si nous avons une construction réussie sur notre serveur de construction (CCNET), tous les fichiers de site Web ASP.NET sont copiés dans le répertoire virtuel (% Output_Dir%) afin que les non-développeurs puissent voir/tester la dernière version du site Web. À la fin de la construction, le fichier BAT suivant est exécuté.

rmdir /s /q "%output_dir%"
mkdir "%output_dir%"
xcopy "%source_dir%*"  "%output_dir%" /e /c /i /q /-y

Le problème est que je trouve la copie lente et me demandait s'il y a des commandes de copie disponibles dans Windows 2008 plus rapides que XCopy? La source et la destination sont sur le même lecteur. Vous trouverez ci-dessous les arguments que nous utilisons lors de la copie.

/e = copies directories and sub directories including empty ones.
/c = continues copying even if there are errors
/i = if destination does not exist destination is directory
/q = don't display filenames
/-y = confirm overwrite
15
dmcgiv

à partir d'un point de vue de performance uniquement , xcopy ou robocopy vous donnera des résultats similaires. J'ai rencontré quelques tests sur une boîte SP2 Windows Vista 64 bits pour faire des comparaisons. Toutes les copies ont été effectuées entre un disque SATA II interne de 7200 tr/min et un lecteur USB 2.0 externe ou sur le même lecteur interne lui-même où indiqué. Aucune configuration spéciale n'a été effectuée (composez votre propre esprit si cela invalide/valide le test), uniquement pour entrer la commande dans un fichier de commandes pour exécuter. PowerShell a été utilisé pour capturer les heures de début et d'arrêt. Après quelques passes, voici les moyennes des outils que j'ai joués avec:

Fichier: 732 909 568 octets (698 Mo), 1 fichier ISO copié dans un répertoire différent sur le même disque interne.

copy      6 secs (ex. copy G:\folder1\* G:\folder2\)
xcopy     6 secs (ex. xcopy G:\folder1 G:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ G:\folder2 /E /NP)
teracopy 28 secs (ex. TeraCopy.exe Copy G:\folder1\ G:\folder2\)
fastcopy 19 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=G:\folder2)  

Fichier: 732 909 568 octets (698 Mo), 1 fichier ISO copié sur un disque USB externe.

copy     36 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy    35 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 36 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 36 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 38 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)  

Fichiers: 45,039,616Bytes (42.9MB) 5 fichiers aléatoires copiés sur un disque USB externe

copy      6 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy     5 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 12 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy  6 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

Fichiers/Directives: 1 087 180 800 octets (1.01 Go), 27 fichiers/8 répertoires copiés sur un disque USB externe.

copy     *Not included in test
xcopy    57 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 58 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 56 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 60 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

Ce n'est en aucun cas un test exhaustif, mais je viens de jeter un scénario de monde réel rapide sur certains des outils les plus populaires de ce genre montre que votre assez sûr de votre propre sécurité avec XCopy ou votre robocopy (du point de vue de la performance uniquement). Aussi l'option Robocopy /NP (Pas de progrès) vous sauve 0 fois. Cela ne signifie pas que vous ne pouvez pas bénéficier de quelque chose d'autre que XCopy cependant. Robocopy est un excellent exemple (de - Wikipedia ):

Robocopy est notable pour les capacités ci-dessus et au-delà de la copie de Windows intégrée et
Commandes XCopy, y compris les éléments suivants:

  • Possibilité de tolérer les pannes de réseau et de reprendre la copie où elle est précédemment laissée (les fichiers incomplets sont notés avec un cachet de date correspondant au 1980-01-01 et contiennent un enregistrement de récupération afin que Robocopy sait de savoir où se poursuivre).
  • Possibilité de copier correctement des attributs, des informations sur le propriétaire, d'alternez les flux de données, des informations d'audit et des horodatages par défaut, sans avoir besoin de nombreux commutateurs de ligne de commande souvent oubliés.
  • Possibilité de copier correctement les ACL NTFS (lorsque/Copylall fournies), et pour affirmer le "Sauvegarde droite" Windows NT (/ B) (/ B) de sorte qu'un administrateur peut copier un répertoire complet, y compris les fichiers refusés lisibilité à l'administrateur.
  • Persistance Par défaut, avec un nombre programmable de tentatives automatiques si un fichier ne peut pas être ouvert.
  • Un mode "miroir", qui empêche les arbres en synchronisation en supprimant éventuellement des fichiers hors de la destination qui ne sont plus présents dans la source.
  • Capacité à copier un grand nombre de fichiers qui seraient autrement planter l'utilitaire XCopy intégré.
  • Un indicateur de progression sur la ligne de commande qui met à jour en permanence.
  • Possibilité de copier des noms de fichiers longs et de dossiers dépassant 256 caractères - jusqu'à un nombre théorique de 32 000 caractères - sans erreurs.
21
Shaun Hess

J'utilise généralement:

robocopy source dest /E /MIR

ou une autre variante des paramètres - peut-être /NFL /NDL /NS /NC /NP pour correspondre au "calme"

5
Marc Gravell

En fait, en éliminant le réseau, vous avez vraiment limité vos tests. Vous voudrez peut-être envisager d'utiliser une part de réseau, qui va être en gros du travail administrateur.

De plus, vous devez utiliser FTP et sauter complètement CIFS. Eseutil.exe est un autre utilitaire que vous pourriez lancer là-bas. (Un util d'échange pouvant être utilisé ailleurs, avec ses quatre DLL à charge.)

Ensuite, j'aimerais voir vos résultats.

1
Len

J'ai dû faire plusieurs copies au fil des ans. Nous avons une machine Windows Server 2008 R2 comportant un répertoire unique avec plus de 12 m d'images à l'intérieur (environ 400 Go).

Évidemment, je préférerais que ce ne soit pas un tel répertoire mais:

  • XCopy gère la copie du grand dossier, mais se bloque lorsque vous essayez de passer à partir du grand répertoire.
  • Robocopy gère la copie sans problème et est une expérience beaucoup plus agréable lors de la copie en ce sens qu'elle offre de meilleurs indicateurs de progrès.
  • XCopy sur de petits répertoires est plus rapide.

Quoi qu'il en soit, je pensais juste que je partageais mon expérience avec eux à cause de la nature inhabituelle de mon répertoire vraiment grand.

1
Will Zablocki

J'utilise xcopy dans le même but. Ce que j'ai aussi fait a été ajouté un autre NIC sur ce serveur et mettez-le sur un sous-réseau séparé. Ensuite, a créé une connexion directe au serveur, je transfère des fichiers de. De cette façon, les 2 machines se déplacent Les données copiées via un sous-réseau et les utilisateurs peuvent toujours accéder via la deuxième carte réseau qui est connectée directement au réseau local.

1
Saif Khan

Vous dites que la source et la destination sont sur le même lecteur, mais sont-ils tous deux sur le serveur de construction?

Si le serveur de construction est l'emplacement de la source et de la destination, envisagez de déplacer un dossier ou l'autre sur un autre lecteur, peut-être sur un autre contrôleur.

Si le serveur de construction n'est pas l'emplacement de la source et de la destination (les gouttes de construction ne sont pas toujours sur le serveur, elles sont construites), envisagez de créer une tâche sur le serveur où réside les dossiers de la source et de la destination. Ensuite, juste lancez cette tâche à distance.

1
Donald Byrd