【Windows】WindowsServerバックアップでネットワークフォルダの世代管理を行う

Microsoft Windows

Windows Server バックアップでは、バックアップの保存先としてネットワークフォルダを指定する場合、保存可能な世代数としては第一世代のみとなっています。スケジュールされたバックアップが走るたびに古いバックアップは上書きされる動作となり、通常の方法では最新のバックアップのみしか保持することができません。そのため、世代管理を行いたい場合は、バックアップ保存先を専用ハードディスクもしくはボリュームにする必要があるのですが、スクリプトで世代管理を行うことができましたので残します。

スポンサーリンク

Windows Server バックアップの仕様

Windows Backupの仕様については以下のようになっています。

バックアップ格納先世代バックアップ格納先の容量が圧迫した場合の動作
バックアップ専用のハードディスクにバックアップする最大 512 世代保存シャドウ コピーを保存する容量が足りないと最も古い世代から自動的に削除
ボリュームにバックアップする最大 512 世代保存シャドウ コピーを保存する容量が足りないと最も古い世代から自動的に削除
共有ネットワーク フォルダーにバックアップする最新 1 世代のみ保存バックアップに失敗
Windows Server バックアップにおける容量と世代管理について

バックアップ先フォルダの準備

事前準備としてバックアップの保存先対象から保存先となるフォルダを作成します。ここでは “backup” という名前でネットワークフォルダ上に作成して通常は見えないように “Backup$” で隠し共有フォルダとして共有化を行います。
※アクセス権は後ほど設定するバックアップスクリプトを構成するタスクスケジューラーで指定するアカウントと同じものを指定

New-Item "C:\Backup" -ItemType Directory



New-SmbShare -Name Backup$ -Path "C:\Backup" -FullAccess "<アクセス権(Contoso\Domain Adminsなど)>" -ReadAccess "Everyone" -Description "windows backup share"

バックアップ用スクリプトの中身

ここでは第二世代までのバックアップを保存するスクリプト構成を参考として記載します。変数を変えることで世代数の変更は可能です。
流れとしてはまず wbadmin コマンドにてバックアップを取得し、バックアップ完了後にフォルダ名を変更後、最後に古いバックアップファイルを削除するといった動作となります。
※2日前のバックアップファイルがない場合は、削除は行われません。
また、こちらのスクリプトではバックアップ取得後に日付を付与しているため、リストア時はそのままではバックアップファイルを認識できないため、リストアのタイミングでフォルダ名からバックアップの日時を削除する必要となります。

#Variable
$TODAY=(get-date).ToString("yyyyMMdd")
$OLDESTDAY =(get-date).adddays(-2).ToString("yyyyMMdd")
$NEWBK="$ENV:Computername"+"_"+"$TODAY"
$OLDESTBK="$ENV:Computername"+"_"+"$OLDESTDAY"
$BKDIR="\\<ネットワークフォルダ>\Backup$"


#Get Backup
wbadmin start backup -backupTarget:$BKDIR -allCritical -systemState -vssCopy -quiet

#Rename Backup File
Rename-Item $BKDIR\WindowsImageBackup\$ENV:Computername $NEWBK


#Delete After 2 Days
Remove-Item -path $BKDIR\WindowsImageBackup\$OLDESTBK -recurse -force

 

これを “wbscript.ps1” などの名前でPS1形式で保存し、特定のフォルダに配置します。
タスクスケジューラにて、保存したps1ファイルを登録し、スケジュールとネットワークフォルダにアクセス権のある実行アカウントを指定します。
この方法であればネットワークフォルダに対しても Windows Server バックアップにて世代の管理が行えるようになります。

 

タイトルとURLをコピーしました