そのようなタスクのために、Windowsには便利なツールがあります。 FreeBSDでの作業中に初めてこのテクノロジーについて学び、次にLinuxでLVMについて学びました。Windowsで同じソリューションを探したときに、それがここにも存在し、ボリュームシャドウコピーと呼ばれることがわかりました。
このテクノロジーにより、元のファイルシステムが通常どおり機能し続けながら、ファイルシステムのインスタントキャストを行うことができます。 データベースバックアップの場合、この方法でデータベースを停止し(可能な場合)、ナゲットを作成し、データベースを再起動して、作成したナゲットを使用してファイルを安全にコピーできます。
Lotus Dominoデータベースをバックアップするためのナゲットを自動的に作成する(ブレークを必要としない)例と、その仕組みを説明します。 スクリプトは、ニーズに簡単に適合させることができます。
snapshot.cmd
rem Go to the script's directory
%~d0
cd %~dp0
rem Get options or exit
call snapshot_env.cmd || exit 1
date /t > %snapshot_date%
date /t >> %snapshot_status%
rem Delete the oldest shadow of the specified volume
vshadow - do = %snapshot_drive% > %snapshot_create_volume% && echo Removing old OK >> %snapshot_status% || echo Removing old ERR >> %snapshot_status%
rem Force removing the share if it haven't done itself (it happens sometimes)
net share %snapshot_share% /delete
rem Create a persistent shadow copy
vshadow -p -script = %snapshot_var_script% %snapshot_drive% >> %snapshot_create_volume% && echo Snapshot OK >> %snapshot_status% || echo Snapshot ERR >> %snapshot_status%
call %snapshot_var_script%
rem Expose a child directory from the shadow copy as a share
vshadow -er = %SHADOW_ID_1% , %snapshot_share% , %snapshot_path% && echo Sharing OK >> %snapshot_status% || echo Sharing ERR >> %snapshot_status%
echo --- >> %snapshot_status%
snapshot_env.cmd
set snapshot_drive = e:
set snapshot_path = lotus
set snapshot_share = lotus$
set snapshot_var_script = snapshot_vars.cmd
set snapshot_status = logs\snapshot_status.log
set snapshot_create_volume = logs\snapshot_create_volume.log
set snapshot_date = %snapshot_drive% \ %snapshot_path% \snapshot_date.log
仕組み
-起動後のスクリプトsnapshot.cmdは、ファイルsnapshot_env.cmdからパラメーターを読み取ります
-ファイル%snapshot_date%は、アーカイブされるディレクトリに作成されます(理由は後で説明します)
-古いスナップショット(存在する場合)と共有ディレクトリを削除します
-ドライブ%snapshot_drive%の新しいスナップショットを作成します
-ディレクトリ名snapshot_path%をネットワーク名%snapshot_share%で拡張します(つまり、ネットワーク経由でこのディレクトリに\\ server \ lotus $としてアクセスできるようになります)。 重要なポイント-バックアップオペレーターグループにはディレクトリに対する権限があります。つまり、特別なユーザーlotus-backupを作成し、バックアップオペレーターグループに追加して、スクリプトで使用して、ネットワーク経由で\\ server \ lotus $フォルダーに接続する必要があります。
-この瞬間から、\\ server \ lotus $ディレクトリからのデータを任意のペースで安全な場所にコピーできます:)
そして、%snapshot_date%ファイルが必要な理由を個別に説明します。 このファイルは、ネットワーク上で、新しく作成されたスナップショットと、何らかの理由で削除されていない古いスナップショットとを区別できるようにするために必要です。 これを行うには、%snapshot_date%ファイルが作成された日付を確認します(nagiosがこれを実行しています)。
必要条件
-スクリプトが機能するために必要なvshadow.exeは、次の場所からダウンロードできるボリュームシャドウコピーサービスSDKにあります: www.microsoft.com/downloads/en/details.aspx ?FamilyID=0b4f56e4-0ccc-4626-826a-ed2c4c95c871
-この作業はすべてWindows Server 2003でのみテストされました
PS:ところで、Bacula Windowsクライアントは、私の知る限り、「ボリュームシャドウコピー」テクノロジーも使用しています。