top of page

Резервное копирование и восстановление.

Начнем мы с размышления о том, что мы можем потерять. 

Начиная с самого минимального элемента (письма), перечислим эти элементы: письмо, ящик, база, сервер (сервис, роль), конфигурация (конфиг хранится в AD, за пределами Exchange).

 

Письмо.

При удалении письмо попадает в Корзину 1-го уровня. Это собственно корзина самого пользователя. Хранится оно здесь, пока пользователь не удалит его из корзины (или если не сработает механизм retention policy, о котором мы позже поговорим). При удалении письма из корзины, оно перемещается в Корзину 2-го уровня. Здесь оно хранится по умолчанию 14 дней. При удалении письма из Корзины 2-го уровня есть два варианта. Первый - полное удаление. Второй - нововведение Exchange 2010 - Single Item Recovery (Корзина 3-го уровня). В ней срок хранения по умолчанию тоже составляет 14 дней, после чего письмо удаляется окончательно.

Функция Single Item Recovery доступна не сразу. Её нужно включать дополнительно для каждого почтового ящика. Если она включена, письмо будет хранится 28 дней (14+14), если нет 14 дней.

Отличие корзины 2-го уровня в том, что из неё пользователь может достать письмо, а из корзины 3-го уровня нет. Из К3У может достать только администратор.

Смотрим наглядно, через owa.

Берем письмо (например из "Входящие") и удаляем. Оно попадает в "Удаленные", т.е. в К1У. Переходим в "Удаленные" и удаляем это письмо. Оно попадает в К2У. Чтобы попасть в К2У, жмём ПКМ на "Удаленные" и выбираем "Восстановить удаленные элементы". В появившемся окне можно

восстановить или удалить выбранные письма. Если К3У не установлена, то письмо удаляется окончательно и поднять его можно только из бэкапа. Если К3У установлена, то письмо помещается в неё. Но из клиента мы посмотреть её не можем.

Включается Single Item Recovery конкретно для каждого пользователя. Делается это только через EMS командой Set-Mailbox  VashUser -SingleItemRecoveryEnabled $true. Затем ожидаем 60 минут (в реальности около получаса) и К3У начинает работать. Доступ к этой корзине может получить только администратор и только через ECP (Exchange Control Panel, Центр администрирования Exchange). 

Почтовый ящик.

Ящики после удаления перемещаются в блок под названием Disconnected Mailbox (посмотреть можно в EMC -> Recipient Configuration -> Disconnected Mailbox), откуда администраторы могут достать их в течении 30 дней. После этого срока вам поможет только бэкап. 

База данных.

Бэкап на Mailbox сервере осуществляется на уровне базы данных. Т.е. вы бэкапите базу целиком. Что вы впоследствии будете восстанавливать (базу, ящик или отдельное письмо), это уже отдельная тема.

Средства для бэкапа:

1. "Для бедных", очень неудобное, Windows Server Backup. Это фича, которая ставится дополнительно и бэкапит базу целиком. Как и другие средства, она делает это посредством VSS, поэтому базу останавливать не нужно. Если мы бэкапим Exchange, то Windows Server Backup может бэкапить только разделы целиком. Точнее он может бэкапить и папку, но если мы говорим об Exchange'е, то для того, чтобы при восстановлении Windows Server Backup понял, что он восстанавливает именно Exchange, нужно сделать так, чтобы он бэкапил раздел с базой данных целиком. У Windows Server Backup есть только Full-бэкап, т.е. бэкапится БД и ТЛ, которые затем усекаются. Есть ещё Copy-бэкап, тоже самое, что и Full, только логи не усекаются. Инкрементального бэкапа нет. Windows Server Backup не умеет писать на стримеры (ленты/кассеты). Умеет писать на диски и по сети. На выходе вы получаете файл vhd, который можно подключить к виртуальной машине и посмотреть содержимое.

2. DPM (Data Protection Manager)

3. Стороннее ПО. Symantec к примеру.  

Мы будем использовать Windows Server Backup, т.к. остальные продукты это отдельная тема для обсуждений.

На van-ex1, на диске D, создаем папку NewDB. Сюда мы положим одноименную базу, которую будем бэкапить и восстанавливать. Почему не создать на диске C? Можно конечно, но бэкапить раздел нужно целиком. Замучаемся ждать.

В EMC -> Organization Configuration -> Mailbox на вкладке Database Management создаем новую БД с именем NewDB, которая будет располагаться на van-ex1 в папке D:/NewDB.

Создаем в этой базе нового пользователя NewUser. Логинимся через owa.

