System Center Data Protection Manager

Migrate DPM Datasource, einfach und schnell mittels GUI, Script in Version 1.1 verfügbar

Ich habe mein “Migrate DPM Datasource” Script aktualisiert und um einige Funktionen erweitert. Nicht nur ein paar Fehlerbehebungen, nein auch ein paar neue Funktionen sind hinzugekommen. Aktuell war es möglich eine einzelne Datasource auf eine Disk zu verschieben oder alle Datasources einer Disk auf eine andere Disk zu verschieben. 2 Neue Optionen sind dazugekommen. Ihr könnt eine gesamte Protectiongroup auf eine andere Disk verschieben, oder eine Disk Freiräumen. Der Unterschied hier ist, ihr wählt die Disk und mein Script entscheidet bei jeder Datasource welche Disk verwendet wird, und zwar diese die am meisten Speicherplatz frei hat.

Das Script

Gleich zu Beginn prüfen wir die PowerShell Version. Voraussetzung ist die PowerShell V3 da ansonsten die GUI nicht funktioniert. Download der V3 Version: http://www.microsoft.com/en-us/download/details.aspx?id=34595 Danach importieren wir die DataProtection CMDlets und erfragen den Namen unseres DPM Servers.

#Check PowerShell Version
$PSPre="3"

if ($Host.Version.Major -ge $PSPre) {
    Write-Host "Your PowerShell Version is OK"
    } else {
    Write-Host "Wrong PS Version, you have" $Host.Version.Major
    Write-Host "Download PowerShell V3: http://www.microsoft.com/en-us/download/details.aspx?id=34595"
    Write-Host "Press Key to exit...."
    $x=$HOST.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
    exit
    }

#Import Modules
Import-Module DataProtectionManager
#Ask for DPM Server
$DPMServer=Read-Host "DPM ServerName"

image


Jetzt kommen unsere neuen Funktionen. Einmal habe ich das verschieben der Datasources in eine Function gepackt und die zweite ist für das Freiräumen einer Disk zuständig.

#Functions
#Function Migrate-DS
Function Migrate-DS ($Source, $Destination, $DPMServer)
{
    if ($Source.State -eq "Valid")
    {
        Write-Host "started a Migration of Datasource: " $Source.Name " to Disk Number " $Destination.NtDiskID
        MigrateDatasourceDataFromDPM.ps1 -DPMServerName $DPMServer -Source $Source -Destination $Destination -verbose
    }
    else
    {
        Write-Host "Datasource "$Source.Name "is not vaild and cannot be moved"
    }
}


#function, Free Up a disk
Function FreeUp-Disk ($Source, $DPMServer) 
{
    foreach ($Entry in $Source.PgMember.DatasourceID.Guid)
    {
        $DiskDatasources= Get-DPMDatasource | where {$_.DatasourceID -match $Entry}
        $Destination=Get-DPMDisk -DPMServerName $DPMServer | where {$_.IsInStoragePool -eq $true -and $_.NTdiskID -ne $Source.NTdiskID} | Sort-Object UnallocatedSpace -Descending | Select-Object -First 1
        $Destination.NTdiskID
        #sleep -Seconds 5
        Migrate-DS $DiskDatasources $Destination $DPMServer
        

    }

    
}

Jetzt kommt unsere GUI Zuerst werdet ihr gefragt was ihr machen wollt.

Migrate SCDPM Disk

Je nach Auswahl folgen ein oder mehrere Fenster die euch durch die Migration leiten.

Migrate SCDPM Disk

Migrate SCDPM Disk

Migrate SCDPM Disk

Zum Schluss führen wir die Aktion aus.

Migrate SCDPM Disk

#GUI to choose what to move
$title = "What do you like to move"
$message = "Want to move a whole Disk or only one Datasource?"
$Disk = New-Object System.Management.Automation.Host.ChoiceDescription "&Complete Disk", `
    "Want to move all Datasources from one Disk"
$Datasource = New-Object System.Management.Automation.Host.ChoiceDescription "&Datasources", `
    "Want to move one ore more Datasources"
$Protectiongroup = New-Object System.Management.Automation.Host.ChoiceDescription "&Protectiongroups", `
    "Want to move one or more Protectiongroups"
$FreeADisk = New-Object System.Management.Automation.Host.ChoiceDescription "&Free a Disk", `
    "Want to free up a whole Disk"
$options = [System.Management.Automation.Host.ChoiceDescription[]]($Disk, $Datasource,$Protectiongroup, $FreeADisk)
$result = $host.ui.PromptForChoice($title, $message, $options, 1)

