Método mais rápido de copiar arquivos

15

Se tivermos uma compilação bem-sucedida em nosso servidor de compilação (CCNET), todos os arquivos do site do ASP.NET serão copiados para o diretório virtual (% output_dir%), para que não desenvolvedores possam ver / testar a versão mais recente do site. No final da compilação, o seguinte arquivo bat é executado.

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

O problema é que acho a cópia lenta e fiquei imaginando se existem comandos de cópia disponíveis no Windows 2008 que são mais rápidos que o xcopy? A origem e o destino estão na mesma unidade. Abaixo estão os argumentos que usamos ao copiar.

/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
fonte

Respostas:

21

Do ponto de vista do desempenho , xcopy ou robocopy fornecerão resultados semelhantes. Eu fiz alguns testes em uma caixa do Windows Vista SP2 de 64 bits para fazer algumas comparações. Todas as cópias foram realizadas entre um disco interno de 7200 RPM Sata II e uma unidade USB 2.0 externa ou na mesma unidade interna, onde indicado. Nenhuma configuração especial foi realizada (decida se isso invalida / valida o teste), apenas para inserir o comando em um arquivo em lotes a ser executado. O PowerShell foi usado para capturar os horários de início e parada. Depois de alguns passes, aqui estão as médias das ferramentas com as quais eu joguei:

Arquivo: 732.909.568 bytes (698 MB), 1 arquivo ISO copiado para um diretório diferente no mesmo 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)  

Arquivo: 732.909.568 bytes (698 MB), 1 arquivo ISO copiado para o 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)  

Arquivos: 45,039,616 bytes (42,9 MB) 5 arquivos aleatórios copiados para o 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)

Arquivos / diretórios: 1.087.180.800 bytes (1,01 GB), 27 arquivos / 8 diretórios copiados para o 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)

Isso não é, de modo algum, um teste exaustivo, mas apenas apresentar um cenário rápido do mundo real em algumas das ferramentas mais populares desse gênero mostra que você é bastante seguro com o xcopy ou o Robocopy (apenas do ponto de vista de desempenho). Além disso, a opção Robocopy /NP(sem progresso) economiza 0 tempo. Isso não significa que você não pode se beneficiar do uso de algo diferente do xcopy. Robocopy é um ótimo exemplo (da Wikipedia ):

O Robocopy é notável por recursos acima e além dos
comandos internos de cópia e xcopy do Windows , incluindo o seguinte:

  • Capacidade de tolerar interrupções na rede e retomar a cópia de onde parou anteriormente (os arquivos incompletos são anotados com um carimbo de data correspondente a 01-01 1980 e contêm um registro de recuperação para que o Robocopy saiba por onde continuar).
  • Capacidade de copiar corretamente atributos, informações do proprietário, fluxos de dados alternativos, informações de auditoria e registros de data e hora por padrão, sem a necessidade de várias opções de linha de comando frequentemente esquecidas.
  • Capacidade de copiar corretamente as ACLs NTFS (quando fornecido / COPYALL) e de reivindicar o "direito de backup" do Windows NT (/ B) para que um administrador possa copiar um diretório inteiro, incluindo arquivos cuja legibilidade seja negada ao administrador.
  • Persistência por padrão, com um número programável de tentativas automáticas se um arquivo não puder ser aberto.
  • Um modo "espelho", que mantém as árvores sincronizadas, excluindo opcionalmente os arquivos fora do destino que não estão mais presentes na origem.
  • Capacidade de copiar um grande número de arquivos que, de outra forma, travariam o utilitário XCOPY embutido.
  • Um indicador de progresso na linha de comando que é atualizado continuamente.
  • Capacidade de copiar nomes longos de arquivos e pastas com mais de 256 caracteres - até 32.000 caracteres teóricos - sem erros.
Shaun Hess
fonte
5

Eu normalmente uso:

robocopy source dest /E /MIR

ou alguma outra variante dos parâmetros - talvez /NFL /NDL /NS /NC /NPpara corresponder ao "silencioso"

Marc Gravell
fonte
sim, / NP é um imperativo para robocopies rápidas
Ivo Looser
Quando você deve criar exatamente o mesmo conteúdo da fonte repetidamente, eu usaria / MIR ou / PURGE no comando Robocopy.
Ivo Looser
1

Na verdade, ao eliminar a rede, você realmente restringiu seus testes. Você pode considerar o uso de um compartilhamento de rede, que será a maior parte do trabalho do administrador.

Além disso, você deve usar o FTP e ignorar o CIFS completamente. Eseutil.exe é outro utilitário que você pode usar lá. (um utilitário do Exchange que pode ser usado em outro lugar, além de quatro dlls dependentes.)

Então eu gostaria de ver seus resultados.

Len
fonte
1

Eu uso o XCopy para o mesmo propósito. O que eu também fiz foi adicionar outra NIC a esse servidor e colocá-la em uma sub-rede separada. Em seguida, fez uma conexão direta com o servidor do qual estou transferindo arquivos. Dessa forma, as duas máquinas estão movendo os dados copiados através de uma sub-rede e os usuários ainda podem acessar através do segundo nic, conectado diretamente à LAN.

Saif Khan
fonte
1

Você diz que a origem e o destino estão na mesma unidade, mas ambos estão no servidor de construção?

Se o servidor de compilação for o local da origem e do destino, considere mover uma pasta ou outra para outra unidade, talvez em outro controlador.

Se o servidor de construção não for o local da origem e do destino (as descargas de construção nem sempre estão no servidor em que são construídas), considere criar uma tarefa no servidor em que as pastas de origem e destino residem. Em seguida, basta iniciar essa tarefa remotamente.

Donald Byrd
fonte
1

Eu tive que fazer várias cópias ao longo dos anos. Temos um computador com Windows Server 2008 R2 que possui um único diretório com mais de 12M imagens dentro dele (aproximadamente 400 GB).

Obviamente, eu preferiria que não fosse um diretório tão grande, MAS:

  • O XCOPY lida com a cópia da pasta grande, mas trava ao tentar passar do diretório grande.
  • O ROBOCOPY lida com a cópia sem problemas e é uma experiência muito melhor ao copiar, pois oferece melhores indicadores de progresso.
  • O XCOPY em diretórios pequenos é mais rápido.

Enfim, eu apenas pensei em compartilhar minha experiência com eles por causa da natureza incomum do meu diretório realmente grande.

Will Zablocki
fonte