Migrações de servidor de arquivos com Robocopy Parte 1 de 2

Este blog é parte 1 de uma série de 2 partes. Para ver a parte 2, clique aqui.

Com vários sabores de sistemas operacionais Windows Server saindo do suporte este ano, eu me vi com um número decente de migrações de servidor de arquivos de um sistema para outro. Às vezes, se o servidor não tiver nenhuma outra função ou função instalada além de um servidor de arquivos, então eu poderia simplesmente descompactar as ações no servidor original, separar o disco rígido virtual dele, anexar o disco rígido virtual ao novo servidor e recompilar as ações. Isto mantém as permissões NTFS se ambos os servidores forem membros do mesmo domínio do Active Directory. Também é geralmente muito rápido, pois não há necessidade de copiar terabytes de dados de um servidor para outro. Entretanto, este processo só funciona elegantemente quando o arquivo de compartilhamento de dados existe em um volume que não é onde o Windows ou qualquer aplicação está instalada.

Quando surge a necessidade de duplicar os dados para a migração para o novo servidor, eu sempre volto para o antigo fiel-Robocopy (Robust File Copy for Windows). Robocopy existe desde NT4 dias em 1996, então esta provavelmente não é a primeira vez que você está ouvindo falar dele. Na época e até 2008, ele estava disponível com o download do Windows Resource Kit. A partir de 2008 (e depois), ele foi empacotado com sistemas operacionais desktop e servidor, começando com Vista e Server 2008. Portanto, as chances são se você iniciar um prompt de comando no seu computador e digitar “robocopy /?” você verá a ajuda de despejo de informações na sua tela sobre como usar o utilitário.

Existem algumas opções quando se trata de migrações de servidor de arquivos usando Robocopy, e você pode não saber por onde começar. Tenha cuidado com algumas das opções se você estiver apenas experimentando, pois algumas delas movem os dados (deletando os arquivos e pastas no local de origem ou no local de destino).

Todos os anos de uso, eu encontrei esta sintaxe para a qual eu continuo voltando repetidamente:

robocopy \sourceserver\ShareName D:\PartilharNome_partilhado /e /b /copyall /PURGE /r:5 /w:5 /MT:64 /tee /log+:D:\Shares\log_ShareName _%data:~-10,2%”-“%data:~7,2%”-“%data:~-4,4%.txt /v

Deixe-nos decompor isso.

Robocopy
Inicia o comando.

>Servidor de fontes\\ShareName
O primeiro parâmetro é sempre a localização da fonte. Eu normalmente sempre executo Robocopy a partir do novo servidor de arquivos como:

  • Probocopy terá provavelmente uma versão mais nova do Robocopy instalada; e
  • Probocopy não terá provavelmente as ações construídas ainda no novo servidor.

D:\Shares\ShareName
O segundo parâmetro é sempre a localização de destino. Eu encorajo você a não colocar estes no volume do sistema operacional C:\ sempre que possível. Eu também gosto de criar uma pasta raiz chamada “Shares” e colocar todas as pastas compartilhadas nesta pasta em vez de deixá-las na raiz. Há várias vantagens que encontrei ao longo dos anos.

Os próximos parâmetros não precisam estar em nenhuma ordem em particular.

/e

Esta copia subdiretórios, incluindo os vazios. Aqui é onde o verdadeiro valor do Robocopy entra em jogo. Se ele apenas copiasse os arquivos na pasta compartilhada de nível superior, ele não teria muito valor.

/b
Esta copia os arquivos no modo Backup. Isto não cria uma snapshot VSS, mas em vez disso, isto é útil se a conta do Windows com que você está executando Robocopy pode não ter acesso completo ao local de origem devido a ACLs em NTFS.

/copy all
Então você pode ter se perguntado, por que todo esse incômodo? Por que não navegar para ambos os locais e copiar colar os arquivos de um local para outro? Este parâmetro copia todas as informações do arquivo. Dessa forma, não há um novo timestamp, ou proprietário, ou permissões NTFS herdadas quando não deveria haver, etc. Todas as informações do arquivo incluem:

  • Data
  • Attributes
  • Timestamps
  • Security (NTFS ACLs)
  • Owner info
  • Auditing info

/PURGE
Este parâmetro elimina ficheiros e pastas de destino que já não existem na fonte. Note que tecnicamente, usando os parâmetros /e e /PURGE juntos dá o mesmo efeito que usar um parâmetro por si só (/mir – para “mirror”), mas eu prefiro ter um grande “PURGE” maiúsculo na sintaxe, então quando eu olho para ele, eu sei que provavelmente estou apagando algo. A questão aqui surge de se o arquivo ou pasta não existe mais no local de origem, porque eu estaria tentando copiá-lo para o alvo. Além disso, por que eu iria querer apagar um arquivo que nunca existiu em primeiro lugar.

