Arquivo

Posts Tagged ‘sincronização’

Robocopy

19 de março de 2011 Deixe um comentário

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.

Robocopy

Por 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
* /XF 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!

Post retirado de http://marcelomatias.wordpress.com

Esse Post foi útil? Deixe um comentário.

Publicidade
%d blogueiros gostam disto: