У меня есть резервный сервер, на котором запущен System Center Data Protection Manager 2012, подключенный к паре ленточных накопителей (без библиотеки). Еще у меня есть, конечно, кассеты. Вращение ленты осуществляется вручную.
Лента уже использовалась самим DPM (но сервер был полностью перестроен) и другими программами резервного копирования; они не пустые. Но они не содержат данных, которые DPM знает и / или хочет сохранить, поэтому их можно пометить как бесплатные без необходимости запускать forcefreetape.ps1
.
Когда лента вставляется в накопитель, необходимо выполнить инвентаризацию, распознать ее как импортированную и затем пометить как свободную; иначе DPM просто откажется его использовать.
Как я могу указать DPM, чтобы эти импортированные ленты автоматически считались бесплатными? И, конечно же, я не хотите повторно использовать настоящие ленты с резервными копиями, если они случайно оказались на дисках до истечения срока их годности, поэтому решение должно помечать импортированные ленты как бесплатные, но не должно делать то же самое с настоящими лентами с непрочным сроком годности.
Как обычно, нужно немного написать сценарий ...
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. Как написан вышеупомянутый сценарий, он берет самое первое устройство с идентификатором [0]. (Которая обычно назначается ленточному накопителю, а не библиотеке). Таким образом, вы должны указать правильное устройство в сценарии. Вы можете выполнить команду Get-DPMLibrary, чтобы получить список всех ваших устройств.
Get-DPMLibrary -DPMServerName "имя вашего сервера"
Это перечислит все устройства, связанные с DPM, в порядке от наименьшего номера устройства [0] до наибольшего.
Библиотека обычно указывается как вторая запись, которая является записью 1, поскольку устройства начинаются с 0 ....
(Обратите внимание на номер устройства и добавленную строку кода 3 для переменной $ DPMLibrary)
Я также удалил "Get-DPMTape $ _ | Set-DPMTape -Free«Это просто не сработало! Я заменил это на:
$ Tape = Get-Tape -DPMLibrary $ DPMLibrary
Set-DPMTape -Tape $ Tape -Free
Примечание: 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