Este é o segundo lugar onde Robocopy realmente brilha. Eu não costumo executar Robocopy uma única vez e ser feito, a menos que eu esteja copiando dados inativos e obsoletos. Eu normalmente crio uma tarefa agendada para executar um arquivo batch que inclui as linhas do Robocopy para ser executado. Com isto em mente e com os parâmetros acima, a primeira execução do trabalho vai demorar um pouco pois tem que fazer a cópia inicial de todos os dados. No entanto, quando for executado da próxima vez (normalmente eu o defino para executar diariamente após o horário comercial), ele irá olhar para o fonte e compará-lo com o alvo, e se o arquivo não tiver mudado, ele não fará nada com ele. Se o arquivo no código-fonte for mais recente, ele irá sobrescrever o arquivo no alvo. Se o ficheiro no código fonte foi apagado desde a última execução do trabalho, o mesmo ficheiro no destino também será apagado automaticamente. Para uma migração real de compartilhamento de arquivos, eu configurei isso com cerca de uma semana de antecedência, observe os logs que ele gera, resolva qualquer problema, e deixe-o rodar diariamente até a data de corte agendada. Na data de corte, eu colocaria o compartilhamento de código fonte em Read-Only e executaria o Robocopy mais uma vez para copiar sobre qualquer deltas que tenham mudado desde a última execução. Depois, para terminar, eu desempacotaria o compartilhamento do código fonte e então compartilharia o novo compartilhamento.

/r:5
Esta bandeira especifica o número de vezes que Robocopy irá tentar novamente uma cópia falhada em um arquivo ou pasta. Algumas vezes isso falha porque há um bloqueio no arquivo porque o usuário ou processo tem ele aberto. Quando isso ocorre, Robocopy irá tentar novamente a cópia para ver se o cadeado não está mais no arquivo. Por padrão (se você não especificar este parâmetro), Robocopy irá tentar novamente a cópia 1 milhão de vezes. Sabendo que vamos tentar copiar este arquivo novamente durante a próxima execução agendada para um dia, estou mais do que satisfeito em tentar cinco tentativas, e se ele não copiar com sucesso, prossiga para o próximo arquivo.

/w:5
Esta bandeira vai de mãos dadas com /r. Esta bandeira especifica a quantidade de tempo em segundos para esperar entre novas tentativas. O tempo padrão é de 30 segundos. Colocando 2 e 2 juntos, 1.000.000 * 30 = 30.000.000 segundos ou 500.000 minutos ou 8.333 horas e 20 minutos ou 347 dias e 5 horas. Isto significa que se um único arquivo fosse bloqueado e permanecesse bloqueado, Robocopy levaria quase um ano antes de prosseguir para a próxima tarefa! Isto é um must para definir as bandeiras /r e /w apropriadamente.

/MT:64
Esta bandeira irá definir um novo número máximo de threads ao fazer cópias multi-tarefa. Isto não copia múltiplos arquivos ou pastas ao mesmo tempo, mas usa mais threads com a CPU para fazer a cópia que foi definida para fazer. O número padrão é 8. Eu gosto de aumentar este número para um total de 64 (tenha isto em mente se estiver executando vários trabalhos Robocopy simultaneamente). Existe uma sobrecarga da CPU de abrir o arquivo fonte, abrir o arquivo de destino, copiar os dados, fechar o arquivo fonte, e fechar o arquivo de destino. Se tudo isso tiver que ser feito antes de prosseguir para o próximo arquivo, há potencial para que o subsistema de E/S fique ocioso parte do tempo em que poderia estar funcionando. Nota: isto provavelmente fará seu sistema parecer lento, pois ele está trabalhando a CPU decentemente. Se isto estiver em um novo servidor de arquivos ainda não produzido, não deve importar se é “lento”

/tee
Por padrão, quando isto estiver rodando manualmente a partir do prompt de comando, o Robocopy mostrará o que ele está fazendo para a tela. Com potencialmente milhares de arquivos para copiar, ele faz uma maneira menos do que eficiente de encontrar algo que deu errado. Especificar /tee (em vez de deixá-lo completamente de fora) irá forçá-lo a sair para a janela do console, bem como o arquivo de log. Isto é especificamente útil se é a sua primeira execução do Robocopy, e você está resolvendo problemas em algo que não está funcionando como deveria. Se eu criar uma tarefa agendada do trabalho do Robocopy, eu recomendo deixar este comando de fora.

log+:D:\Shares\log_ShareName _%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%.txt

Por padrão, o único log do Robocopy é exibido na tela. Com o parâmetro /log, especifique o caminho do arquivo para um novo arquivo (ou arquivo existente). Ele irá sobrescrever o arquivo se ele já existir. No entanto, ao fazer este processo com uma tarefa agendada, você pode querer ver todas as iterações da execução em vez de apenas a mais recente. Ao especificar o + após o log (/log+), ele será anexado ao arquivo especificado ao invés de sobrescrevê-lo. Também ao colocar “_%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%” no nome do ficheiro, irá criar automaticamente um novo ficheiro (se executado pela primeira vez nesse dia) com um sufixo de _MM_DD_YYYY no final do ficheiro de log para referência histórica. Para partilhas de ficheiros especialmente grandes, mesmo os ficheiros de log podem crescer até aos múltiplos gigabytes se deixados a correr durante dias e dividi-los em logs diários faz muito sentido.

/v
Este parâmetro mostra a saída Verbose, que mostrará ficheiros saltados. Geralmente, você realmente quer ver isso para ter certeza que os arquivos saltos são registrados.

Na parte 2 deste blog, vou mostrar como configurar um trabalho diário do Robocopy com o Task Scheduler.

Perguntas sobre a migração dos seus servidores de arquivos? Entre em contato com Sikich. Nós estamos prontos para ajudar.

Deixe uma resposta

O seu endereço de email não será publicado.