Cos'è la modalità di backup in Robocopy


19

Sto cercando di copiare un file di backup di database di grandi dimensioni sulla rete.

La copia del programma tradizionale o xcopyfallita con risultati binari diversi. Anche provato robocopysenza parametro e ha provocato un errore. Ho appena fatto un altro tentativo con l' robocopyutilizzo del /zbparametro (riavvio e modalità di backup). Ci è voluto molto più tempo ma ha avuto successo.

La mia domanda è: la modalità di backup è davvero progettata per copiare file di grandi dimensioni / di backup? Ho cercato in rete e non sono riuscito a trovare una risposta chiara. Gradirei se qualsiasi utente esperto potesse darmi un suggerimento o una soluzione migliore.


C'è una differenza minima tra il modo in cui xcopy e robocopy copiano effettivamente i dati da A a B, quindi l'uso di robocopy su xcopy non riduce le possibilità di corruzione accidentale dei dati. Significa che hai ottenuto un binario diverso dopo aver usato xcopy molto probabilmente perché il DB è stato modificato mentre è stato copiato. Il flag "/ Z" non ha rilevanza qui (controlla solo se robocopy salta la parte esistente del file), così come il flag "/ B" che controlla sostanzialmente le autorizzazioni richieste dall'app all'apertura del file sorgente.
Angstrom,

@Angstrom grazie per la tua risposta. La differenza binaria non proviene da un DB che cambia in quanto è un file di backup statico (già staccato dal database) che viene copiato. Vero credo / ZB non fa nulla intenzionalmente per una copia più robusta, ma il flag riavviabile sembra effettuare una scrittura binaria più accurata (dal fatto che richiede molto più tempo e risulta in una copia identica). O potrebbe essere la restartability rendere possibile riscrivere i dati persi.
ydoow,

Risposte:


12

La modalità di backup è un modo per leggere e scrivere file ignorando eventuali problemi di autorizzazione.

Utilizza SeBackupPrivilege(lettura) e SeRestorePrivilege(scrittura) per leggere / scrivere qualsiasi e tutti i file, ignorando qualsiasi ACE che ti impedirebbe di leggere o scrivere un file.

Normalmente quando si tenta di copiare o accedere a un file, Windows esegue un controllo per assicurarsi di disporre dell'autorizzazione per leggere o scrivere nella posizione, ma con SeBackupPrivilege(concesso ai gruppi Operatori e amministratori di backup) e SeRestorePrivilege(concesso anche agli Operatori e amministratori di backup gruppi), questi controlli vengono ignorati.

Per verificare se il tuo account ha questi privilegi, puoi eseguire il comando whoami /prival prompt dei comandi.


Solo una risposta che in realtà risponde definitivamente alla domanda, grazie. Le fonti per le informazioni fornite lo renderebbero perfetto.
Hashim,

2

Voglio solo condividere un aggiornamento sulla risoluzione del problema sopra.

Nel mio caso, xcopynon sono riuscito a copiare il file su 10 GB tra server in domini e percorsi server diversi.

Dall'altro lato, robocopycon

/zb- Utilizza la modalità di riavvio. Se l'accesso è negato, questa opzione utilizza la modalità di backup.

può copiare correttamente. Tuttavia, ha aumentato il tempo da 1 ora a 2,5 ore.

-

Dopo aver riorganizzato il server, il file viene copiato tra server nello stesso dominio e percorso del server ora. E anche usare xcopyva bene.

-

Quindi la mia teoria su questo sarebbe probabilmente sulla connessione di stabilità tra server. Se la connessione non è solida (con occasionalmente interruzione causando un problema di accesso), durante la copia di file di grandi dimensioni come il mio caso, è probabile che si verifichi una corruzione in qualsiasi momento durante il lungo processo; robocopycon riavvio e backup è possibile ripristinare abbastanza bene la copia. Il tempo dedicato al recupero è probabilmente il lato negativo.

E come nota a margine, FTP invece di copia dovrebbe essere usato se sarà un'attività di routine


2

Consiglio vivamente di creare un'istantanea e di eseguire il backup del file system ora disattivato. È quindi possibile eseguire robocopy rapidamente utilizzando / J (I / O senza buffer per file di grandi dimensioni). Ecco uno script per la creazione di una copia shadow di C: che chiama P :. Questa unità (P :) è un'immagine statica dell'unità C: perfetta per i backup. Usiamo questa tecnica per copiare le immagini attive del disco della macchina virtuale su un'unità di backup.

Quanto segue utilizza quattro file di script:

  • Un file batch per calciare i comandi dell'ombra del disco
  • i comandi dell'ombra del disco per distruggere qualsiasi chads penzoloni ombra precedente in caso di arresto anomalo del file batch interno
  • una serie di comandi dell'ombra del disco per creare l'ombra come P:
  • una serie di comandi da eseguire mentre l'ombra è attiva (un file batch interno eseguito mentre P: è attivo)

1) il file batch per avviare il processo

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

2) il file del comando shadow "cleanup.cmds" per distruggere un'ombra precedentemente attiva

UNEXPOSE P:

3) il file del comando shadow "diskshadow.cmds" che crea l'ombra e quindi chiama il quarto file

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) Il file di comando "backup.cmd" per operare sull'ombra

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

Si noti che Windows Server 2016 (e forse altre versioni) esegue una copia shadow due volte al giorno durante la settimana, causando l'arresto anomalo della copia shadow creata di seguito. Assicurarsi che questa tecnica di backup non si sovrapponga a questi comandi shadow pianificati automatizzati.


0

Per espandere la risposta di @ erict, ecco come utilizzare PowerShell per creare e distruggere l'istantanea:

$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()

Questo può anche essere eseguito su un computer remoto, utilizzando il telecomando di PowerShell :

Enter-PSSession RemoteComputer

#
# Run snapshot commands here
#

Exit-PSSession
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.