Robocopyのバックアップモードとは


19

大きなデータベースのバックアップファイルをネットワーク経由でコピーしようとしています。

従来のプログラムのコピーまたはxcopy異なるバイナリでの失敗が発生しました。またrobocopy、パラメーターなしで試行したため、失敗しました。パラメータをrobocopy使用して別の試みを行っただけです/zb(再起動およびバックアップモード)。かなり時間がかかりましたが、成功しました。

私の質問は、バックアップモードは本当に大きな/バックアップファイルをコピーするように設計されているのですか?ネットで検索したが、明確な答えが見つからなかった。経験豊富なユーザーが私にヒントまたはより良い解決策を提供してくれれば幸いです。


xcopyとrobocopyが実際にAからBにデータをコピーする方法にはほとんど違いがないため、xcopyでrobocopyを使用しても、偶発的なデータ破損の可能性は減りません。xcopyを使用した後に別のバイナリを取得したということは、コピー中にDBが変更されたことが原因と考えられます。ここでは「/ Z」フラグは関係ありません(robocopyがファイルの既存の部分をスキップするかどうかを制御するだけです)。「/ B」フラグは、基本的にソースファイルを開くときにアプリが要求するアクセス許可を制御します。
Angstrom

@Angstrom返信ありがとうございます。バイナリの違いは、コピーされる静的バックアップファイル(既にデータベースから切り離されている)であるため、変更中のDBとは異なります。確かに、/ ZBはより堅牢なコピーのために意図的に何もしないと思いますが、再起動可能なフラグは、より正確なバイナリ書き込みを行うようです(かなり時間がかかり、同一のコピーになるという事実から)。または、再起動性により、失われたデータを書き換えることができます。
ydoow

回答:


12

バックアップモードは、権限の問題を無視してファイルを読み書きする方法です。

SeBackupPrivilege(読み取り)とSeRestorePrivilege(書き込み)を使用して、すべてのファイルを読み取り/書き込み、ファイルの読み取りまたは書き込みを妨げるACEを無視します。

通常、ファイルをコピーまたはアクセスしようとすると、Windowsは、場所への読み取りまたは書き込みのアクセス許可があることを確認するチェックを実行しますが、SeBackupPrivilege(Backup OperatorsグループとAdministratorsグループに付与されている)、およびSeRestorePrivilege(Backup OperatorsグループとAdministratorsグループにも付与されている)グループ)、これらのチェックはバイパスされます。

アカウントにこれらの特権があるかどうかを確認するにwhoami /privは、コマンドプロンプトでコマンドを実行します。


実際に質問に確実に答える回答のみ、ありがとうございます。提供される情報源は、それを完璧にするでしょう。
ハシム

2

上記の問題の解決に関する最新情報を共有したいだけです。

私の場合、xcopy異なるドメインとサーバーの場所にあるサーバー間で10GBを超えるファイルをコピーできませんでした。

反対側ではrobocopy

/zb- 再起動モードを使用します。アクセスが拒否された場合、このオプションはバックアップモードを使用します。

正常にコピーできます。時間は1時間から2.5時間に増加しました。

-

サーバーを再配置した後、ファイルは同じドメインとサーバーの場所にあるサーバー間でコピーされます。そして、使用xcopyも大丈夫です。

-

したがって、これに関する私の理論は、おそらくサーバー間の安定した接続に関するものでしょう。接続が堅牢でない場合(ドロップアウトが原因でアクセスの問題が発生する場合)、私の場合のように大きなファイルをコピーすると、長いプロセス中にいつでも破損が発生する可能性があります。robocopy再起動し、バックアップかなりよくコピーを回復することができます。回復に費やされる時間はおそらくマイナス面です。

余談ですが、ルーチンタスクになる場合は、コピーではなくFTPを使用する必要があります。


2

スナップショットを作成し、現在静止しているファイルシステムをバックアップすることを強くお勧めします。その後、/ J(大きなファイルの場合はバッファリングされていないI / O)を使用してrobocopyをすばやく実行できます。以下は、P:と呼ばれるC:のシャドウコピーを作成するためのスクリプトです。このドライブ(P :)は、バックアップに最適なC:ドライブの静的イメージです。この手法を使用して、アクティブな仮想マシンのディスクイメージをバックアップドライブにコピーします。

以下では、4つのスクリプトファイルを使用しています。

  • ディスクシャドウコマンドを実行するバッチファイル
  • 破壊するディスクシャドウコマンド ぶら下がりチャド 内部バッチファイルがクラッシュした場合の以前のシャドウ
  • シャドウをPとして作成する一連のディスクシャドウコマンド:
  • シャドウがアクティブなときに実行する一連のコマンド(P:がアクティブなときに実行される内部バッチファイル)

1)プロセスを開始するバッチファイル

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

2)以前にアクティブだったシャドウを破棄するためのシャドウコマンドファイル "cleanup.cmds"

UNEXPOSE P:

3)シャドウを構築し、4番目のファイルを呼び出すシャドウコマンドファイル "diskshadow.cmds"

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)シャドウ上で動作するコマンドファイル「backup.cmd」

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

Windows Server 2016(およびその他のバージョン)では、週に1日に2回シャドウコピーが実行されるため、以下で作成されたシャドウコピーがクラッシュすることに注意してください。このバックアップ手法が、これらの自動スケジュールされたシャドウコマンドと重複しないことを確認してください。


0

@erictの答えをさらに詳しく説明するために、PowerShellを使用してスナップショットを作成および破棄する方法を次に示します。

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

これは、PowerShellリモート処理を使用して、リモートマシンで実行することもできます。

Enter-PSSession RemoteComputer

#
# Run snapshot commands here
#

Exit-PSSession
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.