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.winblog.ru/2006/11/10/10110604.html
Автоматизация backup-restore с помощью GHOST FreeBSD – резервирование канала Internet
One thought on “Exchange и куда делось место на диске”
Leave a Reply
You must be logged in to post a comment.
[…] Первым делом занялись оптимизацией и зачисткой…. Вот здесь есть интересная статья на эту тему: http://rexxer.kharkov.ru/2010/06/18/exchange-i-kuda-delos-mesto-na-diske/ […]