O que é o modo de backup no Robocopy


19

Estou tentando copiar um arquivo grande de backup de banco de dados pela rede.

A cópia tradicional do programa ou xcopyfalhou com diferentes resultados binários. Também tentei robocopysem parâmetro e resultou em uma falha. Apenas fiz outra tentativa com o robocopyuso do /zbparâmetro (modo de reinicialização e backup). Demorou muito mais tempo, mas resultou em um sucesso.

Minha pergunta é: o modo de backup foi realmente projetado para copiar arquivos grandes / de backup? Pesquisou na net e não conseguiu encontrar uma resposta clara. Gostaria que qualquer usuário experiente pudesse me dar uma dica ou uma solução melhor.


Há muito pouca diferença entre como o xcopy e o robocopy realmente copiam os dados de A para B, portanto, o uso de robocopy sobre xcopy não reduzirá suas chances de corrupção acidental de dados. Significando que você obteve um binário diferente depois de usar o xcopy, provavelmente porque o banco de dados foi modificado enquanto era copiado. O sinalizador "/ Z" não tem relevância aqui (ele apenas controla se a robocopy ignora parte existente do arquivo), assim como o sinalizador "/ B" que basicamente controla as permissões solicitadas pelo aplicativo ao abrir o arquivo de origem.
Angstrom

@ Angstrom obrigado pela sua resposta. A diferença binária não é de um banco de dados alterado, pois é um arquivo de backup estático (já desanexado do banco de dados) sendo copiado. É verdade que acredito que / ZB não faz nada intencionalmente para uma cópia mais robusta, mas o sinalizador reiniciável parece fazer uma gravação binária mais precisa (pelo fato de demorar muito mais tempo e resultar em uma cópia idêntica). Ou pode ser a reinicialização possibilitar a reescrita de dados perdidos.
ydoow 23/09/15

Respostas:


12

O modo de backup é uma maneira de ler e gravar arquivos, ignorando quaisquer problemas de permissão.

Ele usa SeBackupPrivilege(leitura) e SeRestorePrivilege(gravação) para ler / gravar todos e quaisquer arquivos, desconsiderando quaisquer ACEs que impeçam a leitura ou gravação de um arquivo.

Normalmente, ao tentar copiar ou acessar um arquivo, o Windows executa uma verificação para garantir que você tenha permissão para ler ou gravar no local, mas com SeBackupPrivilege(concedido aos grupos Operadores de Backup e Administradores) e SeRestorePrivilege(também concedido aos Operadores e Administradores de Backup) grupos), essas verificações são ignoradas.

Para verificar se sua conta possui esses privilégios, você pode executar o comando whoami /privem um prompt de comando.


Apenas responda que realmente responde à pergunta definitivamente, obrigado. Fontes para as informações fornecidas tornariam perfeito.
Hashim

2

Só quero compartilhar uma atualização para resolver o problema acima.

No meu caso, xcopyfalha ao copiar o arquivo com mais de 10 GB em servidores em diferentes domínios e locais de servidores.

Por outro lado, robocopycom

/zb- Usa o modo Reiniciar. Se o acesso for negado, esta opção utilizará o modo Backup.

pode copiar com sucesso. Aumentou o tempo de 1 hora para 2,5 horas.

-

Depois de reorganizar o servidor, o arquivo é copiado em servidores no mesmo domínio e local do servidor agora. E usar também xcopyestá bem.

-

Portanto, minha teoria sobre isso provavelmente seria sobre a conexão de estabilidade entre servidores. Se a conexão não for robusta (com a interrupção ocasional da conexão causando um problema de acesso), ao copiar arquivos grandes como o meu caso, uma corrupção provavelmente ocorrerá a qualquer momento durante o longo processo; robocopycom reinicialização e backup pode recuperar a cópia muito bem. O tempo gasto na recuperação é provavelmente o lado negativo.

E, como observação, o FTP em vez da cópia deve ser usado se for uma tarefa rotineira


2

Eu sugiro fortemente que você crie um instantâneo e faça backup do sistema de arquivos agora desativado. Em seguida, você pode executar a robocópia rapidamente usando / J (E / S sem buffer para arquivos grandes). Aqui está um script para criar uma cópia de sombra de C: que ele chama de P :. Esta unidade (P :) é uma imagem estática da unidade C: perfeita para backups. Usamos essa técnica para copiar imagens de disco ativas da máquina virtual em uma unidade de backup.

O seguinte usa quatro arquivos de script:

  • Um arquivo em lote para chutar os comandos de sombra do disco
  • comandos de sombra de disco para destruir qualquer balanços pendentes sombra anterior se o arquivo em lotes interno travar
  • uma série de comandos de sombra de disco para criar a sombra como P:
  • uma série de comandos para executar enquanto a sombra está ativa (um arquivo em lote interno executado enquanto P: está ativo)

1) o arquivo em lotes para iniciar o processo

diskshadow -s cleanup.cmds
diskshadow -s diskshadow.cmds

2) o arquivo de comando shadow "cleanup.cmds" para destruir uma sombra anteriormente ativa

UNEXPOSE P:

3) o arquivo de comando shadow "diskshadow.cmds", que cria a sombra e depois chama o quarto arquivo

SET CONTEXT PERSISTENT NOWRITERS
SET METADATA example.cab
SET VERBOSE ON
BEGIN BACKUP
ADD VOLUME C: ALIAS systemVolumeShadow
CREATE
EXPORT %systemVolumeShadow% P:
EXEC c:\yourlocation\backup.cmd
UNEXPOSE P:
END BACKUP
RESET

4) O arquivo de comando "backup.cmd" para operar na sombra

REM do the ROBOCOPY commands here, with the source being P:, the shadow of C:

Observe que o Windows Server 2016 (e possivelmente outras versões) executa uma cópia de sombra duas vezes por dia durante a semana, causando o travamento da cópia de sombra criada abaixo. Verifique se essa técnica de backup não se sobrepõe a esses comandos de sombra agendados automatizados.


0

Para expandir a resposta de @ erict, veja como usar o PowerShell para criar e destruir o instantâneo:

$Drive = "D:\"
$Folder = $Drive + "ShadowCopy"

# Create the snapshot
$Snapshot = (gwmi -List Win32_ShadowCopy).Create($Drive, "ClientAccessible")
$Shadow = gwmi Win32_ShadowCopy | ? { $_.ID -eq $Snapshot.ShadowID }
$Volume = $Shadow.DeviceObject + "\"
cmd /c mklink /d "$Folder" "$Volume"

# Destroy the snapshot
cmd /c rd "$Folder"
$Shadow.Delete()

Isso também pode ser executado em uma máquina remota usando o sistema remoto do PowerShell :

Enter-PSSession RemoteComputer

#
# Run snapshot commands here
#

Exit-PSSession
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.