Co to jest tryb tworzenia kopii zapasowych w Robocopy

19

Próbuję skopiować duży plik kopii zapasowej bazy danych przez sieć.

Wynik tradycyjnego kopiowania programu lub błąd xcopyz innym plikiem binarnym. Próbowano także robocopybez parametru i spowodowało błąd. Właśnie wykonałem kolejną próbę robocopyużycia /zbparametru (restart i tryb kopii zapasowej). Trwało to znacznie dłużej, ale zakończyło się sukcesem.

Moje pytanie brzmi: czy tryb tworzenia kopii zapasowych naprawdę służy do kopiowania dużych plików / kopii zapasowych? Przeszukałem sieć i nie mogłem znaleźć jednoznacznej odpowiedzi. Byłbym wdzięczny, gdyby jakiś doświadczony użytkownik mógł dać mi wskazówkę lub lepsze rozwiązanie.

ydoow
źródło
Jest bardzo mała różnica między sposobem kopiowania danych przez xcopy i robocopy z A do B, więc użycie robocopy przez xcopy nie zmniejszy twoich szans na przypadkowe uszkodzenie danych. Oznacza to, że otrzymałeś inny plik binarny po użyciu xcopy najprawdopodobniej, ponieważ DB został zmodyfikowany podczas kopiowania. Flaga „/ Z” nie ma tutaj znaczenia (kontroluje tylko, czy robocopy pomija istniejącą część pliku), podobnie jak flaga „/ B”, która zasadniczo kontroluje uprawnienia wymagane przez aplikację podczas otwierania pliku źródłowego.
Angstrom,
@Angstrom dzięki za odpowiedź. Różnica binarna nie polega na zmianie DB, ponieważ jest to kopiowany statyczny plik kopii zapasowej (już odłączony od bazy danych). To prawda, że ​​/ ZB celowo nie robi nic dla bardziej niezawodnej kopii, ale flaga, którą można zrestartować, wydaje się robić dokładniejszy zapis binarny (z faktu, że zajmuje dużo więcej czasu i daje identyczną kopię). Lub może to być możliwość ponownego uruchomienia umożliwiająca przepisanie utraconych danych.
ydoow

Odpowiedzi:

12

Tryb tworzenia kopii zapasowych jest sposobem na odczytywanie i zapisywanie plików, ignorując wszelkie problemy z uprawnieniami.

Wykorzystuje SeBackupPrivilege(odczyt) i SeRestorePrivilege(zapis) w celu odczytu / zapisu wszystkich plików, pomijając wszelkie ACE, które uniemożliwiłyby ci odczyt lub zapis pliku.

Zwykle podczas próby skopiowania lub uzyskania dostępu do pliku system Windows sprawdza, czy masz uprawnienia do odczytu lub zapisu w lokalizacji, ale z SeBackupPrivilege(przyznane grupom Operatorów kopii zapasowych i Administratorów) oraz SeRestorePrivilege(przyznane również Operatorom kopii zapasowych i Administratorom grupy), te kontrole są pomijane.

Aby sprawdzić, czy twoje konto ma te uprawnienia, możesz uruchomić polecenie whoami /privw wierszu polecenia.

Justin Krejcha
źródło
Tylko odpowiedz, która faktycznie odpowiada na pytanie, dziękuję. Źródła dostarczonych informacji sprawiłyby, że byłyby idealne.
Hashim
2

Chcę tylko udostępnić aktualizację dotyczącą rozwiązania powyższego problemu.

W moim przypadku xcopynie udało się skopiować pliku powyżej 10 GB na serwerach w innej domenie i lokalizacji serwera.

Z drugiej strony, robocopyz

/zb- Używa trybu restartu. W przypadku odmowy dostępu ta opcja korzysta z trybu kopii zapasowej.

można pomyślnie skopiować. Wydłużyło to jednak czas z 1 godziny do 2,5 godziny.

-

Po ponownej aranżacji serwera plik jest teraz kopiowany między serwerami w tej samej domenie i lokalizacji serwera. Używanie też xcopyjest w porządku.

-

Więc moja teoria dotyczyłaby prawdopodobnie stabilności połączenia między serwerami. Jeśli połączenie nie jest stabilne (czasami przerywa się, powodując problem z dostępem), podczas kopiowania dużego pliku, takiego jak moja sprawa, prawdopodobnie nastąpi uszkodzenie w dowolnym momencie podczas długiego procesu; robocopyz restartem i kopią zapasową można całkiem dobrze odzyskać kopię. Czas spędzony na regeneracji jest prawdopodobnie wadą.

Na marginesie należy użyć FTP zamiast kopiowania, jeśli będzie to rutynowe zadanie

ydoow
źródło
2

Zdecydowanie zalecamy utworzenie migawki i wykonanie kopii zapasowej systemu plików, który został już wyłączony. Następnie można szybko uruchomić robocopy za pomocą / J (niebuforowane We / Wy dla dużych plików). Oto skrypt do tworzenia kopii w tle C: która nazywa się P :. Ten dysk (P :) to statyczny obraz dysku C: idealny do tworzenia kopii zapasowych. Używamy tej techniki do kopiowania aktywnych obrazów dysków maszyny wirtualnej na dysk kopii zapasowej.

Poniższe wykorzystuje cztery pliki skryptów:

  • Plik wsadowy, aby wykopać go z poleceń dysku w tle
  • polecenia cienia dysku, aby je zniszczyć wiszące ćwieki poprzedni cień, jeśli wewnętrzny plik wsadowy się zawiesił
  • seria poleceń cienia dysku, aby utworzyć cień jako P:
  • seria poleceń do wykonania, gdy cień jest aktywny (wewnętrzny plik wsadowy wykonywany, gdy P: jest aktywny)

1) plik wsadowy, aby rozpocząć proces

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

2) plik polecenia cienia „cleanup.cmds”, aby zniszczyć poprzednio aktywny cień

UNEXPOSE P:

3) plik polecenia cienia „diskshadow.cmds”, który buduje cień, a następnie wywołuje czwarty plik

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) Plik poleceń „backup.cmd” do działania w cieniu

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

Należy pamiętać, że Windows Server 2016 (i ewentualnie inne wersje) uruchamia kopię w tle dwa razy dziennie w ciągu tygodnia, co spowoduje awarię utworzonej poniżej kopii w tle. Upewnij się, że ta technika tworzenia kopii zapasowych nie pokrywa się z tymi zautomatyzowanymi zaplanowanymi poleceniami cienia.

Eryk
źródło
0

Aby rozwinąć odpowiedź @ erict, oto jak używać PowerShell do tworzenia i niszczenia migawki:

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

Można to również uruchomić na zdalnym komputerze, używając zdalnego narzędzia PowerShell :

Enter-PSSession RemoteComputer

#
# Run snapshot commands here
#

Exit-PSSession
InteXX
źródło