Назад | Перейти на главную страницу

Как автоматически пометить ленту как свободную в DPM 2012?

У меня есть резервный сервер, на котором запущен 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