1.- Para los servicios CIFS. Muchas veces el resync falla porque hay ficheros abiertos en los volúmenes.
2.- Busca los snapmirror que no se encuentren en la lista negra (te pueden interesar excepciones)
3.- Verifica que está en estado 'broken-off' e ignora el resto.
4.- Resyncroniza las relaciones de snapmirror que cumplen las condiciones.
5.- Arranca nuevamente los servicio CIFS.
¡OJO! si el filer de destino tiene algún volumen en producción, al parar CIFS se pueden ver afectado los ficheros abiertos que no tienen nada que ver con el test de DR. Hay que tener esto en cuenta antes de ejecutarlo en un entorno de trabajo.
# Inicio del script
$allNetAPP = @("NetappDR01", "NetappDR02" ) # <--- controladores_de_dominio_o_direccion_IP
@("vol0", "vol_test") # <--- excluidos_del_script
########################################################################################################################
$password = "76492d1116743f0423413b16050a5345MgB8AGgAbwA2AEwAWgBBAGIAcABQADEALwAyADYAbABuAEgAOQBGADYAcwBqAFEAPQA9AHwAOQBmADUANwAyADkAOABmAGEANgA5AGYAZAA1ADcANAA5ADkANQAzADEAMABkAGYANwA0AGEAYwBkADIAMAA5AGUAYQA2ADMANgBiAGYAYwA0AGIANwA0ADkAZAA3ADgANgA4AGUAZABiADIAYwBhADAAZgBiAGEAMwA5AGMAZQA="
$key = "155 43 100 117 110 219 64 220 246 113 218 12 7 233 143 111 25 241 206 16 209 132 60 235 108 215 245 140 103 215 23 210"
$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(" "))
$cred = New-Object system.Management.Automation.PSCredential("root", $passwordSecure)
########################################################################################################################
Import-module DataONTAP
Write-Host "#########################################################################"
Write-Host "#########################################################################"
Write-Host "## ##"
Write-Host "## Este proceso va a resincronizar los snapmirrors rotos. ##"
Write-Host "## ##"
Write-Host "## Pulsar
Write-Host "## ##"
Write-Host "#########################################################################"
Write-Host "#########################################################################"
foreach ($thisNetAPP in $allNetAPP)
{
Connect-NaController $thisNetAPP -Credential $cred |Out-null
$AllSnapMirrors = Get-NaSnapMirror
#Parando los servicios CIFS antes de resincronizar
Write-Host "Parando CIFS ......."
Invoke-NaSsh -Name $thisNetapp -Command 'cifs terminate -t 0' -Credential $Cred
Write-Host "Netapp: CIFS parado en: " $thisNetapp
foreach ($ThisSnapMirror in $AllSnapMirrors)
{
$Destination = $ThisSnapMirror.destination.split(":")
$State = $ThisSnapMirror.state
#$DestinationFiler = $Destination[0]
$DestinationVolName = $Destination[1]
#Si el volumen no está en la lista negra entonces...
if (($volUnused -NotContains $DetinationVolName) -and ($State -eq "broken-off"))
{
Write-Host "Estado actual ....... " $State
Write-Host "Resincronizando .... " $DestinationVolName
Invoke-NaSnapmirrorResync $DestinationVolName -Confirm:$false
Start-Sleep -s 1
}
}
}
Invoke-NaSsh -Name $thisNetapp -Command 'cifs restart' -Credential $Cred
Write-Host "Netapp: CIFS arrancado en : " $thisNetapp
Write-Host "#####################################################"
Write-Host "## ##"
Write-Host "## Los snapmirrors ya se han resincronizado ##"
Write-Host "## ##"
Write-Host "#####################################################"
$SnapMirror = Get-NaSnapmirror
$SnapMirror | format-table |Out-Default
Start-Sleep -s 10
#Fin del script