#Choose Disk or DS
if ($Result -eq "0") 
{
    Write-Host "Moving all Datasources of one Disk"
    $Source=Get-DPMDisk -DPMServerName $DPMServer | where {$_.IsInStoragePool -eq $true} | Out-GridView -Title "Choose Source Disk" -PassThru
    $Destination=Get-DPMDisk -DPMServerName $DPMServer | where {$_.IsInStoragePool -eq $true}  | Out-GridView -Title "Choose Destination Disk" -PassThru
    Migrate-DS $Source $Destination $DPMServer
}
elseif ($Result -eq "1")
{
    Write-Host "Moving one Datasource"
    $PG = Get-ProtectionGroup -DPMServerName $DPMServer | Out-GridView -Title "Choose Protectiongroup" -PassThru
    $Source = Get-DPMDatasource $PG  | Out-GridView -Title "Chosse Datasource to Move" -PassThru
    $Destination=Get-DPMDisk -DPMServerName $DPMServer | where {$_.IsInStoragePool -eq $true}  | Out-GridView -Title "Choose Destination Disk" -PassThru
    
    Migrate-DS $Source $Destination $DPMServer
}
elseif ($Result -eq "2")
{
    Write-Host "Free up a whole Disk"
    $Source=Get-DPMDisk -DPMServerName $DPMServer | where {$_.IsInStoragePool -eq $true} | Out-GridView -Title "Choose Source Disk" -PassThru
    FreeUp-Disk $Source $DPMServer
}

TechNet Gallery Download

Download auf der TechNet Gallery: https://gallery.technet.microsoft.com/Migrate-DPM-Disk-or-dea8d4e9

Solltet ihr Fragen, Wünsche oder Probleme mit dem Script haben, schreibt mir ein Kommentar

Alle meine TechNet Gallery Downloads findet ihr hier: 1jrYQoA

BITTE BEWERTET MEINE DOWNLOADS IN DER TECHNET GALLERY UND SAGT MIR WAS IHR EUCH VON DER NÄCHSTEN VERSION WÜNSCHT.

Michael Seidl aka Techguy

8 thoughts on “Migrate DPM Datasource, einfach und schnell mittels GUI, Script in Version 1.1 verfügbar”

  1. Geht aber offenbar erst ab DPM2012, zumindest findet er bei mir bei DPM2010 das DataProtectionManage.ps1 nicht…

    Oder hab’ ich was übersehn?

  2. Hallo Peter,
    SCDPM 2010 hatte noch keine PowerShell Modul für den Import, das musste man noch das PS File importieren, das wird dein Problem sein.
    Aber auch danach bin ich mir nicht sicher obs funktioniert, da ich es nie getestet habe.
    Also auch aus anderen Gründen würde ich stark auf ein Update auf SCDPM 2012 R2 verweisen, leider.

  3. Hallo MIchael,
    kann ich damit auch die große Anzahl an Extents auf einer vollen disk durch verschieben (Free a disk) reduzieren, sodass die Volumes zusammengefaßt werden.

    Danke
    Christoph

  4. Hallo,
    dieses Script verschiebt nur die Volumes der Datasource, somit leider nein.
    Free a Disk, bedeutet, alle Datasources einer Disk auf die anderen aufzuteilen, und somit die Disk frei zu machen

  5. Hallo Michael,

    auf unserem DPM2012R2 auf Server 2008R2 bekomme ich die Meldung dass das Script nicht digital signiert sein und nicht ausgeführt werden kann.
    Gibt es dazu eine Lösung.
    Muss 18 TB verschieben da uns der Platz ausgeht.

    Viele Grüße aus Deutschland
    Holger

  6. Hallo, auf eurem SCDPM Server ist das ausführen von Powershell deaktiviert. Einfach ein PowerShell Fenster als Admin starten und mal “set-executionpolicy unrestricted” ausführen, danach sollte das klappen.

  7. Hallo, perfekt. Hätt ich selbst drauf kommen können.
    Gibt es eigentlich Erfahrungswerte wie lange das verschieben dauert?
    Habe alle Raids mit SAS 6gb angebunden.

  8. Hallo,
    das kommt auf deine Beibehaltsdauer an. Die Recoverypoints werden ja nicht verschoben, es wird nur das zukünftige Ziel auf eine Disk gelegt. Die alten RP’s laufen dann, je nach Einstellung nach einigen Tage/Wochen ab und geben somit den Plattenplatz frei.

Leave a Comment

Your email address will not be published. Required fields are marked *

*