Aparentemente, o Robocopy não entende a deduplicação do Windows Server 2016. Existe uma maneira de fazê-lo funcionar sem corromper o volume?

13

Cenário:

  • Fazendo uma migração de servidor do antigo Server 2008 R2 para o novo Server 2016, seguindo este guia de Falhas no Servidor: Migração do servidor de arquivos usando Robocopy

  • Após a conclusão do Robocopy, habilite a desduplicação no Server 2016 para o volume copiado e use o PowerShell para iniciar a despulificação manualmente. Depois de muitas horas, ele completa e recupera cerca de 25% do espaço em disco.

  • Execute o Robocopy novamente para copiar qualquer coisa que tenha sido perdida na cópia inicial, como uma verificação final do novo servidor.

.... mas o Robocopy (executado no Server 2016) não entende a desduplicação e, em vez disso, continua a lixeira do chunkstore de desduplicação.

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Sunday, July 8, 2018 12:10:02 PM
   Source : \\SERVER-2008\e$\
     Dest : \\SERVER-2016\e$\

    Files : *.*

  Options : *.* /TEE /S /E /COPYALL /PURGE /MIR /ZB /NP /MT:32 /R:1 /W:10 

------------------------------------------------------------------------------

    *EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\
    *EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\
    *EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\
      *EXTRA File         253504    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\DedupFileList.1
      *EXTRA File         253504    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\DedupFileList.2
      *EXTRA File             28    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\stamp.dat
    *EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\
    *EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\00010000\
      *EXTRA File         196608    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\00010000\00000046.00.RB
      *EXTRA File         106496    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\00010000\00000048.00.RB

[.......]

*EXTRA File           30.3 m    \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\Stream\000f0000.00000002.ccc
*EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\
  *EXTRA File         29.7 m    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\00000001.kmchange.log
  *EXTRA File        999.8 m    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.10.archive.etl
  *EXTRA File       1000.0 m    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.11.archive.etl
  *EXTRA File        735.5 m    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.12.archive.etl
  *EXTRA File        999.8 m    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.9.archive.etl
  *EXTRA File          1.3 m    \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.2.1.archive.etl
*EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\Settings\
  *EXTRA File             76    \\SERVER-2016\e$\System Volume Information\Dedup\Settings\Dedup.00.cfg
  *EXTRA File             76    \\SERVER-2016\e$\System Volume Information\Dedup\Settings\Dedup.01.cfg
  *EXTRA File           2228    \\SERVER-2016\e$\System Volume Information\Dedup\Settings\dedupConfig.01.xml
  *EXTRA File           2228    \\SERVER-2016\e$\System Volume Information\Dedup\Settings\dedupConfig.02.xml
  *EXTRA File              0    \\SERVER-2016\e$\System Volume Information\Dedup\Settings\VolumeJobLock.bin
*EXTRA Dir        -1    \\SERVER-2016\e$\System Volume Information\Dedup\State\
  *EXTRA File           2982    \\SERVER-2016\e$\System Volume Information\Dedup\State\chunkStoreStatistics.xml
  *EXTRA File           2592    \\SERVER-2016\e$\System Volume Information\Dedup\State\dedupStatistics.xml
  *EXTRA File         11.5 m    \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceBitmap.tmp
  *EXTRA File          1.0 g    \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceContainer.ccc
  *EXTRA File         46.0 m    \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceDeleteLogs.tmp
  *EXTRA File          1.0 m    \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceFileList.tmp
  *EXTRA File           4096    \\SERVER-2016\e$\System Volume Information\Dedup\State\GroupCommitFlushControl0.bin
  *EXTRA File           2066    \\SERVER-2016\e$\System Volume Information\Dedup\State\optimizationState.xml

[......]

Abortei-o momentos depois de ver essa mosca no tronco e reconhecer o que estava acontecendo. Mas o dano já está feito, os dados no novo servidor desduplicado foram instantaneamente corrompidos pelo Robocopy, uma vez que invadiram \ System Volume Information. A nova partição da unidade do servidor foi formatada e copiada novamente do Server 2008.

Existe uma maneira segura de usar o Robocopy para que ele não toque nos dados do volume de deduplicação?

Além disso, tenho uma nova preocupação. Se o Robocopy pode destruir um volume deduplicado, o que mais é perigoso usar com um volume deduplicado, que é visualizado através dele e pode destruir os dados subjacentes que devem ser acessíveis apenas pelo servidor? (provavelmente deve ser uma pergunta separada ..)

