17 votes

Méthode la plus rapide pour copier des fichiers

Si la construction est réussie sur notre serveur de construction (CCNET), tous les fichiers du 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 je me demandais s'il y avait des commandes de copie disponibles dans Windows 2008 qui soient plus rapides que xcopy ? La source et la destination sont sur le même lecteur. Voici 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

23voto

Shaun Hess Points 504

Du point de vue des performances, seul , xcopy o robocopy vous donnera des résultats similaires. J'ai effectué quelques tests sur une boîte Windows Vista 64-bit SP2 pour faire quelques comparaisons. Toutes les copies ont été effectuées entre un disque interne 7200 RPM Sata II et un disque externe USB 2.0 ou sur le même disque interne lui-même lorsque cela était indiqué. Aucune configuration particulière n'a été effectuée (décidez vous-même si cela invalide/valide le test), il suffisait d'entrer la commande dans un fichier batch pour l'exécuter. PowerShell a été utilisé pour capturer les heures de démarrage et d'arrêt. Après quelques passages, voici les moyennes des outils avec lesquels j'ai joué :

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/directoies : 1 087 180 800 octets (1,01 GB), 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)

Il ne s'agit en aucun cas d'un test exhaustif, mais le simple fait de soumettre un scénario réel rapide à certains des outils les plus populaires dans ce genre montre que vous pouvez vous en tenir à xcopy ou Robocopy (du point de vue des performances uniquement). L'option Robocopy /NP (No Progress) vous fait gagner du temps. Cela ne veut pas dire que vous ne pouvez pas bénéficier d'une autre solution que xcopy. Robocopy en est un bon exemple (de Wikipedia ) :

Robocopy se distingue par des capacités supérieures à celles de la fonction intégrée de copie et d'impression de Windows.
Les commandes xcopy, dont les suivantes :

  • Capacité à tolérer les pannes de réseau et de reprendre la copie là où elle où elle s'est arrêtée (les fichiers incomplets sont notés avec un tampon de date correspondant au 1980-01-01 et contiennent un enregistrement de récupération pour que Robocopy sache où continuer).
  • Capacité à copier correctement les attributs, informations sur le propriétaire, données alternatives flux de données, les informations d'audit et les et les horodatages par défaut, sans besoin de nombreux commutateurs de ligne de la ligne de commande.
  • Capacité à copier correctement les ACL NTFS, (lorsque /COPYALL est fourni), et de d'affirmer le "droit de sauvegarde" de Windows NT (/B) afin qu'un administrateur puisse copier un répertoire entier, y compris les fichiers dont la lisibilité est refusée à l l'administrateur.
  • Persistance par défaut, avec une nombre programmable de tentatives automatiques si un fichier ne peut être ouvert.
  • Un mode "miroir", qui permet de garder les arbres en synchronisées en supprimant éventuellement des fichiers de la destination qui ne sont plus présents dans la source.
  • Capacité à copier un grand nombre de fichiers qui, autrement, feraient planter l'utilitaire l'utilitaire XCOPY intégré.
  • Un indicateur de progression sur la commande qui se met à jour en permanence.
  • Possibilité de copier des fichiers et des dossiers longs de plus de 256 caractères - jusqu'à jusqu'à 32 000 caractères théoriques. sans erreur.

6voto

Marc Gravell Points 694

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"

1voto

En fait, en éliminant le réseau, vous avez vraiment limité vos tests. Vous pourriez envisager d'utiliser un partage de réseau, ce qui représente la majeure partie du travail d'administration.

En outre, vous devriez utiliser le FTP, et ignorer complètement le CIFS. Eseutil.exe est un autre utilitaire que vous pouvez utiliser. ( un utilitaire Exchange qui peut être utilisé ailleurs, avec ses quatre dlls dépendantes. )

Alors j'aimerais voir vos résultats.

1voto

Sam Hasler Points 10253

J'utilise XCopy dans le même but. J'ai également ajouté une autre carte réseau à ce serveur et l'ai placée sur un sous-réseau distinct. J'ai ensuite établi une connexion directe avec le serveur à partir duquel je transfère les fichiers. De cette façon, les deux machines déplacent les données copiées via un sous-réseau et les utilisateurs peuvent toujours y accéder via la deuxième carte réseau qui est connectée directement au réseau local.

1voto

blackSphere Points 58

Vous dites que la source et la destination sont sur le même disque, mais sont-elles toutes deux sur le serveur de construction ?

Si le serveur de compilation 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 dépôts de construction ne sont pas toujours sur le serveur sur lequel ils sont construits), envisagez de créer une tâche sur le serveur où résident les dossiers source et destination. Il suffit ensuite de lancer cette tâche à distance.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X