Отправляем сами себе письмо (можно прикрепить к нему какое-нибудь вложение для наглядности). 

Затем размонтируем базу и обратно смонтируем. Дело в том, что нам нужно, чтобы это письмо оказалось в БД. Когда оно приходит, оно оказывается в ТЛ. Потом проходит чекпойнт и письмо оказывается в БД. Чтобы чекпойнта не ждать, сделаем размонтирование/монтирование и письмо гарантированно окажется в базе. Того же результата можно добиться, перезапустив службу Microsoft Exchange Information Store. 

Устанавливаем фичу Windows Server Backup на сервере Exchange, где будем бэкапить базу, т.е. van-ex1.

Запускаем бэкап базы. Для этого в Windows Server Backup выбираем Backup Once (т.е. единожды запустить бэкап). Выбираем Different options для 

единичного создания бэкапа.

Далее выбираем бэкап не всего сервера, а ручную выборку раздела или файлов.

WinServerBackup не поймёт, что вы восстанавливаете БД Exchange.

Далее на кнопку Add Items и указываем целиком весь раздел (в нашем случае диск D), где находится ваша БД. Иначе при восстановлении

По умолчанию WinServerBackup делает Copy-бэкап, т.е. логи усекаться не будут. Что выбрать Full-бэкап, заходим в Advanced Settings и на закладке VSS

Settings выбрать VSS full Backup

В следующем окне указываем, куда будем производить бэкап. Указываем диск или сетевой путь и запускаем бэкап. Дожидаемся окончания.

Теперь удалим файл базы .edb из работающей БД NewDB (D:/NewDB). Идём в EMC -> Organization Configuration -> Mailbox и размонтируем базу (ПКМ -> Dismount DB), иначе удалить ничего не получится. 

Давайте после удаления попробуем обратно примонтировать БД. Воспользуемся EMS и командой Mount-Database.

Получаем сообщение, что как минимум один файл БД отсутствует. Хотите ли продолжить?

Тоже самое Exchange вам скажет и в EMC, если вы попробуете примонтировать базу через графическую консоль.

Да, продолжаем. Система будет долго думать и закончится всё сообщением, что базу примонтировать нельзя.

Что ж, нас спасет сделанный бэкап.

Идём в WinServerBackup и выбираем Recover. Указываем где хранится резервная копия (локальный сервер или другой). Наш бэкап на локальном van-ex1, выбираем его.

WinServerBackup знает, когда мы делали бэкапы. В следующем окне система выдаст доступные резервные копии на момент времени. У нас он всего

один, сделанный в 12:16.

Далее выбираем, что будем восстанавливать: файлы/папки, тома, приложения. Если вы не бэкапили раздел целиком, то галка Application вам будет недоступна. Именно её и выбираем для восстановление базы.

Мастер говорит, что видит Exchange. Нажав на кнопку View Details можно увидеть информацию о базе.  

Что  означает галка?

После создания бэкапа, в папке с базой и логами могут появиться новые логи (письма то приходят и уходят), которые были наработаны уже после создания бэкапа.

Если галку не ставить (это поведение по умолчанию), мастер восстанавливает то, что есть и накатывает файлы, которые были образованы после создания бэкапа. 

Если галку поставить, новые логи проигрываться не будут.

Зачем вообще такая функция нужна?

Для понимания нижеописанного ознакомьтесь с типами резервного копирования. Кратко скажу, что:

Incremental каждый день будет копировать только разницу за текущий день.
Differential каждый день будет копировать всю разницу с Full-бэкапом. 

Допустим мы используем ПО для бэкапа, которое умеет делать дифференциальное и инкрементальное резервное копирование и осуществляем резервное копирование не постоянно в режиме Full, а по схеме Full-Incremental или Full-differential. При инкрементальном и дифференциальном  бэкапе бэкапятся только изменения, т.е. ТЛ. В воскресенье мы сделали Full-бэкап. В пятницу сервер упал. При схеме Full-differential, нам нужно взять Full-бэкап (сделанный в воскресенье) и последний дифференциальный бэкап. Дифференциальный бэкап не чистит логи. После восстановления Full-бэкапа нам не нужно проигрывать логи, т.к. мы ещё не применили последний дифференциальный бэкап. После его применения логи можно проигрывать. Если мы берем схемуFull-Incremental, то в понедельник будут забэкаплены все изменения(логи) с момента Full-бэкапа и эти логи почистятся. При падении в пятницу мы восстанавливаем Full-бэкап, восстанавливаем инкрементальный бэкап за понедельник (не проигрывая), потом за вторник (не проигрывая) и т.д. И на последнем инкрементальном проигрываем всё.

