【Management】DPM2007 管理シェルで保護領域の容量不足を回避する その2

※2008/8/28 に「【Management】 Data Protection Managere 2007 で回復ポイントを削除する というタイトルで投稿した記事にリフレッシュ版です

先日の投稿で、保護領域を拡張する方法についてご紹介しました。

【Management】DPM2007 管理シェルでほ保護領域の容量不足を回避する その1

今回は、もう1つの容量不足対策をご紹介します。

DPMでは、保護グループ作成時に「保存期間」を日数単位で指定することができます。そのため、一度バックアップが取られると、指定した日数が経過しない限り削除されることはありません。

この機能によりバックアップの信頼性は向上するわけですが、ときによっては「あのバックアップいらねー」となることもあるでしょう。

そこで、古いバックアップを保護領域から削除するスクリプトをご紹介します。

ソース全体はこちらから。

このスクリプトでは、指定したサーバーの保護グループにある、特定の回復ポイントを削除します。

スクリプト名につづいて[サーバー名]、[保護グループ名]、[データソース名], [回復ポイントの日時(yyyy/mm/dd hh:nn:ss)]を指定することができます。保護グループ名やデータソース名、回復ポイントの日時が分からない場合でも安心してください。なにも入れなければ一覧から選択できるようになっています(以降参照)

param([string] $DPMServerName, [string] $ProtectionGroupName,[string] $Datasource, [string] $RepeisentedPointInTime)

サーバー名が指定されていなければ、プロンプトが表示されてサーバー名の入力を求められます。

if(!$DPMServerName) {      $DPMServerName = read-host "DPMサーバー名:" }

DPM サーバーに接続します。

$DPMServer = Connect-DPMServer $DPMServerName

もし保護グループ名が指定されていなければ、指定したサーバーの保護グループ一覧を表示し、保護グループの選択を求めます。

if(!$ProtectionGroupName) {      $PGList = Get-ProtectionGroup $DPMServerName      $PGList         Write-Host "保護グループを選択してください"      $ProtectionGroupName = read-host "保護グループ名:" }

選択された(またはパラメタとして指定された)保護グループのインスタンスを取得します。

$pg = Get-ProtectionGroup $DPMServerName | where {$_.FriendlyName -eq $ProtectionGroupName}

データソースが指定されていない場合には、保護グループ内のデータソース一覧を表示し、「データソース名」というプロンプトでデータソースを指定できるようにします。

if(!$Datasource) {      $DSList = Get-Datasource $pg | format-table Name,ProductionServerName      $DSList      Write-Host "データソースを選択してください"      $Datasource = read-host "データソース名:" }

パラメタに指定された、または一覧から選択したデータソースのインスタンスを取得します。

$ds = Get-Datasource -ProtectionGroup $pg | where {$_.Name -eq $Datasource}

回復ポイントがパラメタとして指定されていない場合には、データソースの回復ポイント一覧を表示し、「回復ポイントの日時」というプロンプトに回復ポイントの日時を指定することができるようにします。

大量に回復ポイントがある場合には、ちょっとアレですねぇ。どなたかエレガントなUIを考えてみてくださいませ。

if(!$ReprisentedPointInTime) {      $RPList = Get-RecoveryPoint -DataSource $ds |format-table RepresentedPointInTime,UserFriendlyName,Size |out-string      $RPList      Write-Host "削除したい回復ポイントの RepresentedPointInTime を指定してください"      $RepresentedPointInTime = read-host "回復ポイントの日時:" }

指定された回復ポイントのインスタンスを取得します。

$RP = Get-RecoveryPoint -DataSource $ds | where {$_.RepresentedPointInTime -eq $RepresentedPointInTime}

Remove-RecoveryPoint を使用して回復ポイントを削除します。

このとき、依存関係がある回復ポイント一覧が表示されるので、削除の際には必ずチェックしてください。

また、#で始まる行は「自動削除」の記述の仕方です。この行を生かすと、「削除するかどうか」のプロンプトが表示されずに無条件で削除されてしまいます。ご注意ください。

Write-Host "回復ポイントを削除します" Write-Host "-- 保護グループ:: $ProtectionGroupName" Write-Host "-- 回復ポイント:: $RepresentedPointInTime"

#Remove-RecoveryPoint -RecoveryPoint $rp -ForceDeletion -Confirm:$false Remove-RecoveryPoint -RecoveryPoint $rp

それでは、よい Scripting Life を!