Dale Mahalko
fonte
5
O que você esperava que acontecesse com o /MIRswitch que é MIRror a directory tree (equivalent to /E plus /PURGEonde /PURGE :: delete dest files/dirs that no longer exist in source? "Espelho" significa tornar o destino uma cópia da fonte. A robocópia é poderosa ... e é claro que sabemos o que isso significa: com grande poder vem uma grande responsabilidade!
Davidbak
"\ System Volume Information" é normalmente inacessível e todos os programas normalmente são impedidos de acessá-lo. Não deve haver nenhuma maneira que o Robocopy possa entrar lá, mesmo quando executado em um prompt de comando do administrador. Vamos tentar acessá-lo manualmente no mesmo servidor 2016: Iniciar -> Prompt de comando -> Executar como administrador. Informações de volume do CD \ System. Acesso negado.
Dale Mahalko
Isso é verdade. Eu também deveria ter apontado que você usou o /ZB :: use restartable mode; if access denied use Backup modemodo de backup que derrota a maioria das permissões para poder ler arquivos "normalmente" ilegíveis para fazer backups completos. Por isso, foi a combinação de /Be /MIRque fez você em Robocopy é poderoso ... como eu mencionei acima ....
davidbak
Seguindo a excelente resposta de Greg - com a opção, deixe a desduplicação desativada até que você termine a migração.
Tim Brigham

Respostas:

16

O System Volume Informationdiretório deve ser excluído usando a opção / XD. Provavelmente é uma boa idéia excluir outros diretórios ocultos / do sistema, como $RECYCLE.BIN.

Greg Askew
fonte
5

Duas opções de linha de comando que foram usadas levam a isso: /MIRe /ZB. Como a documentação ( robocopy /???) descreve:

/ MIR :: MIRror uma árvore de diretórios (equivalente a / E mais / PURGE).
/ ZB :: usa o modo reiniciável; se o acesso negado, use o modo Backup.

É a combinação que você fez: /MIRirá excluir (conforme indicado quando você executa robocopysem argumentos) e o "Modo de backup" derrota a maioria das permissões para poder ler arquivos "normalmente" ilegíveis para fazer backups completos.

"Modo de backup" é notavelmente indefinido na descrição da "ajuda". Você precisa saber que a CreateFileAPI do Windows suporta um sinalizador chamado FILE_FLAG_BACKUP_SEMANTICS, que em combinação com um certo direito de acesso SE_BACKUP_NAME(que é fornecido ao grupo Administrador por padrão - também o grupo Operadores de Backup, duh) ignora a segurança normal dos arquivos.

Você não sabia disso? Talvez você também não saiba que a robocopy não era originalmente parte do Windows - fazia parte de um suplemento chamado "Windows Resource Kit", usado principalmente por programadores e administradores de sistemas do passado, e embora foi avô na distribuição do Windows no Windows Server 2008 e nunca recebeu atenção alguma - exceto por opções adicionais de desempenho, woot! Particularmente, nenhuma atenção dos gerentes de programas dedicados à interface do usuário ou à usabilidade . Portanto, é um pouco de energia que pode ser usada - ou mal interpretada! - por sua conta e risco.

(Uma boa regra geral: não use opções de linha de comando que você realmente não entende.)

Informações que você gostaria de saber sobre o acesso ao arquivo "Modo de backup":

https://isc.sans.edu/forums/diary/Use+The+Privilege/20483/

https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

https://docs.microsoft.com/en-us/windows/desktop/FileIO/file-security-and-access-rights

davidbak
fonte
1
Aliás, não há nada perigoso (AFAIK) no /Z"modo reinicializável". É Bisso que é problemático ...
davidbak
As contas de domínio do servidor de arquivos, com seus respectivos proprietários e dados de segurança em cada diretório de conta, podem ser copiadas total e completamente (/ COPYALL ou / COPY: DATSOU) usando a conta de administrador, sem usar / B?
Dale Mahalko
@DaleMahalko - TBH eu não sei. Embora eu esteja programando o Windows há algumas décadas, há aspectos que eu evito e, portanto, só sei o suficiente sobre a segurança do Windows para me manter desconectado quando necessário ... Eu sou o tipo de cara que sempre está conectado como um membro do Administrador, vou para a Diretiva de Grupo e faço tudo totalmente sem força, etc. Talvez alguém mais saiba?
Davidbak
1

Aqui estão os resultados do acompanhamento usando as outras respostas fornecidas e testando com um destino deduplicado. ( Meta: não sei se devo incluir isso como uma edição na parte inferior da minha pergunta original. )

A linha de comando do Robocopy evoluiu para finalmente ficar assim:

robocopy \\OLD-SERVER\e$\ \\NEW-SERVER\e$\ /MIR /COPYALL /DCOPY:DAT /NP /Z /B /J /SL /MT:128 /R:1 /W:10 /LOG+:robocopy-log.txt /TEE /XD "Recycler" "Recycled" "$Recycle.bin" "System Volume Information" /XF "pagefile.sys" "swapfile.sys" "hiberfil.sys"

Opções e finalidade:

  • / MIR - Espelha a origem para o destino e exclui arquivos e diretórios no destino, se eles não estiverem mais presentes na origem
  • / COPYALL - Copia todas as informações do arquivo: dados, atributos e registros de data e hora, ACLs de segurança NTFS, informações do proprietário, informações de auditoria (nem todas incluídas por padrão)
  • / DCOPY: DAT - copia todas as informações do diretório - dados, atributos, carimbos de data / hora (o carimbo de data / hora da criação original não é copiado por padrão; normalmente isso muda para a data em que foi copiado pelo Robocopy)
  • / NP - Não exibe progresso
  • / Z - Use o modo reinicializável
  • / B - Copiar arquivos no modo de backup (não sei se isso é necessário para diretórios de usuários nos quais eles são proprietários exclusivos, excluindo o administrador. Esta opção destruirá um volume de destino deduplicado sem excluir "Informações de volume do sistema")
  • / J - Copiar usando E / S sem buffer (cópia mais rápida de grandes arquivos multi-gig)
  • / SL - Copie links simbólicos em vez do destino
  • / MT: 128 - Use o máximo de threads da CPU (melhor uso da Ethernet de 10 gigabit e muitos núcleos da CPU)
  • / R: 1 - Se erro de acesso ao arquivo, tente novamente 1 vez
  • / W: 10 - Se houver erro de acesso ao arquivo, aguarde 10 segundos antes de tentar novamente
  • / LOG + - Registra a saída no arquivo de texto, acrescente se o arquivo de log já existe
  • / TEE - Imprime os resultados na tela e no arquivo de log
  • / XD - Exclui diretórios e tudo dentro deles. Os nomes com espaços neles precisam estar entre aspas: "Reciclador" "Reciclado" "$ Recycle.bin" "Informações de Volume do Sistema"
  • / XF - Excluir arquivos: memória virtual e arquivos de hibernação, se estiverem presentes na fonte: "pagefile.sys" "swapfile.sys" "hiberfil.sys"

Execução final:

            Total    Copied   Skipped  Mismatch    FAILED    Extras 
 Dirs :    158189    153466    158186         0         0         0
Files :   1116292         0   1116296         0         0         0
Bytes :   1.350 t         0   1.350 t         0         0         0
Times :   0:01:04   0:00:00                       0:00:00   0:01:04

Relatório de desduplicação

,

Além disso, não conheço os canais adequados para relatar erros à Microsoft, mas vinculei-me a essa discussão na parte inferior da documentação de desduplicação da Microsoft, no site do Windows IT Pro Center :

https://docs.microsoft.com/en-us/windows-server/storage/data-deduplication/overview

Dale Mahalko
fonte
/MT:128parece bastante alto; você descobriu que era realmente eficaz defini-lo tão alto (e não é contraproducente ultrapassar um valor mais baixo)?
Davidbak
1
PS Eu amo trabalhar na linha de comando. Imagine a caixa de diálogo desagradável com guias em que você precisaria trabalhar lentamente para obter essa funcionalidade precisa. E nenhuma dessas interfaces de usuário possui um modo de "salvar", então você precisa fazer isso sempre!
Davidbak
Não sei por que eles se preocupam em expor o controle de segmentação ao usuário final. No final, ele faz uma varredura de 1,5 TB de dados em um minuto, sem alterações, portanto, qualquer "impacto" que tenha o máximo de threads, parece não ter importância. Esse desempenho é bastante aceitável para mim.
Dale Mahalko 19/07/19
@DaleMahalko - Eu pessoalmente achei útil poder controlar o máximo de threads. Se eu tiver 10 arquivos para copiar, onde cada um leva algumas horas, a configuração do MT: 2 permite que apenas dois threads de cópia de arquivo estejam ativos por vez. Em infraestruturas não confiáveis ​​ou complexas onde ocorrem interrupções, o MT: 2 garantirá que apenas 2 cópias de arquivos sejam abortadas em vez de 10 se eu tiver o MT: 10 (todos os arquivos sendo copiados ao mesmo tempo). Nesse caso, se ocorrer uma interrupção nos últimos 2 arquivos em cada 10, somente eles precisarão ser reiniciados (com outros 8 já copiados) em vez de todos eles.
Rod
Já faz muito tempo desde a última vez que usei o Robocopy, mas me lembro que um número limitado de threads não satura o link de rede entre dois servidores, mas mais threads. E esse realmente deve ser o foco. A especificação de threads máximos é inútil, mas "adicione lentamente mais threads de cópia até que a largura de banda X ultrapasse e, se estiver acima do limite, não adicione mais threads quando as cópias terminarem" é realmente útil e atenderá às nossas necessidades.
Dale Mahalko 13/09/19
0

Eu acho que você não sabe o que é robocopy / Robocopy - é um comando robusto de cópia de arquivo para a linha de comando do Windows que permite copiar arquivos, diretórios e até unidades de um local para outro. Se você quiser obter mais informações, consulte este artigo https://rocketfiles.com/articles/what-is-robocopy-in-windows

ANTROGOR
fonte
2
Não tenho certeza se esta é uma resposta clara para a pergunta. Como essa resposta está relacionada ao problema de desduplicação?
Todd Wilcox