El método más rápido para copiar archivos.

15

Si tenemos una compilación exitosa en nuestro servidor de compilación (CCNET), todos los archivos del sitio web ASP.NET se copian en el directorio virtual (% output_dir%) para que los no desarrolladores puedan ver / probar la última versión del sitio web. Al final de la compilación, se ejecuta el siguiente archivo bat.

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

El problema es que encuentro que la copia es lenta y me preguntaba si hay comandos de copia disponibles en Windows 2008 que sean más rápidos que xcopy. El origen y el destino están en la misma unidad. Debajo están los argumentos que usamos cuando copiamos.

/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
dmcgiv
fuente

Respuestas:

21

Solo desde el punto de vista del rendimiento , xcopy o robocopy le dará resultados similares. Realicé un par de pruebas en un cuadro de Windows Vista SP2 de 64 bits para hacer algunas comparaciones. Todas las copias se realizaron entre un disco Sata II interno de 7200 RPM y una unidad USB 2.0 externa o en la misma unidad interna donde se indicó. No se realizó ninguna configuración especial (decídase si eso invalida / valida la prueba), solo para ingresar el comando en un archivo por lotes para ejecutar. PowerShell se utilizó para capturar los tiempos de inicio y finalización. Después de un par de pases aquí están los promedios de las herramientas con las que jugué:

Archivo: 732,909,568 bytes (698 MB), 1 archivo ISO copiado en un directorio diferente en el mismo disco interno.

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)  

Archivo: 732,909,568 bytes (698 MB), 1 archivo ISO copiado en un disco USB externo.

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)  

Archivos: 45,039,616bytes (42.9MB) 5 archivos aleatorios copiados en un disco USB externo

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)

Archivos / directorios: 1,087,180,800 bytes (1.01 GB), 27 archivos / 8 directorios copiados en un disco USB externo.

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)

Esta no es una prueba exhaustiva, pero solo arrojar un escenario rápido del mundo real a algunas de las herramientas más populares en este género muestra que es bastante seguro seguir con xcopy o Robocopy (solo desde el punto de vista del rendimiento). Además, la opción Robocopy /NP(Sin progreso) le ahorra 0 tiempo. Sin embargo, eso no significa que no pueda beneficiarse del uso de algo más que xcopy. Robocopy es un gran ejemplo (de Wikipedia ):

Robocopy es notable por sus capacidades más allá de los
comandos integrados de copia y xcopy de Windows , que incluyen lo siguiente:

  • Capacidad para tolerar interrupciones en la red y reanudar la copia donde la dejó anteriormente (los archivos incompletos se señalan con una marca de fecha correspondiente a 1980-01-01 y contienen un registro de recuperación para que Robocopy sepa desde dónde continuar).
  • Capacidad para copiar correctamente atributos, información del propietario, flujos de datos alternativos, información de auditoría y marcas de tiempo de forma predeterminada, sin la necesidad de numerosos interruptores de línea de comandos a menudo olvidados.
  • Capacidad para copiar correctamente las ACL de NTFS (cuando se proporciona / COPYALL), y para hacer valer el "derecho de copia de seguridad" de Windows NT (/ B) para que un administrador pueda copiar un directorio completo, incluidos los archivos a los que se le negó la legibilidad.
  • Persistencia por defecto, con un número programable de reintentos automáticos si no se puede abrir un archivo.
  • Un modo "espejo", que mantiene los árboles sincronizados al eliminar opcionalmente archivos fuera del destino que ya no están presentes en la fuente.
  • Capacidad para copiar grandes cantidades de archivos que de otro modo bloquearían la utilidad XCOPY incorporada.
  • Un indicador de progreso en la línea de comando que se actualiza continuamente.
  • Capacidad para copiar nombres largos de archivos y carpetas de más de 256 caracteres, hasta 32,000 caracteres teóricos, sin errores.
Shaun Hess
fuente
5

Normalmente uso:

robocopy source dest /E /MIR

o alguna otra variante de los parámetros, tal vez /NFL /NDL /NS /NC /NPpara que coincida con el "silencio"

Marc Gravell
fuente
Sí, / NP es imprescindible para robocopias rápidas
Ivo Looser
cuando debería crear exactamente el mismo contenido que en la fuente una y otra vez, debería usar / MIR o / PURGE desde el comando Robocopy.
Ivo Looser
1

En realidad, al eliminar la red, realmente restringió sus pruebas. Es posible que desee considerar el uso de un recurso compartido de red, que será una gran parte del trabajo administrativo.

Además, debe usar FTP y omitir CIFS por completo. Eseutil.exe es otra utilidad que podría incluir allí. (una utilidad de Exchange que se puede usar en otro lugar, junto con sus cuatro dlls dependientes).

Entonces me gustaría ver sus resultados.

Len
fuente
1

Yo uso XCopy para el mismo propósito. Lo que también hice fue agregar otra NIC a ese servidor y ponerla en una subred separada. Luego hice una conexión directa al servidor desde el que estoy transfiriendo archivos. De esa manera, las 2 máquinas mueven los datos copiados a través de una subred y los usuarios aún pueden acceder a través del segundo nic que está conectado directamente a la LAN.

Saif Khan
fuente
1

Usted dice que el origen y el destino están en la misma unidad, pero ¿están ambos en el servidor de compilación?

Si el servidor de compilación es la ubicación del origen y el destino, considere mover una carpeta u otra a otra unidad, tal vez en otro controlador.

Si el servidor de compilación no es la ubicación del origen y el destino (las caídas de compilación no siempre están en el servidor en el que están construidas), considere crear una tarea en el servidor donde residen las carpetas de origen y destino. Luego simplemente inicie esa tarea de forma remota.

Donald Byrd
fuente
1

He tenido que hacer varias copias a lo largo de los años. Tenemos una máquina Windows Server 2008 R2 que tiene un solo directorio con más de 12 millones de imágenes en su interior (aproximadamente 400 GB).

Obviamente preferiría que no fuera un directorio tan grande PERO:

  • XCOPY maneja la copia de la carpeta grande, pero se bloquea al intentar pasar del directorio grande.
  • ROBOCOPY maneja la copia sin problemas y es una experiencia mucho mejor al copiar, ya que ofrece mejores indicadores de progreso.
  • XCOPY en directorios pequeños es más rápido.

De todos modos, pensé que compartiría mi experiencia con ellos debido a la naturaleza inusual de mi directorio realmente grande.

Will Zablocki
fuente