Rexxer

Some tips for me and other

Exchange и куда делось место на диске

В один прекрасный момент сервер Exchange перестал принимать почту. Как оказалось, на диске осталось менее 4Гб свободного места и сработала автоматическая защита. Как первое решение – я отключил автозащиту проверяющую свободное место на диске. Добавил скрипт который уведомляет меня ежедневно о наличии свободного места и размере почтовых ящиков:

Add-PSSnapin Microsoft.Exchange.Management.Powershell.Admin -erroraction silentlyContinue

###Отправка сценария статистики почтовых ящиков

###Сначала, администратор должен изменить значения сообщения следующим образом
$FromAddress = “my@my.com”
$ToAddress = “my@my.com”
$MessageSubject = “Mailbox Size Report”
$MessageBody = “Attached is the current list of mailbox sizes.”
$SendingServer = “SERVER”

###Теперь получить статистику и сохранить ее в текстовом файле
Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft displayName,@{label=”TotalItemSize(KB)”;expression={$_.TotalItemSize.Value.ToKB()}},ItemCount > C:BackupMailboxes.txt

###Создать сообщение и добавить текстовый файл статистики как вкладыш
$systemdrive = new-object System.IO.DriveInfo($Env:SystemDrive)
$MessageBody = echo $systemdrive | findstr TotalFreeSpace
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress,$ToAddress,$MessageSubject,$MessageBody
$Attachment = New-Object Net.Mail.Attachment(“C:BackupMailboxes.txt”)
$SMTPMessage.Attachments.Add($Attachment)

###Отправить сообщение
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)

Далее начал чистить …

Сначала удалил все логи Exchange, затем IIS коих насобиралось 1.5Гб.

Далее проверил размер почтовых ящиков и суммарный объем показал 32Гб.

Далее в папке хранения БД обнаружилось логов транзакций аж на 150Гб. После гугления на предмет: а шо ж будет если их просто грохнуть, нашел замечательные статьи на эту тему. Ссылки ниже, а сейчас просто выдержки из них:

Если все базы данных в группе хранения отключены и находятся в состоянии «чистого» отключения, все файлы журнала можно безопасно удалить без последствий для баз данных. После удаления всех файлов журнала Exchange создаст новую последовательность файлов журнала, начинающуюся с Enn00000001.log. Файлы баз данных можно также переместить на другой сервер или в другую группу хранения с существующими файлами журнала, при этом базы данных подключатся к другому потоку журнала.

  • 1. Главный, он же правильный метод, это своевременное резервное копирование Microsoft Exchange Server с помощью специально предназначенных для этого программ. Они это делают с помощью специального API, простым файловым бекапом копировать базу нельзя, т.к. файлы базы, логов и вспомогательных файлов будут открыты и не скопируются. Исключением является размонтирование базы и ее копирование, как файла. Но это не рекомендуется.
  • 2. Перемещение логов или баз  на другой диск
  • 3. Размонтирование баз и  удаление вручную ВСЕХ логов. Для большей надежности лучше убедиться в корректном закрытии базы(eseutil /MH) и проверить последний сброшенный в базу лог (eseutil /MK)
  • 4. Проверка последнего сброшенного в базу лога (eseutil /MK) и удаление всех ненужных. Последний сброшенный лог можно определить командой:

C:eseutil /mk «C:Program FilesMicrosoftExchange ServerMailboxFirst Storage GroupE00.chk» |find » Checkpoint:»

Checkpoint: (0?21,8,16)

0?21 означает, что файлы E0000000020.log и старше, т.е. E0000000019.log, можно спокойно удалить.

Что собственно и  делает программа резервного копирования. Full backup делает бекап базы+ бекап логов, потом ненужные логи удаляет.  Incremental бекап тупо копирует логи с момента Full backup и удаляет проигранные в базу.

Если лень удалять файлы вручную, то можно использовать скрипт на PowerShell.

$temp = (eseutil /mk «C:Program FilesMicrosoftExchange ServerMailboxFirst Storage GroupE00.chk»)[13]


$Bottom_Log_File = $temp.remove($temp.IndexOf(«,»)).remove(0,$temp.IndexOf(«x»)+1)
Get-ChildItem «C:Program FilesMicrosoftExchange ServerMailboxFirst Storage Group» | Where-Object { $_.Name.Length -eq 15 -AND $_.Name -like «E00*.log» -AND $_.Name.Substring(3+8-$Bottom_Log_File.length,$Bottom_Log_File.length) -lt $Bottom_Log_File } | foreach($_) {remove-item $_.fullname}

Для запуска скрипта по времени можно вставить конструкцию powershell.exe -noexit D:Purge_Exchange_T_Logs_3rdSGroup_LCR.ps1 в Tasks Scheduler.

Скажем в малююююююсеньких компаниях вполне возможен следующий сценарий бекапа:

1. Размонтирование хранилища
2. Копирование файла базы сообщений
3. Удаление всех логов
4. Монтирование базы.

Если по ночам сервер не используется и базы можно размонтировать, то чем плохо? Бесплатно и быстро.

Ссылки:

http://technet.microsoft.com/ru-ru/library/bb331951%28EXCHG.80%29.aspx

http://www.exchangerus.ru/2009/07/01/%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2-%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9-%D0%B2-microsoft-exchange-server-2007/

http://www.winblog.ru/2006/11/10/10110604.html

One thought on “Exchange и куда делось место на диске

Leave a Reply