Итак, вернемся к нашей базе. Она у нас Full-бэкап, поэтому галку ставить не надо.

В следующем окне выбираем, куда восстанавливать копию. Выбираем оригинальное месторасположение. Запускаем восстановление. Ждём.

После завершения восстановления, база монтируется автоматически. Наш пользователь NewUser может продолжать работать.

Рассмотрим интересный случай с быстрым восстановлением.

Предположим наша база NewDB упала. База большая, поэтому восстановление может занять очень продолжительное время. Но сервер Mailbox у нас рабочий. Идея следующая. Мы создадим временную базу tempDB и направим пользователей на неё. Да, пользователи не увидят своих прежних сообщений. Но зато они могут отправлять и получать почту. А мы пока займемся восстановлением полноценного сервиса.

Давайте на практике смоделируем эту ситуацию.

1. Отмонтируем БД NewDB. Удалим из неё всё.

2. Создадим БД TempDB (давайте для удобства на том же диске D, т.е. D:/TempDB). 

3. Командой Get-Mailbox -Database NewDB посмотрим все п/я, которые хранятся в базе NewDB. А затем эти ящики переведем на TempDB командой Set-Mailbox -Database TempDB. Потом проверяем и видим, что в NewDB теперь никого, все перекочевали на TempDB. 

Делаем бэкап базы NewDB.

Ключ -Force ставится, чтобы консоль не спрашивала подтверждения.

С точки зрения конфигурации, все ящики теперь находятся на TempDB. Не надо думать, что переезжает информация из этих ящиков. Это всего лишь с точки зрения конфигурации - ящик NewUser теперь находится на TempDB. Теперь необходимо перелогиниться и заново зайдите под пользователем NewUser. Вы увидите чистый почтовый ящик.

4. Отправляем письмо сами себе. Назовём его test3.

5. Восстанавливаем БД NewDB.

6. Теперь нам нужно вернуть всё как было. Переводим юзеров обратно на NewDB.

Но! Оттого что мы прописали этот параметр, пользователи обратно не перевалятся. Они продолжат работать в старой базе. Почему? Юзер обратился к CAS. CAS полез в AD и выяснил, где подключен юзер и установил к этой БД соединение. Поэтому юзеру нужно перелогиниться, чтобы CAS заново посмотрел информацию в AD. Но если юзеров много, затруднительно всех об этом просить. Поэтому мы просто отмонтируем TempDB и юзерам ничего не останется, кроме как перезаходить заново.

7. Итак, юзер перелогинивается и видят свою прежнюю почту из базы NewDB. Резонное замечание - письма test3 у него нет. Нам надо слить почту, которую юзер наработал за время простоя NewDB.

Отмонтируем базу TempDB и удаляем её из оснастки (Organization Configuration -> Mailbox -> Database Management) через ПКМ - > Remove. Удаление БД из оснастки не удаляет сами файлы БД. База таким образом удаляется в конфигурации. Идём в папку с базой (D:/TempDB). Удаляем внутри всё, кроме самого файла c БД TempDB.edb. 

В Exchange существует специальный инструмент Recovery Database. Вы можете создать БД с использованием существующих данных, например файла .edb. Создаете вы её как базу для восстановления, т.е. получается такая спецбаза. Когда у вас есть обычная нормальная база и база для восстановления, вы можете сделать слияние.

Итак, создадим базу для восстановления. 

New-Mailbox -Name RecDB -Server van-ex1 -EdbFilePath "D:\TempDB\tempdb.edb" -LogFolderPath "D:\TempDB\" -Recovery (на скриншоте всё не влезло)

-Name - указываем имя БД (RecDB)

-Server - на каком сервере создаем БД (van-ex1)

-EdbFilePath - указываем путь к файлу .edb ("D:\TempDB\tempdb.edb")

