Резервные копии, бэкапы, архивы и прочая лишняя информация рано или поздно забивает хранилище под завязку и в итоге у нас не останется свободного места под резервные копии важной для фирмы информации. И как говорится, если не успел проследить, то остался без бэкапа, а он как раз нам нужен позарез. Конечно же можно придумать целую систему и автоматизировать сей процесс, что будет работать как часики, но лично я не стал так сильно заморачиваться, а выбрал как всегда золотую середину.
Под золотой серединой я имею в виду приблизительный расчёт количества бэкапов с ёмкостью хранилища так, чтобы всегда было половина хранилища свободна. Но это дело вкуса - каждый может придумат свой план резервного копирования и сместить планку свободного места на хранилище в любую сторону. Многое будет зависеть от потребностей организации, в которой Вы работаете.
В итоге что я сделал, чтобы освободить себя от необходимости постоянного контроля за резервными копиями:
- Написал скрипт, который отслеживает устаревшие резервные копии и убирает их с хранилища. При этом шлёт мне письмо на почту о проделанной работе.
- Немного понаблюдал за ходом резервного копирования и тем самым выявил ту золотую середину, то есть то количество бэкапов, которые может одновременно храниться на хранилище.
Ну и сам скрипт DeleteOldArhives.vbs:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Скрипт, который избавляет админа от процесса слежения за бэкапами '
' Этот скрипт следит за давностью архивов и автоматически удаляет '
' просроченные архивы. Также предусмотрен механизм отчётности. '
' Скрипт написал Анчуров Олег Владимирович в 2014 году. Версия 1. '
' Скрипт DeleteOldArhives.vbs '
' Сайт http://ithelp.moy.su '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
on error resume next
Dim Fso, f, f1, fc, fn, a
Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Arhiv1',..., ArhiveN - правим ручками под свои нужды
Dim kA1',..., kAn - правим ручками под свои нужды
Arhiv1 = ""
'... - правим ручками под свои нужды
'ArhivN = "" - правим ручками под свои нужды
kA1 = 0
Set f = fso.GetFolder("\\BackupSrv\Arhiv1") 'Путь к архиву правим под свой
Set fc = f.Files
For Each f1 in fc
a = DateDiff("d", f1.DateLastModified, Now)
If a > 90 Then 'Если возраст архива больше 90 дней, то архив на хутор бабочек ловить!
fn = f1.name
f1.Delete
kA1 = kA1 + 1
Arhiv = Arhiv + "Удалён архив: " & fn & " - давность архива в днях: " & CStr(a) & chr(13) & chr(10)
End If
Next
Arhiv1 = Arhiv1 + "Всего удалено: " & CStr(kA1) & chr(13) & chr(10) & chr(13) & chr(10)
'Если несколько папок с архивами, то клонируем код под каждую папку с архивами по аналогии
'...
'Set f = fso.GetFolder("\\BackupSrv\ArhivN")
'Set fc = f.Files
'For Each f1 in fc
'a = DateDiff("d", f1.DateLastModified, Now)
'If a > 90 Then 'Если возраст архива больше 90 дней, то архив нах!
' fn = f1.name
' f1.Delete
' kAn = kAn + 1
' ArhivN = ArhivN + "Удалён архив: " & fn & " - давность архива в днях: " & CStr(a) & chr(13) & chr(10)
'End If
'Next
'ArhivN = ArhivN + "Всего удалено: " & CStr(kAn) & chr(13) & chr(10) & chr(13) & chr(10)
'Если есть, что рассказать админу, то шлём ему весточку по почте
If kA1 > 0 then 'Если проверяем несколько папок с архивами, то условие такого вида: (kA1 + ... + kAn) > 0
Dim objEmail, MSG
MSG = "ПРОТОКОЛ РАБОТЫ СКРИПТА, АВТОМАТИЧЕСКИ УБИРАЮЩЕГО СТАРЫЕ АРХИВЫ БЭКАПОВ:" + chr(13) + chr(10) + chr(13) + chr(10)
If kA1 > 0 then
MSG = MSG + "Протокол удаления архивов бэкапов:" + chr(13) + chr(10)
MSG = MSG + Arhiv1
End If
'Если несколько папок с архивами, то клонируем код под каждую папку с архивами по аналогии
'...
'If kAn > 0 then
' MSG = MSG + "Протокол удаления архивов бэкапов:" + chr(13) + chr(10)
' MSG = MSG + ArhivN
'End If
MSG = MSG + "Всего удалено архивов: " + CStr(kA) + chr(13) + chr(10)+ chr(13) + chr(10)
MSG = MSG + "Время/дата отработки скрипта: " + CStr(Time) + "/" + CStr(Date) + chr(13) + chr(10)
Const EmailFrom = "bot@superfirma.ru" ' от кого будет отправляться e-mail
Const EmailPassword = "SuperPuperPassword" ' пароль от e-mail отправителя
Const strSmtpServer = "smtp.superfirma.ru" ' smtp сервер
Const EmailTo = "admin@superfirma.ru" ' Кому будет отправляться e-mail
Set objEmail = CreateObject("CDO.Message")
objEmail.From = EmailFrom
objEmail.To = EmailTo
objEmail.Subject = "Отчёт по работе скрипта DeleteOldArhive" ' Тема письма
objEmail.Textbody = MSG
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailFrom
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
Set objEmail = Nothing ' Чистим память.
End If
Set Fso = Nothing ' Чистим память.
Ну и на последок маленькое примечание.
Для данного скрипта я создал еженедельное задание - раз в неделю в воскресенье скрипт автоматически запускается этим заданием.
Жизнь админа должна быть проще!