System Center Data Protection Manager 2012を実行しているバックアップサーバーがあり、いくつかのテープドライブに接続されています(ライブラリなし)。もちろん、テープもいくつか持っています。テープの回転は手動です。
テープは以前、DPM自体(ただしサーバーは完全に再構築されています)および他のバックアップソフトウェアによって使用されていました。彼らは空っぽではありません。ただし、DPMが認識している、または保持したいデータは含まれていないため、forcefreetape.ps1
を実行しなくても空きとしてマークできます。
テープをドライブに配置するときは、インベントリを実行し、インポートされたテープとして認識してから、空きとしてマークする必要があります。そうしないと、DPMは単にそれを使用することを拒否します。
インポートしたテープを自動的に無料として扱うようにDPMに指示するにはどうすればよいですか?そしてもちろん、私はそうしますnot有効期限が切れる前にドライブに入れられた場合、実際のバックアップテープを再利用したいので、ソリューションはインポートされたテープを空きとしてマークする必要がありますが、有効期限が切れていない実際のテープでも同じです。
いつものように、少しのスクリプトが必要です...
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
}
私はまったく同じ問題を抱えていました。問題は、前の回答の上記のスクリプトが、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]
}
次のスクリプトは、すべてのオンラインテープライブラリを検索し、その中のすべての期限切れテープを空きとしてマークします。 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