Уменьшение баз почтовых ящиков exchange
На сервере под управлением Microsoft Windows Server 2003 R2 ×64 работает Microsoft Exchange 2007 ×64. Конечно – связка уже устаревшая, но вполне себе ещё дееспособная. После долгого срока службы и масштабной реорганизации компании встал вопрос выполнения сжатия (уменьшения, дефрагментации) базы данных почтовых ящиков. Об этом – ниже… |
Сперва удалим более не нужные почтовые ящики уволенных сотрудников. Для этого в командной консоли Exchange дадим команду на обновление списка отключенных почтовых ящиков:
Clean-MailboxDatabase -Identity <database>
- где <database>
– имя базы (или баз, если у вас их несколько), в которых надо вести поиск отключенных почтовых ящиков.
Следующей командой мы можем получить информацию обо всех отключенных почтовых ящиках:
Get-MailboxStatistics | where-object { $_.DisconnectDate -ne $null } | Select DisplayName,MailboxGuid,Database
Следующей командой можно удалить отдельный почтовый ящик:
Remove-Mailbox -Database <database> -StoreMailboxIdentity <MailboxGuid> -confirm:$false
- где <database>
– имя базы, в которой находится отключенный ящик, <MailboxGuid>
— его идентификатор, полученный на предыдущем шаге.
Если вы желаете удалить сразу все отключенные почтовые ящики (которые по умолчанию сами удалятся только через 30 дней), выполните в командной консоли Exchange следующую последовательность команд:
$users = Get-MailboxStatistics | where-object { $_.DisconnectDate -ne $null } | Select DisplayName,MailboxGuid,Database $users | ForEach { Remove-Mailbox -Database $_.Database -StoreMailboxIdentity $_.MailboxGuid -confirm:$false }
В переменную $users
мы занесли все отключенные ящики, которые впоследствии удалили.
Теперь быть может, вы захотите рекурсивно почистить все почтовые ящики пользователей Exchange от ненужных (мусорных) сообщений. Следующие примеры команд помогут вам в этом.
Сперва необходимо дать на все ящики полные права пользователю (администратору Exchange), от имени которого вы будете выполнять команды:
Get-Mailbox | Add-MailboxPermission -user domain\администратор -accessrights fullaccess
Теперь выберите пользователя, в почтовый ящик которого вы осуществите экспорт всех удаляемых сообщений. В не зависимости от ваших системных настроек Exchange лучше увеличить размер такого ящика, сделав его приемлемо большим. Достигается это следующей командой:
Set-Mailbox -Identity iivanov -IssueWarningQuota 5000000000 -ProhibitSendQuota 5100000000 -ProhibitSendReceiveQuota 5200000000 -UseDatabaseQuotaDefaults $false
Ящик выбранного пользователя ограничили размером в 5 гигабайт.
После чего вам потребуется перезапустить службу Банк данных Microsoft Exchange store.exe
в cmd.exe:
C:\>sc stop MSExchangeIS C:\>sc start MSExchangeIS
Теперь можно приступить к удалению информации из почтовых ящиков:
Get-Mailbox -Resultsize unlimited | Export-Mailbox -IncludeFolders "\Ошибки синхронизации\Конфликты" -TargetMailbox iivanov@domain.ru -TargetFolder konfl -DeleteContent –MaxThreads 10 Get-Mailbox -Resultsize unlimited | Export-Mailbox -IncludeFolders "\Ошибки синхронизации\Локальные ошибки" -TargetMailbox iivanov@domain.ru -TargetFolder local -DeleteContent –MaxThreads 10 Get-Mailbox -Resultsize unlimited | Export-Mailbox -IncludeFolders "\Ошибки синхронизации\Ошибки сервера" -TargetMailbox iivanov@domain.ru -TargetFolder server -DeleteContent –MaxThreads 10
Данными командами мы рекурсивно удалили из всех почтовых ящиков пользователей сообщения, находящиеся в подпапках папки “Ошибки синхронизации”. Данные сообщения были перемещены в почтовый ящик пользователя iivanov в соответствующие папки konfl, local, server. Выполнение поиска и экспорта данных сообщений было выполнено в 10 потоков (–MaxThreads 10). По умолчанию используется только четыре потока. Далее вы можете либо свернуть данные сообщения в pst файл, либо просто удалить их из ящика пользователя iivanov.
Таким же образом удалим сообщения из папок Исходящие, Удалённые, Нежелательная почта:
Get-Mailbox -Resultsize unlimited | Export-Mailbox -IncludeFolders "\Исходящие" -EndDate "07.12.2016" -TargetMailbox iivanov@domain.ru -TargetFolder ishod -DeleteContent –MaxThreads 10 Get-Mailbox -Resultsize unlimited | Export-Mailbox -IncludeFolders "\Удаленные" -EndDate "01.12.2016" -TargetMailbox iivanov@domain.ru -TargetFolder trash -DeleteContent –MaxThreads 10 Get-Mailbox -Resultsize unlimited | Export-Mailbox -IncludeFolders "\Нежелательная почта" -EndDate "01.12.2016" -TargetMailbox iivanov@domain.ru -TargetFolder unwant -DeleteContent –MaxThreads 10
Конечно, вы должны быть уверены, что почта в вашей компании не служит для хранения информации. Как показывает практика — пользователи именно так её и используют. Чтобы исключить раздувание баз почтовых ящиков необходимо продумать и довести до всех регламент использования корпоративных ресурсов. Это так — небольшое лирическое отступление.
Формат даты в приведённых выше командах должен соответствовать системной локали сервера. Если вы ошибётесь — получите ошибку выполнения этих команд. Проверить это можно через Панель управления -> Язык и региональные стандарты -> Настройка региональных параметров -> Краткий формат даты.
Если у вас возникла необходимость удалить все сообщения от определенного отправителя в папке “Входящие” у пользователей в каком-то контейнере, сделать это можно так:
Get-Mailbox -OrganizationalUnit 'OU=Users,OU=Компания,DC=domain,DC=ru' -Resultsize unlimited | Export-Mailbox -SenderKeywords ssidorov@domain.ru -includeFolders "\Входящие" -EndDate "04.12.2016" -TargetMailbox iivanov@domain.ru -TargetFolder ssidorov -DeleteContent –MaxThreads 10
И так далее. Вам в помощь — справка по командлету Export-Mailbox.
Следующей командой вы можете выявить самые объёмные почтовые ящики на сервере Exchange, которые впоследствии вы сможете подмонтировать к себе через outlook и почистить вручную:
Get-MailboxStatistics | Sort-Object -property TotalItemSize -Descending | ft -a DisplayName,@{label="TotalItemSize(MB)";expression={$_.TotalItemSize.Value.ToMB()}}
К большому сожалению, я так и не нашёл команды (способа), с помощью которого можно выявлять в почтовых ящиках сообщения определённого объёма. Быть может, это реализовано в других версиях Exchange…
По окончанию чистки не забудьте отобрать права у пользователя, от имени которого вы выполняли все перечисленные действия:
Get-Mailbox | Remove-MailboxPermission -user domain\администратор -accessrights fullaccess
После того, как вы покончите с удалением мусорных, на ваш взгляд, писем, необходимо сжать (выполнить дефрагментацию) базы данных почтовых ящиков. Делается это следующим образом:
С помощью Консоли управления Exchange отключите базу почтовых ящиков:
В составе установки сервера Microsoft Exchange существует команда eseutil.exe
, служащая для выполнения требуемой нам операции. В cmd.exe выполните следующую команду:
C:\>"C:\Program Files\Microsoft\Exchange Server\Bin\eseutil.exe" /d G:\boxes\small\small.edb Extensible Storage Engine Utilities for Microsoft(R) Exchange Server Version 08.03 Copyright (C) Microsoft Corporation. All Rights Reserved. Initiating DEFRAGMENTATION mode... Database: G:\boxes\small\small.edb Defragmentation Status (% complete) 0 10 20 30 40 50 60 70 80 90 100 |----|----|----|----|----|----|----|----|----|----| ................................................... Moving 'TEMPDFRG11916.EDB' to 'G:\boxes\small\small.edb'... File Copy Status (% complete) 0 10 20 30 40 50 60 70 80 90 100 |----|----|----|----|----|----|----|----|----|----| ................................................... Note: It is recommended that you immediately perform a full backup of this database. If you restore a backup made before the defragmentation, the database will be rolled back to the state it was in at the time of that backup. Operation completed successfully in 189.156 seconds. C:\>
— где G:\boxes\small\small.edb
путь до отмонтированной базы данных, которую нам требуется сжать.
Существует определённое ограничение на выполнение дефрагментации базы почтовых ящиков с помощью утилиты eseutil.exe
. Без указания специальных ключей, временная база создаётся на диске c:\
. Свободного места на нём должно быть примерно 110% (требование Microsoft) от размера сжимаемой базы:
После выполнения сжатия базы почтовых ящиков смонтируйте её в консоли Exchange обратно:
Если же у вас на диске c:\
нет достаточного места для выполнения обслуживания базы почтовых ящиков, выполните следующую команду:
C:\>"C:\Program Files\Microsoft\Exchange Server\Bin\eseutil.exe" /d G:\boxes\big\big.edb /t"g:\tempdfg.edb" Extensible Storage Engine Utilities for Microsoft(R) Exchange Server Version 08.03 Copyright (C) Microsoft Corporation. All Rights Reserved. Initiating DEFRAGMENTATION mode... Database: G:\boxes\big\big.edb Defragmentation Status (% complete) 0 10 20 30 40 50 60 70 80 90 100 |----|----|----|----|----|----|----|----|----|----| ................................................... Moving 'g:\tempdfg.edb' to 'G:\boxes\big\big.edb'... DONE! Note: It is recommended that you immediately perform a full backup of this database. If you restore a backup made before the defragmentation, the database will be rolled back to the state it was in at the time of that backup. Operation completed successfully in 1569.78 seconds. C:\>
С указанием в ключе /t"g:\tempdfg.edb"
расположение временного файла сжимаемой базы на диске с достаточным свободным объёмом.
Следуя рекомендации Microsoft, сразу же после выполнения данной процедуры выполните полный бекап Exchange. Иначе, если вам понадобится восстановиться из резервной копии ДО, объём баз вернётся к прежним цифрам.
После выполнения указанных действий, объем баз почтовых ящиков Exchange на моём сервере уменьшился вдвое!