Es gab vom Backup-Team eine Anforderung, den DeDup-Speicher aufzuräumen, sofern der freie Speicher auf dessen Partition unter 10% sinkt.
Das folgende Skript kümmert sich um genau dieses Thema. Aber Vorsicht! Es kann durchhaus über einen Tag dauern bis es durch ist, je nach Größe des Speichers, Geschwindigkeit der Platten, etc… Darum am besten nicht automatisch laufen lassen, sondern händisch nach Bedarf ausführen.
Warum manche Anweisungen so sind wie sie sind, kann ich nicht sagen, hier habe ich mich voll und ganz auf die Anweisungen des Backup-Teams verlassen:
# Eine Funktion die mir den freien Plattenplatz in Prozent für das Laufwerk D zurückgibt. # Auf D war der B2D- und DeDup Store und muss ggf. angepasst werden function DiskSpaceD(){ $Disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='D:'" | Select-Object Size,FreeSpace $FreeDiskSpaceProzent = $Disk.FreeSpace / $Disk.Size * 100 return $FreeDiskSpaceProzent } # Datum und LogFile definieren $Datum = (Get-Date).ToString("yyyyMMdd_HHmmss") $LogFile = "C:\Skripte\Logs\DeDup-CleanUp_$Datum.log" # Prozent freuen Speicher auslesen $DiskSpace = DiskSpaceD # Wenn es weniger als 10% freier Speicher ist if ([int]$DiskSpace -lt 10){ # Da das Skript lokal auf dem BE-Server läuft, ist der Hostname "hostname" $hostname = Hostname $MailFrom = "$hostname@domain.de" $MailTo = "rcpt@domain.de" $MailSubject = "Backup Exec: CompactStart gestartet" $MailSMTPServer = "192.168.0.100" # Funktion die ProcessQueue 2 Mal startet function 2xProcessqueue(){ & 'C:\Program Files\Symantec\Backup Exec\crcontrol.exe' --processqueue sleep(5) & 'C:\Program Files\Symantec\Backup Exec\crcontrol.exe' --processqueue sleep(5) # Solange er läuft und nicht beides auf "no" steht, wird weitergemacht while (1){ $query = & 'C:\Program Files\Symantec\Backup Exec\crcontrol.exe' --processqueueinfo $busystate = $query[0] -Replace "Busy : " $pendingstate = $query[1] -Replace "Pending: " (Get-Date) | Out-File $LogFile -Append echo $query | Out-File $LogFile -Append echo "" | Out-File $LogFile -Append if (($busystate -eq "no") -and ($pendingstate -eq "no")){ (Get-Date) | Out-File $LogFile -Append echo "Beides wieder auf NO" | Out-File $LogFile -Append break; } sleep(60) } } # Funktion die CRCollect einmal startet function 1xCRCollect(){ Start-Process "C:\Program Files\Symantec\Backup Exec\crcollect.exe" -ArgumentList "-v -m +1,+2" -NoNewWindow -Wait sleep(5) } # Funktion die CompactStart einmal startet function 1xCompactStart(){ Start-Process "C:\Program Files\Symantec\Backup Exec\crcontrol.exe" -ArgumentList "--compactstart" -NoNewWindow -Wait sleep(5) # Solange er läuft und er nicht auf "no" steht, wird weitergemacht while (1){ $query = & 'C:\Program Files\Symantec\Backup Exec\crcontrol.exe' --compactstate $state = ($query[1] -split ": ")[1] (Get-Date) | Out-File $LogFile -Append echo $query[1] | Out-File $LogFile -Append echo "" | Out-File $LogFile -Append if ($state -eq "No"){ (Get-Date) | Out-File $LogFile -Append echo "Fertig!" | Out-File $LogFile -Append break; } sleep(60) } } # Mail-Log zusammenbauen und Live-Log schreiben $Mail = @() echo "DeDupe Bereinigungs-Script gestartet." | Out-File $LogFile -Append $Mail += "DeDupe Bereinigungs-Script gestartet." (Get-Date) | Out-File $LogFile -Append $Mail += (Get-Date) $Mail += "" # Freien Plattenplatz vor dem Start auslesen: echo "Plattenplatz vor Reinigung:" | Out-File $LogFile -Append $Mail += "Plattenplatz vor Reinigung:" $PlattenplatzVorStart = DiskSpaceD echo "$PlattenplatzVorStart Prozent freier Speicher." | Out-File $LogFile -Append $Mail += "$PlattenplatzVorStart Prozent freier Speicher." $Mail += "" ############################################################################################## # Folgende Anforderung kam vom Backup-Team # WARUM es mehrere Durchläufe für die ProcessQueue, etc. geben musste, kann ich nicht sagen. ############################################################################################## # Erster Durchlauf echo "Erster Durchlauf:" | Out-File $LogFile -Append $Mail += "Erster Durchlauf gestartet um:" $Mail += (Get-Date) 2xProcessqueue $Mail += "Erster Durchlauf beendet um:" $Mail += (Get-Date) $Mail += "" # Zweiter Durchlauf echo "Zweiter Durchlauf:" | Out-File $LogFile -Append $Mail += "Zweiter Durchlauf gestartet um:" $Mail += (Get-Date) 2xProcessqueue $Mail += "Zweiter Durchlauf beendet um:" $Mail += (Get-Date) $Mail += "" # Einmal CR-Collect echo "Einmal CR-Collect:" | Out-File $LogFile -Append $Mail += "CR-Collect gestartet um:" $Mail += (Get-Date) 1xCRCollect $Mail += "CR-Collect beendet um:" $Mail += (Get-Date) $Mail += "" # Dritter Durchlauf echo "Dritter Durchlauf:" | Out-File $LogFile -Append $Mail += "Dritter Durchlauf gestartet um:" $Mail += (Get-Date) 2xProcessqueue $Mail += "Dritter Durchlauf beendet um:" $Mail += (Get-Date) $Mail += "" # Vierter Durchlauf echo "Vierter Durchlauf:" | Out-File $LogFile -Append $Mail += "Vierter Durchlauf gestartet um:" $Mail += (Get-Date) 2xProcessqueue $Mail += "Vierter Durchlauf beendet um:" $Mail += (Get-Date) $Mail += "" # CompactStart echo "CompactStart:" | Out-File $LogFile -Append $Mail += "CompactStart gestartet um:" $Mail += (Get-Date) 1xCompactStart $Mail += "CompactStart beendet um:" $Mail += (Get-Date) $Mail += "" # Freien Plattenplatz Beendigung auslesen: $Mail += "Plattenplatz nach Reinigung:" $PlattenplatzNachStart = DiskSpaceD $Mail += "$PlattenplatzNachStart Prozent freier Speicher." echo "Plattenplatz nach Reinigung:" | Out-File $LogFile -Append echo "$PlattenplatzNachStart Prozent freier Speicher." | Out-File $LogFile -Append $MailBody = $Mail | Out-String $MailBody | Out-File $LogFile -Append # E-Mail schicken Send-MailMessage -From $MailFrom -To $MailTo -Subject $MailSubject -Body $MailBody -SmtpServer $MailSMTPServer # Der Plattenplatz ist ok, es muss nichts gemacht werden }else{ echo "Plattenplatz bei $DiskSpace Prozent freiem Speicher." | Out-File $LogFile -Append }