-LogFolderPath - указываем путь к папке, куда будут писаться логи ("D:\TempDB\")

Создание БД для восстановления от создания обычной БД отличается только одним ключом -Recovery.​

После создания монтируем созданную базу. 

Для одного почтового ящика проще всего получить почту командой Restore-Mailbox NewUser -RecoveryDatabase RecDB (указываем юзера и БД, откуда брать письма).

В результате, RecoveryDatabase вытаскивает из RecDB все сообщения, которых не хватает в оригинальной БД NewDB. Теперь пользователь может наблюдать у себя письмо test3 и все остальные письма.

 

После процедур восстановления/объединения, если RecDB вам больше не нужна, вы её размонтируете, удаляете и забываете.

 

Рассмотрим сценарий, когда у вас есть бэкап и пользователь просит вас восстановить письма.

1. Создаем папку. Восстанавливаем из бэкапа все данные в эту папку (посмотрите скриншоты WinServerBackup, там есть возможность восстановления в альтернативное месторасположение).

2 Создаем базу для восстановления. Удалять внутри, как в предыдущем примере, ничего не надо. Говорим New-Mailbox Database. Указываем путь к .edb, восстановленному из бэкапа. Путь для логов указываем тот же. И указываем ключ -Recovery. 

База для восстановления создается нормально. Но смонтировать её нельзя. В предыдущем примере мы сначала отмонтировали базу. В этом примере нет. Когда производится бэкап "на горячую", не бэкапится последний ТЛ, т.к. он залочен. Поэтому базу Exchange вам смонтировать не даст, уведомив, что база находится в состоянии dirty shutdown (грязное выключение). Чтобы преобразовать БД в clean shutdown и подготовить к монтированию можно воспользоваться утилитой командной строки eseutil.

Как это делается, можно узнать в этой статье, где рассматривается "Аварийное восстановление сервера Exchange 2010". 

Вернемся к основной теме всего повествования, а именно, что мы можем потерять. 

Мы рассмотрели: письмо, ящик и базу.

 

Следующий на очереди - сервер (т.е. сам сервис Exchange, какая-то его роль).

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

Что делать, если сервер Exchange упал.

Берем железо (или виртуалку) и устанавливаем ту же версию ОС, которая стояла на упавшем сервере. Даем тоже самое имя, что было на старом. Даем тот же IP. Ставим все фичи, патчи и обновления. Идём в AD, находим компьютер старого сервера и делаем Reset Account. Только после этого мы включаем компьютер в домен. Если Reset Account вы не сделаете, то при включении компьютера в домен с именем, которое уже существует, объект удаляется и создается заново. А если он создан заново, у него будет новый SID и GUID. Поэтому для AD это будет абсолютно новый сервер. Reset Account позволяет оставить всё как есть. В AD новый компьютер будет работать как старый. Далее берем дистрибутив Exchange и запускаем его с одним единственным ключом RecoverServer. Опять же привожу ту же статью, где это подробно описано. Когда вы запускаете Setup с ключом RecoverServer, ваш новый Exchange лезет в AD, смотрит какие роли у него были до падения и устанавливается именно в той конфигурации, которая была у него на старом сервере. После установки, открыв оснастку, вы увидите абсолютно все настройки, которые были на старом сервере. Но не будет баз данных. Точнее БД будут в списке, к ним будут прописаны пути. Но если файлов по этим путям нет, то вы увидите только вопросительные знаки. А если БД по этим путям доступны, то они будут смонтированы и вы начнете работать. Если файлов нет, то берем бэкап и восстанавливаем в то месторасположение, где они должны лежать. После этого монтируете и работаете.

Операция по восстановлению Exchange (восстановление баз в расчёт не берем) займет у вас около часа. Можете держать заранее готовые ОС со всеми патчами. Так что это будет недолго. Но если почтовый сервер для вас критичен и простоя быть не может, тут вам поможет кластер.

 

И последний пункт - это конфигурация. Как мы уже не раз обсуждали, она хранится в AD. Поэтому бэкапить  нужно AD. А лучше помимо бэкапа иметь как минимум два контроллера домена.

В заключении поговорим про Edge.

У него есть два скрипта (про скрипты мы уже как-то говорили, C:\Program Files\Microsoft\...\Scripts). Это Export и Import Edge-конфига (ExportEdgeConfig.ps1 и ImportEdgeConfig.ps1).

Выполняя Export, формируется xml-файл, в который выгружается вся информация о настройках Edge, в том числе настройки антиспама, коннекторов и т.д. Если Edge у вас упал, вы говорите Import и указываете этот файл. Но есть нюанс. После использования Import, вам придется пересоздать подписку на сайт AD. Старая работать не будет. В итоге можно клонировать несколько Edge'й, если вам нужно, чтобы они были с одинаковыми настройками.

В Edge можно выгружать (бэкапить) конкретные вещи, например, настройки антиспама (IP Allow List, IP Black List), чтобы потом переносить их, если вы к примеру подняли ещё один новый Edge. Для этого есть свои скрипты и командлеты. Поэтому вы можете выгружать не весь конфиг, а по кусочкам, если это необходимо.

Следующий модуль: Transport Rule.

Меню изучения Exchange 2010

bottom of page