Snapshots) - hyper-v - russian windows virtualization discussion

Останнім часом я часто отримую питання по «знімкам» (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 збігаються, то на сервері-джерелі скористайтеся експортом ВМ в тимчасову папку. І, відповідно, імпортуйте ВМ на цільовому сервері. Процедура експорту-імпорту переносить як знімки і настройки, так і збережений стан ВМ.

Про те, як змінився механізм знімків з Beta-версії Hyper-V до RC0, я розповім на днях.