Windows:スナップショットを使用したリモートバックアップ(VShadow)

単にファイルをコピーしてバックアップする場合、「データの整合性を検証する方法」という疑問が生じます。 実際、たとえば、50ギガバイトのロータスサーバーデータベースをコピーすると、一方の部分をコピーする過程で、もう一方の部分が変更され、整合性が侵害されます。 また、場合によって(データベースなど)、サービスを停止する必要があるかもしれませんが、数時間サービスを停止する方法はありません。



そのようなタスクのために、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クライアントは、私の知る限り、「ボリュームシャドウコピー」テクノロジーも使用しています。



All Articles