Bar

Windows Server Essentials 最古のサーバー バックアップ データを削除する方法~WSBでも使えます

Technet フォーラムで回答するため調査した、Windows Server 2012 R2 Essentialsの最古のサーバー バックアップを削除するPowerShell スクリプトをメモ。
Windows Server 2012 R2 Essentialsのサーバー バックアップはWindows Server 2008から標準搭載されたWindows Server Backupを使用しているので、本スクリプトはWindows Server Backupの最古のデータを削除する方法と置き換えが可能です。

バックアップHDDの空き容量が0になる事も・・・

Windows Server 2012 R2 Essentialsのサーバー バックアップを実行すると空き容量によって警告アラートが出力されます。
警告アラートからサーバー バックアップの仕様と対処法が読み取れます。
  • 空き容量が10%を下回るとアラートが出力される
  • 古いデータは新しいデータで上書きされる
  • バックアップ済みデータを保持したい場合は、大容量HDDへ交換する
  • 空き容量を増やしたい場合は、バックアップ項目を見直す

しかし、空き容量以上のデータをバックアップするとバックアップが失敗し、重要アラートが出力されます。
テスト環境で確認した限り、空き容量が0なため今後のサーバー バックアップは失敗し続けます


以下のイベント ログにも同一内容が記録されていました。
[アプリケーションとサービス ログ]→[Microsoft]→[Windows]→[Backup]→[Operational]

最古のバックアップ データを削除する

一つの対処法として、PowerShellを使用し最古のバックアップ データを削除し空き容量を確保する方法があります。
  1. Windows Server 2012 R2 Essentialsへリモート デスクトップ接続
  2. PowerShell を管理者権限で実行
  3. スクリプトを実行
3番は簡単なスクリプトと厳密なスクリプトがあります。
簡単なスクリプト
テスト環境で試した限り、下記スクリプトで実行すると最古のバックアップ データが削除できました。
Remove-WBBackupSet -DeleteOldest -Force
厳密なスクリプト
Technet ライブラリのサンプルを紐解いたスクリプトは以下の通りです。
#現在のバックアップ ポリシーを確認
$policy = Get-WBPolicy

#バックアップ先を指定
$target = Get-WBBackupTarget -Policy $policy

#WSEサーバー名を指定
##今回は、WSE上で実行するので環境変数からコンピューター名を取得
$machine = $env:COMPUTERNAME

#最古のバックアップ データを削除
Remove-WBBackupSet -DeleteOldest -BackupTarget $target -MachineName $machine -Force
嵌りやすいポイント
PowerShell を実行する時に嵌りやすいポイントをメモします。(私が実際に嵌った点です)
パラメータの値は文字列、数値だけではなくオブジェクトを指定する事があります。

厳密なスクリプトでいえば、
  • Get-WBBackupTargetの-Policy パラメータの値は、Get-WBPolicy型
  • Remove-WBBackupSetの-BackupTarget パラメータの値はWBBackupSet型
になります。
Microsoftのドキュメントにはパラメータの型が書かれています、ドキュメントの読み方が分かるとコーディングが楽になりますよー。

削除前後を確認

Get-WBBackupSet コマンドレットを実行し、バックアップ データを確認してみましょう。
最古のバックアップ データは 2015/10/29 12:00(UTC+09:00)、次のデータは 2015/10/29 23:00(UTC+09:00)でした。

Remove-WBBackupSet コマンドレットを実行、最古のバックアップ データを確認すると2015/10/29 23:00(UTC+09:00)が最古のバックアップ データになっているので最古のバックアップ データが正常に削除された事が確認できました。
余談:全てのバックアップ データを削除する
注意が必要なPowerShell スクリプトになります。

全てのサーバー バックアップ データを削除するスクリプトです。
テスト用、かつ、自己責任で使用してください。

#全データを削除する
Get-WBBackupSet | Foreach-Object{
    Remove-WBBackupSet -BackupSet $_ -Force -ErrorAction Stop
}