Счетчик

Поисковый анализ сайта
яндекс.ћетрика
Cервер и сайт запущен 2011.02.01 на Debian

Время от времени ИТ специалисты в форумах жалуются на то, что на диске с базами Exchange заканчивается место и оно  забито странными файлами с расширением LOG. Как-то мне знакомый админ сказал, что место на диске Exchange сервера 2007 закончилось и он все логи удалил, я долго ждал когда он пожалуется на убитый сервер, но этого не произошло… ему просто повезло Или например, как бекапить и что делать с логами Exchange 2007, установленного на Windows Server 2008?  И так, как же работает механизм логов, как бекапить Exchange без ntbackup и специальных программ резервного копирования, а также безопасно ли удалять логи вручную?

          Все знают, что данные в Microsoft Exchange Server 2007 хранятся в почтовых базах и логах.  Папка с файлами данных Exchange выглядит примерно так:

Name                                                                     Length
—-                                                                     ——
E00.chk                                                                       8
E000000001B.log                                                            1024
E00tmp.log                                                                 1024
E00res00002.jrs                                                            1024
E00res00001.jrs                                                            1024
E0000000019.log                                                            1024
E00.log                                                                    1024
E000000001A.log                                                            1024
E0000000018.log                                                            1024
E0000000017.log                                                            1024
tmp.edb                                                                    2064
Mailbox Database.edb                                                      10256
CatalogData-1da9bbdf-30e6-4777-9f5c-…                                       0

          Где Mailbox Database.edb  — база сообщений, а файлы E00000*.log — файлы транзакций. Письмо перед тем, как попасть в базу сначала сохраняется в лог файл, а затем уже Information Store «проигрывает» его в базу.   Информация об уже проигранных логах хранится в файле E00.CHK. Проигранные логи могут быть удалены. Обычно они удаляются с помощью программы резервного копирования Microsoft Exchange и для многих ИТ специалистов это является единственным способом по освобождению места на диске и удалению файлов логов.

Но это не так, существует несколько способов для удаления логов и освобождению места на диске:

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

C:\eseutil /mk «C:\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group\E00.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 Files\Microsoft\Exchange Server\Mailbox\First Storage Group\E00.chk»)[13]

$Bottom_Log_File = $temp.remove($temp.IndexOf(«,»)).remove(0,$temp.IndexOf(«x»)+1)

Get-ChildItem «C:\Program Files\Microsoft\Exchange Server\Mailbox\First 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. Монтирование базы.

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

Еще существуют самописные утилиты для очистки от логов. Более подробно написано здесь.

          На больших и средних предприятиях такими примитивными способами бекапа пользоваться не стоит. Малым предприятиям, установившим Exchange 2007 на Windows  2008 лучше подождать SP2 для Exchange 2007, когда Windows Backup будет делать резервное копирование Exchange 2007.

          Этот пост написан в познавательных целях, прежде чем что-то удалять или запускать скрипт, убедитесь, что Вы понимаете, что делаете.

Добавить комментарий


Защитный код
Обновить