В последнее время я часто получаю вопросы по «снимкам» (snapshots) в Hyper-V. Как это работает, влияет ли на производительность, сколько может быть снимков у одной ВМ, как удалить снимки, как перенести ВМ со снимками на другой сервер?.. Вопросов много — давайте разберемся.
Для начала обсудим, что же такое снимок. Очевидно, часто при тестировании какого-то ПО, службы или драйвера желательно сохранить состояние ВМ, пробовать разные действия — и каждый раз иметь возможность вернуться в сохраненное состояние. Это сохраненное состояние и есть снимок или снапшот (Snapshot).
Представьте себе, что я участвую в разработке некого приложения, которое необходимо протестировать на работу установщика, совместимость с MS Office и работу с IIS 7.0. Сначала я устанавливаю и настраиваю ОС, ставлю драйверы, затем делаю снимок системы. После чего устанавливаю свое приложение и смотрю, как отработал процесс установки. Затем я возвращаюсь к исходному состоянию, устанавливаю MS Office, делаю новый снимок, устанавливаю приложение, тестирую работу с офисом. Возвращаюсь на шаг назад, устанавливаю IIS 7.0, делаю снимок, устанавливаю приложение, тестирую… И тут понимаю, что система стала неработоспособна. Благодаря дереву снимков я легко вычисляю, какая из настроек ОС, служб или приложений привела к такому жуткому результату. Нахожу проблему и отправляю разработчикам пошаговое руководство по ее повторению. Затем просто жду от них новую версию приложения. И тем временем удаляю все снимки кроме тех, где старой версии приложения нет (останутся три — чистая ОС и драйверами, с установленным MS Office и с MS Office + IIS). Ну а затем просто трижды тестирую установку и работу новой версии приложения в каждой из уже подготовленных сред.
Так как же работает механизм снимков? Что происходит, когда мы нажимаем заветную кнопку «Take Snapshot»?
* Hyper-V приостанавливает (pause) вашу ВМ.
* Создается резервная копия конфигурации ВМ (файла в формате VMC).
* Для всех текущих виртуальных дисков (файлов VHD*) создаются новые разностные (Differencing) диски.
* В свойствах ВМ старые диски заменяются на новые. (Теперь всегда имеем нетронутую копию дисков на момент создания снимка);
* Работа ВМ возобровляется. (Все это происходит на лету — так что вы ничего не замечаете. Прерывания работы не происходит).
* Как только ВМ возобновила работу, Hyper-V начинает сохранять в отдельный файл состояние ее оперативной памяти.
*
Во время этого процесса Hyper-V организует работу с памятью так, чтобы ВМ не вносила изменения в те области, которые еще не были сохранены. Для этого временно используется оперативная или виртуальная память основной системы.
* Примечание. В текущей версии Hyper-V снимки создаются лишь с виртуальных дисков в формате VHD. Диски Pass-through и iSCSI не поддерживаются, так как нет практической возможности быстро сохранить их текущее состояние.
После завершения этого процесса мы имеем: состояние конфигурации ВМ на момент снимка в файле VMC, состояние всех дисков ВМ на момент снимка в файлах VHD и состояние памяти ВМ на момент снимка в обычном формате приостановленной ВМ (Saved State).
Теперь вы можете в любой момент применить снимок (Apply Snapshot) и восстановить состояние ВМ. Однако очевидно, что вносить изменения в само сохраненное состояние ВМ невозможно. Зато снимки можно удалять. Если удаляемый снимок — последний в своей ветви, то удаляется только он сам. Если ниже него в дереве снимков имеется одно сохраненное состояние, то два разностных виртуальных диска (Differential VHD) объединяются в один. Если удаляемый снимок наследуется сразу несколькими, то файл его виртуального диска остается и будет использоваться этими потомками. При желании можно удалить любое поддерево снимков кнопкой Delete Snapshot Tree. Обьем всего дерева для одной ВМ ограничен 64 снимками. Это связано с максимальным количеством копий, которое может хранить служба VSS.
Если вам потребуется перенести с одного сервера на другой ВМ с сохранением снимков — помните, что это поддерживается только в пределах одной версии Hyper-V. То есть перенести ВМ со снимками с Beta-версии на RC0 невозможно. Если же версии Hyper-V совпадают, то на сервере-источнике воспользуйтесь экспортом ВМ во временную папку. И, соответственно, импортируйте ВМ на целевом сервере. Процедура экспорта-импорта переносит как снимки и настройки, так и сохраненное состояние ВМ.