大きなデータベースのバックアップファイルをネットワーク経由でコピーしようとしています。
従来のプログラムのコピーまたはxcopy
は、異なるバイナリで失敗しました。また、パラメータなしでrobocopy
を試したところ、失敗しました。 /zb
パラメータを使用してrobocopy
でもう一度試みました(再起動およびバックアップモード)。かなり時間がかかりましたが、成功しました。
私の質問は、バックアップモードは本当に大きな/バックアップファイルをコピーするように設計されているのですか?ネットで検索したが、明確な答えが見つからなかった。経験豊富なユーザーが私にヒントまたはより良い解決策を提供してくれれば幸いです。
上記の問題の解決に関する最新情報を共有したいだけです。
私の場合、xcopy
は、異なるドメインおよびサーバーの場所にあるサーバー間で10GBを超えるファイルをコピーできませんでした。
反対側では、robocopy
/zb
-再起動モードを使用します。アクセスが拒否された場合、このオプションはバックアップモードを使用します。
正常にコピーできます。時間は1時間から2.5時間に増加しました。
-
サーバーを再配置した後、同じドメインおよびサーバーの場所にあるサーバー間でファイルがコピーされます。また、xcopy
を使用しても問題ありません。
-
したがって、これに関する私の理論は、おそらくサーバー間の安定した接続に関するものでしょう。接続が堅牢でない場合(ドロップアウトが原因でアクセスの問題が発生する場合)、私の場合のように大きなファイルをコピーすると、長いプロセス中にいつでも破損が発生する可能性があります。 robocopy
with restart and backupを使用すると、コピーをかなりうまく回復できます。回復に費やされる時間はおそらくマイナス面です。
余談ですが、ルーチンタスクになる場合は、コピーではなくFTPを使用する必要があります。
バックアップモードは、権限の問題を無視してファイルを読み書きする方法です。
SeBackupPrivilege
(読み取り)とSeRestorePrivilege
(書き込み)を使用して、すべてのファイルを読み書きし、ファイルの読み取りまたは書き込みを妨げるACEを無視します。
通常、ファイルをコピーまたはアクセスしようとすると、Windowsは、場所への読み取りまたは書き込みの権限があることを確認するチェックを実行しますが、SeBackupPrivilege
(Backup OperatorsグループとAdministratorsグループに付与)、およびSeRestorePrivilege
(Backup OperatorsグループとAdministratorsグループにも付与されています)の場合、これらのチェックはバイパスされます。
アカウントにこれらの権限があるかどうかを確認するには、コマンドwhoami /priv
コマンドプロンプト。
スナップショットを作成し、静止したファイルシステムをバックアップすることを強くお勧めします。その後、/ J(大きなファイルの場合はバッファリングされないI/O)を使用してrobocopyをすばやく実行できます。以下は、C:と呼ばれるC:のシャドウコピーを作成するためのスクリプトです。このドライブ(P :)は、バックアップに最適なC:ドライブの静的イメージです。この手法を使用して、アクティブな仮想マシンのディスクイメージをバックアップドライブにコピーします。
以下では、4つのスクリプトファイルを使用しています。
diskshadow -s cleanup.cmds
diskshadow -s diskshadow.cmds
UNEXPOSE P:
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
REM do the ROBOCOPY commands here, with the source being P:, the shadow of C:
Windows Server 2016(およびおそらく他のバージョン)は、週に1日に2回シャドウコピーを実行することに注意してください。これにより、以下で作成されたシャドウコピーがクラッシュします。このバックアップ手法が、これらの自動スケジュールされたシャドウコマンドと重複しないことを確認してください。
@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 remoting を使用して、これをリモートマシンで実行することもできます。
Enter-PSSession RemoteComputer
#
# Run snapshot commands here
#
Exit-PSSession