Réallocation disque automatique sur DPM 2007

Une des grandes nouveautés de DPM 2010 est l’autogrowth sur l’espace alloué pour les groupes de protection.

Cela permet d’étendre l’espace disque utilisable par un groupe de protection lorsque celui ci arrive à saturation.

Sur DPM 2007, cette fonctionnalités n’était pas disponible, et soit la manipulation se faisait à la main, ce qui peut être vite difficile dans le cas d’une grosse infrastructure, soit en Powershell.

Ce script peut être planifié une à plusieurs fois par jour si vos groupes de protection évoluent rapidement en terme de stockage.

Attention toutefois car la réallocation d’espace disque sur DPM est assez consommateur (aussi du à l’utilisation des disques dynamiques Windows) !

Voici le script PS que nous utilisons :

#
# Script d'allocation automatique d'espace
# pour les datasources DPM
#
# Changelog :
# 12/05/2010 : Correction du problème d'affichage d'espace libre
#

Function Send-SMTPmail($to, $from, $subject, $smtpserver, $body)
{
	$mailer = new-object Net.Mail.SMTPclient($smtpserver)
	$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
#	$msg.IsBodyHTML = $true
	$mailer.send($msg)
}

# Déclaration des variables
$seuilReplica = 3GB
$seuilRecoveryPoint = 3GB
$palierReplica = 15GB
$palierRecoveryPoint = 15GB
$nomServeurDPM = &"hostname"
$serveurSMTP = "xxxx"
$emailFrom = administrator@xxx
$emailTo = administrator@xxx
$corpsMail = ""
$sujetMail = "[DPM] Rapport d'allocation automatique"

# cmdlet permettant de se connecter au serveur DPM
$serveurDPM = Connect-DPMServer $nomServeurDPM -ErrorAction SilentlyContinue

# Vérification de la connexion au serveur DPM
if(!$serveurDPM)
{
	$corpsMail += "Connexion au serveur $nomServeurDPM impossible"
	Send-SMTPmail -to $emailTo -from $emailFrom -subject "$sujetMail" -smtpserver $serveurSMTP -body "$corpsMail"
	exit 1
}

# Récupération de la liste des Protection Group
$listeProtectionGroup = @(Get-ProtectionGroup $nomServeurDPM)

# Parcours de la liste des Protection Group
foreach($protectionGroup in $listeProtectionGroup)
{
	# Récupère le Protection Group en version modifiable
	$modifiableProtectionGroup = Get-ModifiableProtectionGroup $protectionGroup

	# Récupère la liste des sources de données du Protection Group en version modifiable
	$listeDatasource = @(Get-Datasource $modifiableProtectionGroup)

	# Parcours des datasource un par un
	foreach ($datasource in $listeDatasource)
	{
		#
		# Vérification de l'espace disponible au niveau du replica
		#
		if (($datasource.ReplicaSize - $datasource.ReplicaUsedSpace) -lt $seuilReplica)
		{
			# Augmentation de l'allocation disque du replica
			$corpsMail += Get-Date -uformat "%Y/%m/%d"
			$corpsMail = $corpsMail + " - Augmentation du Replica " + $datasource.Name + " sur le Protection Group " + $datasource.ProductionServerName + "`n"
			$nouvelleReplicaSize = $datasource.ReplicaSize + $palierReplica
			Set-DatasourceDiskAllocation -Manual -Datasource $datasource -ProtectionGroup $modifiableProtectionGroup -ReplicaArea $nouvelleReplicaSize
		}
		#else
		#{
		#	# Rien à faire
		#	$espaceLibreReplica = $datasource.ReplicaSize - $datasource.ReplicaUsedSpace
		#	$espaceLibreReplica /= 1MB
		#	Write-Host "Le replica de $($datasource.Name) sur $($datasource.ProductionServerName) n'a pas besoin d'etre agrandie et possède $espaceLibreReplica MB de libre"
		#}

		#
		# Vérification de l'espace disponible au niveau du recovery point
		#
		if (($datasource.ShadowCopyAreaSize - $datasource.ShadowCopyUsedSpace) -lt $seuilRecoveryPoint)
		{
			# Augmentation de l'allocation disque du recovery point
			$corpsMail += Get-Date -uformat "%Y/%m/%d"
			$corpsMail = $corpsMail + " - Augmentation du Recovery Point " + $datasource.Name + " sur le Protection Group " + $datasource.ProductionServerName + "`n"
			$nouvelleRecoveryPointSize = $datasource.ShadowCopyAreaSize + $palierRecoveryPoint
			Set-DatasourceDiskAllocation -Manual -Datasource $datasource -ProtectionGroup $modifiableProtectionGroup -ShadowCopyArea $nouvelleRecoveryPointSize
		}
		#else
		#{
		#	# Rien à faire
		#	$espaceLibreRecoveryPoint = $datasource.ShadowCopyAreaSize - $datasource.ShadowCopyUsedSpace
		#	$espaceLibreRecoveryPoint /= 1MB
		#	Write-Host "Le Recovery Point de $($datasource.Name) sur $($datasource.ProductionServerName) n'a pas besoin d'etre agrandi et possède $espaceLibreRecoveryPoint MB de libre`n"
		#}
	}

	# Application des modification effectuées ci-dessus
	Set-ProtectionGroup $modifiableProtectionGroup
}

# Récupération de l'espace disque disponible
$espaceDisqueDispo = Get-DPMDisk -DPMServerName $nomServeurDPM

# Envoi du mail de rapport
if($corpsMail -ne "")
{
	$corpsMail += "`n`nEspace Disque disponible : " + $espaceDisqueDispo.UnallocatedSpace/1GB + " Go"
	Send-SMTPmail -to $emailTo -from $emailFrom -subject "$sujetMail" -smtpserver $serveurSMTP -body "$corpsMail"
}

# Déconnexion du serveur DPM
Disconnect-DPMServer $nomServeurDPM

Pour télécharger le script, veuillez cliquez ici : [download id= »1″]

NB : pensez à renommer le script en .ps1

Laisser un commentaire

Required fields are marked *.