web-dev-qa-db-ja.com

DPM 2012でテープを無料として自動マークする方法は?

System Center Data Protection Manager 2012を実行しているバックアップサーバーがあり、いくつかのテープドライブに接続されています(ライブラリなし)。もちろん、テープもいくつか持っています。テープの回転は手動です。

テープは以前、DPM自体(ただしサーバーは完全に再構築されています)および他のバックアップソフトウェアによって使用されていました。彼らは空っぽではありません。ただし、DPMが認識している、または保持したいデータは含まれていないため、forcefreetape.ps1を実行しなくても空きとしてマークできます。

テープをドライブに配置するときは、インベントリを実行し、インポートされたテープとして認識してから、空きとしてマークする必要があります。そうしないと、DPMは単にそれを使用することを拒否します。

インポートしたテープを自動的に無料として扱うようにDPMに指示するにはどうすればよいですか?そしてもちろん、私はそうしますnot有効期限が切れる前にドライブに入れられた場合、実際のバックアップテープを再利用したいので、ソリューションはインポートされたテープを空きとしてマークする必要がありますが、有効期限が切れていない実際のテープでも同じです。

2
Massimo

いつものように、少しのスクリプトが必要です...

Import-Module DataProtectionManager

$Server = Get-Content env:computername

Get-DPMLibrary $Server | foreach {
    write-Host
    write-Host Starting inventory for library $_.UserFriendlyName

    $result = Start-DPMLibraryInventory -DPMLibrary $_ -DetailedInventory

    while (!$result.HasCompleted)
    {
        write-Host -NoNewline "."
        sleep 1
    }

    write-Host
    write-Host Inventory complete for library $_.UserFriendlyName

    write-Host Setting tape in library $_.UserFriendlyName as free

    Get-DPMTape $_ | Set-DPMTape -Free

    write-Host Operation completed for library $_.UserFriendlyName
}
2
Massimo

私はまったく同じ問題を抱えていました。問題は、前の回答の上記のスクリプトが、DPMに関連付けられている可能性のあるすべてのデバイスを考慮していないことです。上記のスクリプトの記述方法では、デバイスIDが[0]の最初のデバイスを使用します。 (通常、ライブラリではなくテープドライブに割り当てられます)。したがって、スクリプトで適切なデバイスに対処する必要があります。 Get-DPMLibraryコマンドを発行して、すべてのデバイスのリストを取得できます。

Get-DPMLibrary -DPMServerName "yourservername"

これにより、DPMに関連付けられているすべてのデバイスが、デバイス番号[0]の小さいものから大きいものの順に一覧表示されます。

ライブラリは通常、2番目のエントリとしてリストされます。これは、デバイスが0から始まるため、エントリ1です。

($ DPMLibrary変数のデバイス番号と追加されたコード行3に注意してください)

また、 "Get-DPMTape $ _ | Set-DPMTape -Free"を削除しました。単に機能しませんでした。私はそれを次のものに置き換えました:

$ Tape = Get-Tape -DPMLibrary $ DPMLibrary

セット-DPMTape-テープ$テープ-無料

注:Set-DPMTape -Tape $ Tape-Freeはエラーを生成します。 (心配しないでください)。これは、保護グループにすでに関連付けられているテープと関係があります。それでも、コードはすべてのテープを無料としてマークします。

(したがって、デバイスIDを置き換える以下のスクリプトをコピーするだけです)...お楽しみください:)

Import-Module DataProtectionManager

$Server = Get-Content env:computername

$DPMLibrary = get-dpmlibrary -DPMServerName $Server

Get-DPMLibrary $Server | foreach {
    write-Host
    write-Host Starting inventory for library $DPMLibrary[2]

    $result = Start-DPMLibraryInventory -DPMLibrary $DPMLibrary[2] -DetailedInventory

    while (!$result.HasCompleted)
    {
        write-Host -NoNewline "."
        sleep 1
    }

    write-Host
    write-Host Inventory complete for library $DPMLibrary[2]

    write-Host Setting tape in library $DPMLibrary[2] as free

    $Tape = Get-Tape -DPMLibrary $DPMLibrary
    Set-DPMTape -Tape $Tape -Free

    write-Host Operation completed for library $DPMLibrary[2]
}
0
Marc B

次のスクリプトは、すべてのオンラインテープライブラリを検索し、その中のすべての期限切れテープを空きとしてマークします。 DPMサーバーで実行します。

$sw = [Diagnostics.Stopwatch]::StartNew()
Import-Module DataProtectionManager

$DPMServerName = Get-Content env:computername

if (!(Connect-DPMServer $DPMServerName)) 
{ 
    Write-Error "Failed to connect To DPM server $DPMServerName" 
    exit 1 
} 

$libraryList = @()
$libraryList = Get-DPMLibrary -DPMServerName $DPMServerName | where {$_.Status -eq 'Enabled'}
foreach ($library in $libraryList) 
{ 
    write-Host
    write-Host Starting inventory for library $library.UserFriendlyName
    write-Host "This operation can take a long time, please be patient..."
    $result = Start-DPMLibraryInventory -DPMLibrary $library -DetailedInventory
    write-Host
    write-Host Inventory complete for library $library.UserFriendlyName
    write-Host
    $expiredTapeList = @(Get-Tape -DPMLibrary $library | ? {$_ -is [Microsoft.Internal.EnterpriseStorage.Dls.UI.ObjectModel.LibraryManagement.ArchiveMedia] -and $_.DatasetState -eq "Recyclable"}) 
    if ($expiredTapeList.Length -gt 0) 
    { 
        $expiredTapeList #| Export-Csv -NoTypeInformation -Encoding UTF8 -Path $Exported_csv_path -Force
        Write-Host "Marking $($expiredTapeList.Length) tape(s) as free in $($library.UserFriendlyName)." 
        foreach ($expiredTape_ in $expiredTapeList)
        {
            Write-Host "Setting tape Barcode $($expiredTape_.Barcode) in $($expiredTape_.Location) as free."
            Set-Tape -Tape $expiredTape_ -Free
        }
    } else {Write-Host "No Expired Tapes were Found in $($library.UserFriendlyName)" -ForegroundColor Red}

}
$sw.Stop()
Write-Host "`n Total job running time ...." $sw.Elapsed
0
Alon Or