Comando ROBOCOPY para fazer um backup incremental

31

Estou impressionado com a documentação do ROBOCOPY. Quero fazer um backup incremental dos meus arquivos locais na unidade de rede (M). Quero que seja executado o mais rápido possível, sem arquivo de log e com o mínimo de texto possível na tela. Meus arquivos estão em algum lugar dentro de uma pasta (MyFolder) que possui muitas subpastas aninhadas. Por "incremental", quero dizer "apenas copie o que é novo ou alterado". Não quero excluir nenhum arquivo histórico no destino, mas se eu tiver alterado um arquivo, quero apenas a versão mais recente. E se eu não alterei um arquivo, não quero copiá-lo sobre o arquivo de backup existente. Abaixo está correto? (Executando o Win7 Enterprise.)

robocopy C:\MyFolder M:\MyFolder /z /np /xo /e

Por favor, não há sugestões para nada além de robocópia. Não tenho permissão para instalar nada. E eu não ligo para coisas de segurança. Eu tenho pessoas para isso (quer eu queira ou não). ;-)

dmm
fonte
1
Você precisa de uma opção / s ou / e para copiar subdiretórios.
David Marshall
@DavidMarshall: oops. Eu realmente sabia disso. Adicionado. Então, eu estou bem agora?
dmm
Sim. Eu tenho usado algo semelhante.
David Marshall
Testando agora. Ainda há um monte de coisas sendo gravadas na tela. Como faço para me livrar dele, em execuções futuras?
dmm
3
Uma opção que pode fazer uma grande diferença no desempenho é ter transferências multithread. /MT[:N] Eu tenho uma CPU de 4 núcleos, então normalmente uso algo entre 8 e 16 para o meu número de threads. Eu imagino 2-4 threads por núcleo. Você certamente deve testar com valores diferentes no seu hardware. O multithread ajuda mais quando você tem muitos arquivos pequenos. Se você tiver um pequeno número de arquivos grandes, isso não ajudará quase tanto.
Zoredache

Respostas:

40

Estou usando com sucesso uma variante do seguinte script há alguns anos:

robocopy C:\source M:\destination /MIR /FFT /R:3 /W:10 /Z /NP /NDL

Parâmetros explicados

  • A /MIRopção (equivalente a /E /PURGE) significa "espelho" e é a opção mais importante. Ele considera sua pasta de origem como "principal", fazendo com que ela substitua quaisquer alterações no lado do destino, o que é uma configuração útil para um backup.

  • /FFTé uma opção muito importante, pois permite uma diferença de 2 segundos ao comparar registros de data e hora de arquivos, de modo que pequenas diferenças de relógio entre o computador e o dispositivo de backup não importam. Isso garantirá que apenas os arquivos modificados sejam copiados, mesmo que os horários de modificação não sejam exatamente sincronizados.

  • /R:3especifica o número de tentativas, se a conexão falhar, e /W:10especifica um tempo de espera de 10 segundos entre as tentativas. Essas são opções úteis ao fazer o backup em uma rede.

  • /Z copia arquivos no "modo de reinicialização", para que os arquivos parcialmente copiados possam ser continuados após uma interrupção.

  • /NPe /NDLsuprimir alguns saída de depuração, você também poderá adicionar /NS, /NC, /NFLpara reduzir ainda mais a quantidade de saída (ver a documentação para mais detalhes). No entanto, sugiro imprimir alguma saída de depuração durante as primeiras execuções, para garantir que tudo esteja funcionando conforme o esperado.

Parâmetros úteis adicionais mencionados por outros usuários

  • /XJDexclui "pontos de junção" para diretórios, links simbólicos que podem causar problemas como loops infinitos durante o backup. Veja os comentários de Brian para detalhes.

  • /MT[:N]usa multithreading e pode acelerar transferências de muitos arquivos pequenos. Para N, um valor de 2-4 vezes o número de núcleos deve ser feito em uma máquina normal. Comentado por Zoredache na pergunta original.

Edite em resposta ao comentário de Granger:

Se você realmente deseja manter os arquivos existentes no destino, mas não no lado da fonte, basta substituir a /MIRopção por /E. No entanto, eu sugiro usar /MIRquando você deseja usar o destino para backups incrementais. Caso contrário, todos os arquivos que foram renomeados ou movidos na fonte irão sobrecarregar o destino, o que significa que você recebe duplicatas. Normalmente, crio uma subpasta "backup" no destino que contém uma cópia 1: 1 da minha árvore de pastas de origem. Dessa forma, você ainda pode manter os arquivos históricos próximos à pasta de backup e removê-los ou reorganizá-los com segurança posteriormente.

pederpansen
fonte
Este comando permite copiar arquivos com permissões? robocopy C: \ fonte H: \ destino / MIR / FFT / R: 3 / W: 10 / Z / NP / NDL
Shabeer Sher
4
Exceto / MIR (/ PURGE) excluirá os arquivos no destino que não existem mais na origem. A pergunta feita afirmou explicitamente que não era desejada.
Granger
@ Shabeer Não, o Robocopy por padrão apenas copia dados (D), atributos (A) e registros de data e hora (T). Outros valores devem ser especificados com o parâmetro "/ copy: <value>", por exemplo, "/ copy: DATS" para incluir permissões da ACL. Mas como eu copio para um NAS baseado em Linux, isso não faz muito sentido para mim.
pederpansen
1
@ Brian Obrigado pela dica. Nunca tive problemas com pontos de junção, mas acho que não vai doer evitá-los por precaução. Adicionado na minha resposta.
pederpansen
1
@pederpansen: tende a acontecer ao copiar pastas de usuários (ou copiar uma unidade inteira). Normalmente, a pasta de dados do aplicativo é a culpada, pois possui um ponto de junção por motivos de compatibilidade de aplicativos. Tente executar "cd C: \ Users \ [USERFOLDER] \ AppData \ Local \ Application Data \ application data \ application data \" em um prompt de comando se desejar ver um caminho infinito de exemplo. Isso funciona mesmo no Windows 10.
Brian
8

Eu gosto de usar o seguinte:

robocopy "C:\Users\<user>" "F:\robocopy\<user>" /XJD /R:0 /XA:SH /E /ZB /XO /XD "Downloads" "AppData" /LOG:robocopy.log /TEE

Eu executo isso como administrador para que o modo de backup ( /bopção) possa fazer cópias dos arquivos em uso.

Outras opções não relacionadas à natureza incremental do backup são:

/XD excluir diretórios do backup.

/XJD para excluir pontos de junção ("Minhas músicas").

/R:0 para definir a nova tentativa em tentativas com falha como 0.

/XA:SH pular arquivos ocultos e do sistema.

Para remover o máximo possível de informações de log, anexe as seguintes opções /NP /NS /NDL /NFL /NC.

Vince
fonte