Back to the future: восстанавливаем Exchange из архивов

back-to-the-futureСтандартная процедура резервного копирования предусматривает восстановление оперативных данных. Если же поступает запрос на восстановление архивных данных, то задача усложняется. Связано это с тем, что кроме самих данных необходимо восстановить/воспроизвести инфраструктуру актуальную на момент создания резервной копии.

Задача – восстановить некоторые почтовые ящики из архива, в которые помещена резервная копия почтовой базы, сделанная четыре года назад.

Отправная точка – определение актуальной версий Exchange на момент создания резервной копии баз. Для этого можно посмотреть билд любого бинарного файла, например store.exe, из резервной копии. По номеру билда определяется версия, сервис пак и пакет накопительных обновлений согласно таблице отсюда.

После этого приступаем к разворачиванию виртуальной среды, копирующей корпоративную на момент снятия архивной резервной копии. При воспроизведении важны следующие моменты:

  • DNS/Netbios имена домена, в котором будет находится восстанавливаемый Exchange, должны совпадать с реальными именами, которые были на момент снятия резервной копии
  • Имя новой разворачиваемой организации Exchange должно совпадать с именем организации Exchange на момент снятие резервной копии

Выполнения этих двух условий достаточно для успешного восстановления. Чтобы не путаться можно так же:

  • Имя контроллера домена взять то же, что было у одного из контроллеров домена на момент снятия резервной копии
  • Имя сервера Exchange взять то же, что и у одного из серверов, на которых находились базы на момент снятия резервной копии

В моём случае понадобилось 3 виртуальные машины:

  • Контроллер домена
  • Сервер Exchange 2007
  • Клиент с установленным Outlook 2007

Необходимость использования третьей виртуальной машины связана с тем, что использование командлета Export-Mailbox -PSTFolderPath невозможно на сервере Exchange. Необходим клиент с установленным Outlook 2003 sp2 и старше.

Вариант с построением инфраструктуры с нуля в виртуальной среде менее трудоёмок по сравнению с восстановлением из резервной копии контроллера домена и сервера Exchange, так как такое восстановление влечёт за собой необходимость вычищать из AD те контроллеры домена, которые мы не стали восстанавливать. Эта процедура при наличии нескольких контроллеров домена, нескольких доменов, отдельных деревьев может быть очень трудоёмкой и занять много времени. Гораздо проще построить в виртуальной среде всё с нуля с выполнением условий указанных выше.

Итак. У нас имеет новый лес, чьё dns-имя совпадает с реальным лесом 4 года назад. У нас установлен сервер Exchange с билдом актуальным 4 года назад и имя почтовой организации совпадает с тем, которое было 4 года назад. Кроме этого из бэкапа восстановлены edb-файлы и логи. Что дальше?

Дальше, используя Recovery Storage Group(RGS)/Recovery Database, мы подключаем восстановленные базы, восстанавливаем из них нужный почтовый ящик и выгружаем его в pst-файл.

Для разных версий Exchange шаги будут немного отличаться:

Exchange 2003

  1. Создаём RGS + почтовую базу в ней
  2. Подменяем файл базы файлом из резервной копии
  3. Восстанавливаем ящик в любой новый ящик, созданный в виртуальной среде
  4. Выгружаем ящик в pst с помощью утилиты ExMerge

Exchange 2007

  1. Создаём RGS + почтовую базу в ней
  2. Подменяем файл базы файлом из резервной копии
  3. Восстанавливаем ящик в любой новый ящик, созданный в виртуальной среде
  4. Выгружаем ящик в pst с помощью командлета Export-Mailbox

Exchange 2010

  1. Создаём Rrecovery Database (RD)
  2. Подменяем файл базы файлом из резервной копии
  3. Восстанавливаем ящик в любой новый ящик, созданный в виртуальной среде
  4. Выгружаем ящик в pst с помощью командлета New-MailboxExportRequest

Шаги для всех версий похожи – отличается лишь способ выгрузки ящика в pst-файл. Кроме этого, перед началом восстановления необходимо перевести базы в состояние Clean Shutdown, иначе их не получится подмонтировать. Делается это с помощью утилиты eseutil. Файлы ese.dll, eseback2.dll, esebcli2.dll и eseutil.exe имеет смысл скопировать в папку где хранятся логи и восстанавливаемая база.

