Резервное копирование виртуальных машин при помощи Diskshadow

С появлением Hyper-V RC1 начинаешь задуматься о том, что и выход финальной версии не за горами — и подходит время для реального использования Hyper-V. Перед тем, как переводить любое решение из тестовой среды в промышленную, я всегда задаю себе вопрос: как следует настроить резервное копирование среды, чтобы всегда была возможность восстановления по состоянию на указанную дату? Когда речь идет о решении для консолидации серверов, каковым является Microsoft Hyper-V, этот вопрос актуален втройне. В настоящее время в недрах Microsoft идет работа над System Center Data Protection Manager 2007 Service Pack 1 (SCDPM2007 SP1), который будет официально поддерживать резервное копирование виртуальных машин Hyper-V. А пока что в ряде проектов по внедрению Hyper-V я должен предлагать заказчикам другие пути решения этой задачи.

Я думаю, все вы уже наслышаны о службе Volume Shadow Copy и том, какие преимущества она дает при резервном копировании ОС, SQL Server, Exchange Server и других данных. Hyper-V также использует эту службу и имеет свой VSS Writer. В Windows Server 2008 впервые вошла утилита diskshadow.exe, позволяющая работать с shadow copies. Сам термин Shadow Copy (или «Теневая копия») в случае виртуальных машин очень созвучно слову Snapshot (или «Снимок»). Утилита diskshadow.exe напоминает утилиту vshadow.exe из Volume Shadow Copy/VSS SDK, только интерфейс изменился и стал напоминать утилиту Diskpart. Вы можете пользоваться новым интерактивным интерфейсом или задать сценарий, перечисляющий шаги для выполнения. Для этого служит команда diskshadow -s script.txt.

Сейчас мы рассмотрим простейший пример, который иллюстрирует создание резервных копий всех виртуальных машин на сервере при помощи Diskshadow. Для этого нам потребуется знать GUID нашего Hyper-V VSS Writer. В принципе, он одинаков на всех машинах, однако процедуру его уточнения я приведу. Список всех VSS writers вы можете получить при помощи команды list writers в интерфейсе diskshadow. В ответ вы получите длинное перечисление, в котором потребуется найти именно Hyper-V VSS Writer. Например, так:

* WRITER "Microsoft Hyper-V VSS Writer"
- Writer ID = {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}
- Writer instance ID = {4240d886-48a9-49da-bf90-d2aca21209e1}

Зная GUID, можно написать сценарий, который будет делать с помощью данного VSS Writer снимок того тома, на котором находится ваша виртуальная машина. Привожу пример такого сценария для демонстарции.

# DiskShadow script file to backup a single VM from a Hyper-V host
set context persistent
# make sure the path already exists
set metadata c:\example.cab
set verbose on
begin backup
add volume d: alias SystemAndDataVolumeShadow
# verify the "Microsoft Hyper-V VSS Writer" writer will be included in the snapshot
writer verify {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}
create
end backup

В процессе выполнения вы увидите, что в процессе теневого копирования участвует Hyper-V VSS Writer. Помимо него, могут быть задействованы и другие VSS Writers — если на указанном диске есть данные, которые используются другими приложениями, совместимыми с VSS. После того, как процесс завершится, вы сможете подключить теневую копию как диск или каталог при помощи команды exposeв Diskshadow и скопировать необходимые данные на отдельный носитель для хранения резеврной копии. Вы можете посмотреть, какие из файлов на сделаной вами копии всего тома используются виртуальной машиной. Для этого внутри созданного архива .cab найдите файл метаданных с именем manifest.xml, а в нем — имя файла XML, созданного Hyper-V VSS Writer. В этом файле XML содержится вся информация о том, что именно из скопированного касается виртуальных машин Hyper-V.

Я прекрасно понимаю, что затронутая сегодня тема довольно сложная. Если она вызовет интерес, я могу написать пару статей с примерами готовых сценариев резервного копирования, которые я использую у заказчиков на проектах в рамках программы RDP. Очевидно также, что более правильным и простым способом является использование SCDPM 2007 SP1, если вам не смущает использование предварительной версии Service Pack 1.