Welcome to TechNet Blogs Sign in | Join | Help

フィールドSEあがりの安納です

Microsoft Evangelist -- Junichi Anno

News

  • お正月はオンラインセミナー 愛の戦士ですが何か?

    新着動画

    ・PowerPivotデモ

    ・SQL Azureの管理

    Twitter Updates

      follow me on Twitter

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

    ※2008/8/27 に「【Management】DPM2007 管理シェルで保護領域不足を回避する」というタイトルで投稿した記事のリフレッシュ版です

    Data Protection Manager 2007 を使用していると、ストレージプール内の保護領域容量不足によりエラーが発生することがあります。

    このエラーを回避するには、2つの方法が考えられます。

    1. 保護領域を拡大する
    2. 保存されているデータを削除する

    前者は、DPM管理コンソールから実施することが可能ですが、後者はDPM管理シェルを使用してPowerShellによって実行する必要があります。

    この記事では、1. 保護領域を拡大する スクリプトを紹介します。

    DPM管理シェルでは、領域を拡大するために 「Set-DatasourceDiskAllocation 」というコマンドレットが用意されています。書式は以下の通りです。詳細な書式は、DPM管理シェルで get-help Set-DatasourceDiskAllocation -detailed を入力して確認してください。

    Set-DatasourceDiskAllocation -Manual
    -ProtectionGroup <保護グループのインスタンス>
    ーDatasource <データソースのインスタンス>
    -ReplicaArea または -ShadowCopyArea

    <新しいサイズ>

    上記の書式からもわかるとおり、サイズを変更するには事前に 保護グループのインスタンスと、データソースのインスタンスを取得しておく必要があります。これは単純に文字列として渡すことはできないので、それぞれ、Get-ProtectionGroup と Get-Datasource を使用して事前に取得しておかなければなりません。

    ここで覚えておいていただきたいのは、DPMサーバー、保護グループ、データソースの関係です。これらは階層構造になっており、図示すると以下のようなイメージです。

    DPMサーバー
    ├ 保護グループ1
    │ ├ データソース1
    │ ├ データソース2
    │ ・
    │ ・
    ├保護グループ2
    │ ├ データソース3
    │ ├ データソース4
    ・ ├ データソース5

    つまり、データソース4 を取得したい場合には、はじめに保護グループ2 のインスタンスを取得しないといけないわけです。この考え方は、DPMをPowerShellから操作する場合に必ずついて回るので、是非覚えておいてください。

    それでは、スクリプトを作ってみましょう。長いスクリプトになるので、分割して説明します。

    ※分割していないソースはこちらから。

    このスクリプトでは、指定したサーバーの保護グループに設定されているデータソースをすべてチェックし、領域の使用率が90%を超えていれば1.5倍に拡大しています。この「90%」はOperations Managerにおける監視の閾値であり、このスクリプトでも閾値をそれに合わせています。

    まずは情報収集と設定の起点となるDPMサーバーに接続する必要があります。 以下では、DPMサーバー名を引数として渡せるようにしていますが、もし引数が指定されていない場合には、「DPMServerName:」というプロンプトを表示し、入力を促すようにしています。

    param([string] $DPMServerName)

    if(!$DPMServerName)
    {
         $DPMServerName = read-host "DPMServerName:"
    }

    $dpmserver = Connect-DPMServer $dpmservername

    次に、Get-ProtectionGroup を使用して、DPMサーバー上の保護グループを取得します。Get-ProtectionGroup はDPMサーバーの配下にあるので、引数としてDPMサーバーのインスタンスを渡します。1つのサーバーには複数の保護グループが含まれている可能性があるので、戻される値はアレイ値となります。

    $PGList = @(Get-ProtectionGroup $dpmservername)

    $PGList には、複数の保護グループが格納されている可能性があるため、foreach を使用して保護グループを1つずつ取り出します。

    foreach($PG in $PGList)
    {

    ここは重要です。 保護グループの設定を変更するには、Get-ModifiableProtectionGroup を使用して、変更可能なオブジェクトに変換する必要があります。

      $MPG = Get-ModifiableProtectionGroup $PG

      $ModifiableProtectionGroupName = $MPG.FriendlyName
      Write-Host "保護グループ::$ModifiableProtectionGroupName"

    変更可能な保護グループオブジェクトを使用して、Get-Datasource によりデータソースを取得します。保護グループには複数のデータソースが含まれる可能性があるため、戻り値 $dslist はアレイ値となっています。

      $dslist=@(Get-Datasource $MPG)

    戻り値の中から1つずつデータソースを取り出します。Nameプロパティはデータソースの名前を返します。

      foreach ($ds in $dslist)
          {
            $DataSourceName    = $ds.Name

    高速完全バックアップの領域(レプリカサイズ)について、現在のレプリカサイズ(高速完全バックアップ領域のサイズ)、既に使用している容量、使用率を取得しています。

            $RecentReplicaSize = $ds.ReplicaSize
            $RecentReplicaUsedSpace = $ds.ReplicaUsedSpace
            $RecentReplicaUsedPercent = $RecentReplicaUsedSpace / $RecentReplicaSize * 100

    同様に、回復ポイントの領域についても、現在のサイズ、使用されているサイズ、使用率を取得しています。

             $RecentShadowCopyAreaSize = $ds.ShadowCopyAreaSize 
             $RecentShadowCopyUsedSpace = $ds.ShadowCopyUsedSpace 
             $RecentShadowCopyUsedPercent = $RecentShadowCopyUsedSpace / $RecentShadowCopyAreaSize * 100

    ひとまず現在の状態を画面に表示しています。

             Write-Host "- データソース::$DataSourceName"
             Write-Host "-- 現在のレプリカサイズ ::$RecentReplicaSize ($RecentReplicaUsedSpace) $RecentReplicaUsedPercent %"
             Write-Host "-- 現在のシャドウコピーサイズ::$RecentShadowCopyAreaSize ($RecentShadowCopyUsedSpace) $RecentShadowCopyUsedPercent %"

    レプリカサイズについて、使用量が90%を超えている場合には、容量を1.5倍にしています。サイズを設定するには、Set-DatasourceDiskAllocation を使用し、パラメタとして -ReplicaArea を指定します。

    注意しなければならないのは、Set-ProtectionGroup というコマンドレットです。Set-DatasourceDiskAllocation でサイズを指定しただけではコミットがされないため、必ず Set-ProtectionGroup によって保存してあげる必要があります。

            if($ds.ReplicaSize * 0.9 -lt $ds.ReplicaUsedSpace)
              {
                 $NewReplicaSize = $ds.ReplicaSize * 1.5
                 Set-DatasourceDiskAllocation -Manual -Datasource $ds -ProtectionGroup $MPG -ReplicaArea $NewReplicaSize

                 Set-ProtectionGroup $MPG

                 $RecentReplicaSize = $NewReplicaSize
                 $RecentReplicaUsedPercent = $RecentReplicaUsedSpace / $RecentReplicaSize * 100
                 Write-Host "---- 新しいレプリカサイズ ::$RecentReplicaSize ($RecentReplicaUsedSpace) $RecentReplicaUsedPercent %"
               }

    同様にして、回復ポイントの領域についてもサイズを変更します。Set-DatasourceDiskAllocation のパラメタには -ShadowCopyArea を使用します。

            if($ds.ShadowCopyAreaSize * 0.9 -lt $ds.ShadowCopyUsedSpace)
                 {
                   $NewSCSize = $ds.ShadowCopyAreaSize * 1.5
                   Set-DatasourceDiskAllocation -Manual -Datasource $ds -ProtectionGroup $MPG -ShadowCopyArea $NewSCSize

                   Set-ProtectionGroup $MPG

                   $RecentShadowCopyAreaSize = $NewSCSize 
                   $RecentShadowCopyUsedPercent = $RecentShadowCopyUsedSpace / $RecentShadowCopyAreaSize * 100 
                   Write-Host "---- 新しいシャドウコピーサイズ::$RecentShadowCopyAreaSize ($RecentShadowCopyUsedSpace) $RecentShadowCopyUsedPercent %"
                 }

    最後に、DPMサーバーから切断して完了です。

       }
    }
    Disconnect-DPMServer $dpmservername

    スクリプトは拡張子 ps1 で保存し、DPM管理シェル上で実行します。

    通常のコマンドプロンプトから実行する場合には、以下のようなバッチファイルを作成するとよいでしょう。

    以下は1行で書かれています。

    C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe
    -PSConsoleFile "C:\Program Files\Microsoft DPM\DPM\bin\dpmshell.psc1"
    -command ".'<スクリプトのフルパス>' -DPMServerName <DPMサーバー名>

    Posted: Friday, August 29, 2008 10:00 AM by junichia

    Comments

    sashi said:

    安納さん

    ITPro道場でお世話になっております、指崎です。

    本日の基調講演、ご苦労さまでございました。

    あと、BOF&ライトニングトーク控え室での激励ありがとうございました。

    明日、セッションを聴講させていただこうと思っていたところなので、スクリプトも含め、質問があれば、Q&Aに伺おうと思います。

    # August 27, 2008 8:43 AM

    フィールドSEあがりの安納です said:

    セッション直前の安納です。スピーカールームで暇なので、デモを追加しようかなと思っているところです。 で、ちょっとやってみたいのが、回復ポイントの削除です。 先日、以下の投稿をしました。 【Management】DPM2007

    # August 28, 2008 2:07 AM

    sueda_xp@msn.com said:

    セッションお疲れ様でした。

    このスクリプトを含め、即戦力になるデモンストレーションが満載で、非常にためになりました。

    ところで、セッション中にお話されていたようなOpsMgrと組み合わせるケースなら、このスクリプトの閾値の判別ロジックは無くても良いのでしょうか?

    あと、残りのスクリプトも全部載せていただけると、コピペできるので幸せになれそうです。

    # August 28, 2008 9:16 AM

    junichia said:

    >>sueda_xp@msn.com

    あら、ごめんなさい!

    なんでだろう、切れてますね。

    リライトして投稿しますのでお待ちくださいませ。

    # August 28, 2008 11:19 AM

    junichia said:

    >>sueda_xp@msn.com さん

    >セッション中にお話されていたようなOpsMgrと組み合わせるケースなら、このスクリプトの閾値の判別ロジックは無くても良いのでしょうか?

    はい。OpsMgrでも90%を閾値として監視していますので、単純に現在の容量を増やすだけでもOKです。

    DPMをOpsMgrのルールで監視するにはちょっとコツが必要なので、これについても投稿します。お待ちください。

    # August 28, 2008 11:44 AM

    フィールドSEあがりの安納です said:

    ※2008/8/28 に「【Management】 Data Protection Managere 2007 で回復ポイントを削除する というタイトルで投稿した記事にリフレッシュ版です 先日の投稿で、保護領域を拡張する方法についてご紹介しました。

    # August 29, 2008 4:33 AM
    Anonymous comments are disabled
    Page view tracker