Далее описывается процедура восстановления базы для Exchange 2007.

0. Подготовка восстановленной базы

Для начала смотрим действительно ли база находится в состоянии Dirty Shutdown:

eseutil.exe /MH MailboxDatabase.edb

В выводе утилиты интересует следующий кусок:

dbtime: 204 (0xcc)
State: Dirty Shutdown
Log Required: 98865-98883 (0x18231-0x18243)

До запуска процедуры восстановления проверяем так же состояние логов для это базы:

eseutil.exe /ML EXX

Здесь EXX – общий шестнадцатеричный префикс лог-файлов. Утилита проверит лог-файлы и если не найдёт ошибок – мы можем приступать к дальнейшему восстановлению:

eseutil.exe /R EXX

Если какие-то лог-файлы будут отсутствовать, то команда вернёт ошибку JET_errCommittedLogFilesMissing. Чтобы запустить перевод базы в Clean Shutdown, не обращая на потерю логов, используем ключ /I:

eseutil.exe /R EXX /I

По завершении база будет готова для подмены в RGS/RD:

eseutil.exe /MH MailboxDatabase.edb
...
dbtime: 204 (0xcc)
State: Clean Shutdown
Log Required: 98865-98883 (0x18231-0x18243)

1. Создание RGS и базы в ней

В Exchange 2007 базы можно создать через EMS. Процедура выглядит следующим образом:

New-StorageGroup -Server MBX -LogFolderPath E:RGS -Name RGS -SystemFolderPath E:RGS
-Recovery
New-MailboxDatabase -MailboxDatabaseToRecover MailboxDatabase -StorageGroup MBXRSG
-EDBFilePath E:RGSMailboxDatabase.edb

Важно создать базу с тем же именем, что и база из резервной копии. Тогда не придётся изменять в конфигурации базы пути к именам файлов.

Set-MailboxDatabase -Identity MBXRSGMailboxDatabase -AllowFileRestore:$True

Процедуру так же можно проводить через Troubleshooting Assistant.

RGS и база созданы. База пока не подмонтирована. Мы готовы к помене файла базы на файлы из резервной копии.

2. Подмена файла базы

Файл базы подменяется файлом из резервной копии через любой файловый менеджер. После этого база монтируется:

Mount-Database -Identity MBXRSGMailboxDatabase

Если база из резервной копии переведена в состояние Clean Shutdown, в свойствах базы из RGS разрешена её перезапись при восстановлении и имена баз совпадают, то база должна подмонтироваться без каких-либо проблем.

3. Восстановление ящика

Процедура восстановления предполагает, что мы создали почтовый ящик, в который будет выгружаться информация из резервной копии. Если ящик не создан – необходимо его создать. Далее запускаем процедуру восстановления:

Restore-Mailbox –RSGMailbox OldMailbox -RSGDatabase MBX4RSGMailboxDatabase
–Identity NewMailbox –TargetFolder “Recovered data”

Здесь OldMailbox – ящик, который мы восстанавливаем, NewMailbox – новый ящик, который мы только что создали, а Recovered Data – папка в корне NewMailbox – куда будет восстановлена информация из ящика OldMailbox.

4. Выгрузка ящика в PST-файл

В Exchange 2007 процедура выгрузки в PST требует бинарных файлов Outlook. Поэтому необходим клиент на котором будут установлен Exchange Management Shell и Outlook 2003 sp2 или старше. Выгрузка в PST делается следующей командой:

Export-Mailbox –Identity NewMailbox -PSTFolderPath E:PST

Не забываем, что для Restore/Export-Mailbox существует ключ BadItemLimit, который может пригодиться, если нам попадутся битые элементы.

Да, чуть не забыл. Для совсем ленивых существует специальное ПО для выгрузки ящиков из edb-файлов прямо в pst. Например, OnTrack PowerControls.

Полезные ссылки:
Exchange Server and Update Rollups Build Numbers
Why Exchange Databases Might Remain Dirty After ESEUTIL /R Recovery
How to Recover a Mailbox by Using a Recovery Storage Group
Working with Recovery Storage Groups in Exchange 2007
How to Export and Import mailboxes to PST files in Exchange 2007 SP1

Leave a Reply

Your email address will not be published. Required fields are marked *