Apa itu mode cadangan di Robocopy

19

Saya mencoba menyalin file cadangan database besar melalui jaringan.

Salinan program tradisional atau xcopygagal dengan biner berbeda dihasilkan. Juga mencoba robocopytanpa parameter, dan mengakibatkan kegagalan. Baru saja melakukan upaya lain dengan robocopymenggunakan /zbparameter (restart dan mode cadangan). Butuh waktu lebih lama tetapi menghasilkan kesuksesan.

Pertanyaan saya adalah, apakah mode cadangan benar-benar dirancang untuk menyalin file besar / cadangan? Telah mencari melalui internet dan tidak dapat menemukan jawaban yang jelas. Akan menghargai jika ada pengguna berpengalaman bisa memberi saya petunjuk atau solusi yang lebih baik.

kemarin
sumber
Ada sangat sedikit perbedaan antara bagaimana xcopy dan robocopy sebenarnya menyalin data dari A ke B, jadi menggunakan robocopy over xcopy tidak akan mengurangi peluang Anda dari kerusakan data yang tidak disengaja. Berarti Anda mendapatkan biner yang berbeda setelah menggunakan xcopy kemungkinan besar karena DB telah dimodifikasi saat disalin. Bendera "/ Z" tidak relevan di sini (hanya mengontrol jika robocopy melompati bagian file yang ada), seperti bendera "/ B" yang pada dasarnya mengontrol izin yang diminta oleh aplikasi saat membuka file sumber.
Angstrom
@Angstrom terima kasih atas balasan Anda. Perbedaan biner bukan dari DB yang berubah karena ini adalah file cadangan statis (sudah terlepas dari database) yang sedang disalin. Benar, saya percaya / ZB tidak melakukan apa-apa dengan sengaja untuk salinan yang lebih kuat, tetapi flag yang dapat direstart tampaknya membuat penulisan biner yang lebih akurat (dari fakta bahwa ini membutuhkan waktu lebih lama dan menghasilkan salinan yang identik). Atau bisa juga dengan kemampuan memulai ulang memungkinkan untuk menulis ulang data yang hilang.
ydoow

Jawaban:

12

Mode cadangan adalah cara untuk membaca dan menulis file tanpa menghiraukan masalah izin.

Ini menggunakan SeBackupPrivilege(membaca) dan SeRestorePrivilege(menulis) untuk membaca / menulis file apa saja dan semua, mengabaikan ACE yang akan mencegah Anda membaca atau menulis file.

Biasanya ketika mencoba menyalin atau mengakses file, Windows melakukan pemeriksaan untuk memastikan Anda memiliki izin untuk membaca atau menulis ke lokasi, tetapi dengan SeBackupPrivilege(diberikan kepada Operator Cadangan dan grup Administrator), dan SeRestorePrivilege(juga diberikan kepada Operator dan Administrator Cadangan grup), cek ini dilewati.

Untuk memeriksa apakah akun Anda memiliki hak istimewa ini, Anda dapat menjalankan perintah whoami /privdi prompt perintah.

Justin Krejcha
sumber
Hanya jawaban yang benar-benar menjawab pertanyaan secara definitif, terima kasih. Sumber untuk informasi yang diberikan akan membuatnya sempurna.
Hashim
2

Hanya ingin membagikan pembaruan tentang penyelesaian masalah di atas.

Dalam kasus saya, xcopygagal menyalin file lebih dari 10GB di server di berbagai domain dan lokasi server.

Di sisi lain, robocopydengan

/zb- Menggunakan mode Restart. Jika akses ditolak, opsi ini menggunakan mode Cadangan.

dapat berhasil menyalin. Itu meningkatkan waktu dari 1 jam menjadi 2,5 jam sekalipun.

-

Setelah mengatur ulang server, file tersebut disalin ke seluruh server di domain dan lokasi server yang sama sekarang. Dan menggunakan juga xcopytidak apa-apa.

-

Jadi teori saya tentang ini mungkin tentang stabilitas koneksi antar server. Jika koneksi tidak kuat (dengan kadang-kadang putus menyebabkan masalah akses), ketika menyalin file besar seperti kasus saya, kemungkinan korupsi terjadi setiap saat selama proses panjang; robocopydengan restart dan cadangan dapat memulihkan salinan dengan cukup baik. Waktu yang dihabiskan untuk pemulihan mungkin sisi buruknya.

Dan sebagai catatan tambahan, FTP bukan salinan harus digunakan jika itu akan menjadi tugas rutin

kemarin
sumber
2

Saya sangat menyarankan Anda membuat snapshot dan membuat cadangan sistem file yang sekarang quiesced. Anda kemudian dapat menjalankan robocopy dengan cepat menggunakan / J (I / O unbuffered untuk file besar). Berikut ini adalah skrip untuk membuat salinan bayangan C: yang disebutnya P :. Drive ini (P :) adalah gambar statis dari drive C: sempurna untuk backup. Kami menggunakan teknik ini untuk menyalin gambar disk mesin virtual aktif ke drive cadangan.

Berikut ini menggunakan empat file skrip:

  • File batch untuk menendang itu perintah bayangan disk
  • perintah bayangan disk untuk menghancurkan chads menggantung bayangan sebelumnya jika file batch dalam crash
  • serangkaian perintah bayangan disk untuk membuat bayangan sebagai P:
  • serangkaian perintah untuk dieksekusi saat bayangan aktif (file batch dalam dieksekusi saat P: aktif)

1) file batch untuk memulai proses

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

2) file perintah bayangan "cleanup.cmds" untuk menghancurkan bayangan yang sebelumnya aktif

UNEXPOSE P:

3) file perintah bayangan "diskshadow.cmds" yang membangun bayangan, dan kemudian memanggil file keempat

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) File perintah "backup.cmd" untuk beroperasi pada bayangan

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

Perhatikan bahwa Windows Server 2016 (dan mungkin versi lain) menjalankan salinan bayangan dua kali sehari selama seminggu yang akan menyebabkan salinan bayangan yang dibuat di bawah ini macet. Pastikan teknik pencadangan ini tidak tumpang tindih dengan perintah bayangan terjadwal otomatis ini.

erict
sumber
0

Untuk memperluas jawaban @ erict, inilah cara menggunakan PowerShell untuk membuat dan menghancurkan snapshot:

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

Ini juga dapat dijalankan pada mesin jarak jauh, dengan menggunakan PowerShell remoting :

Enter-PSSession RemoteComputer

#
# Run snapshot commands here
#

Exit-PSSession
InteXX
sumber