20 setembro 2013

USANDO O COMANDO ROBOCOPY

Sempre que preciso copiar vários arquivos (ou arquivos enormes) entre partições, HD externo ou pastas compartilhadas em rede eu uso o Robocopy. Ele está disponível desde o Resource Kit do Windows NT e nativamente desde o Windows Vista / Server 2008 e posteriores.
imagePor padrão o Robocopy é uma ferramenta de sincronismo de pastas, isto é, se um determinado arquivo do ponto A (origem) já existir no ponto B (destino) ele não será copiado novamente (a menos que o arquivo do ponto A sofra alguma modificação). Portanto também é uma interessante forma de backup.
O propósito desse artigo é demonstrar o uso do robocopy em dois cenários que encontro com facilidade em ambiente corporativo:
  • Replicação de arquivos/pastas quando temos um link lento/instável entre a origem e o destino
  • Arquivar (mover) arquivos antigos de um file server para um HD USB (ou para outro local)
Mesmo se você já for usuário do Robocopy vale a pena consultar a documentação recente para conhecer as novas funcionalidades.
Para as dicas abaixo eu estou considerando alguns recursos disponíveis no Robocopy que vem no Windows 7 / Windows Server 2008 R2 (alguns parâmetros podem não funcionar em versões anteriores):
Cenário 1: Replicação de arquivos/pastas quando temos um link lento/instável entre a origem e o destino
Se você precisa replicar todo o conteúdo de uma determinada pasta compartilhada em rede (ex.:\\SERVIDOR\Conteudo\Dados) para o seu HD USB (ex.: E:\Download) através de um link lento, ou não muito confiável, minha sugestão é executar o Robocopy a partir de um arquivo .CMD, possibilitando sincronizar todo o conteúdo mesmo que durante o processo de cópia ocorra algum problema com a rede.
Crie um arquivo Download.CMD a partir do bloco de notas com o seguinte conteúdo:
:1
ROBOCOPY “\\SERVIDOR\Conteudo\Dados” “E:\Download\Dados” /MIR /MT:10 /Z /R:2 /W:2
goto 1
A única utilidade desse arquivo .CMD é executar o Robocopy em loop para recomeçar de onde parar o processo de cópia (argumento /Z) se houver problemas com a rede ou com algum dos PCs/Servidores. Se houver falha na cópia de algum arquivo duas tentativas serão realizadas (parâmetro /R:2), com um intervalo de 2 segundos entre elas (parâmetro /W:2). O parâmetro /MT:10 (novidade) permite cópia multi-thread (quem usa RichCopy adora isso) de 10 arquivos em paralelo (e não apenas um arquivo por vez).
Cuidado com o parâmetro /MIR, pois ele espelha todo o conteúdo, inclusive pastas/subpastas. Se na pasta origem, por exemplo, você tem 10 arquivos a pasta destino terá os mesmo 10 arquivos. Se você copiar algum arquivo extra no destino e rodar o comando novamente esse arquivo extra será apagado (porque não existe na origem). Se você quiser apenas uma cópia “incremental”, mantendo os atuais arquivos na pasta destino substitua o/MIR pelo /E.
Parâmetros extras:
  • /XF *.mp3 – ignora arquivos com extensão .MP3
  • /XD temp – ignora pastas com o nome “temp”
  • /COPYALL – copia todos os atributos dos arquivos como data/hora, segurança…
Dica extra: Quer controlar a data/horário de início do robocopy, além de duração máxima de sua execução (por exemplo, agendar um download/upload apenas em horário não comercial)? Use o Agendador de Tarefas do Windows (Task Scheduler).
Cenário 2: Arquivar (mover) arquivos antigos de um file server para um HD USB (ou para outro local)
Suponha que temos a necessidade de arquivar (mover) todos os arquivos com mais de 3 anos de uma pasta \\SERVIDOR\Docs para a pasta E:\Docs. A sintaxe seria:
ROBOCOPY “\\SERVIDOR\Docs” “E:\Docs” /MOVE /E /R:2 /W:2 /MINAGE:20080309 /LOG+:”E:\log.txt” /TEE
Esse comando vai mover (/MOVE) todos os arquivos, inclusive pastas e subpastas (/E), exceto os arquivos mais novos que 09/Março/2008 (o parâmetro /MINAGE:20080309 move os mais antigos, mantendo os mais novos), registrando todo o processo em um arquivo de log incremental (/LOG+:”E:\log.txt”). O parâmetro /TEE permite acompanhar no prompt de comandos o andamento do todo o processo de cópia (importante quando usamos algum parâmetro de log).
Como essa operação envolve a operação “mover” (copia para o destino e apaga na origem) eu recomendo incluir o parâmetro /L para simular o processo. Quando você estiver ciente de que a sintaxe está correta remova o parâmetro /L.
Para conhecer todos os parâmetros do Robocopy digite no prompt de comandos ROBOCOPY /? e bom divertimento!
Postar um comentário