Як працює знімок віртуальної машини?


16

Використовуючи програмне забезпечення для зображень на дисках більше десяти років, я вважаю, що бореться з тим, що віртуальні машини можуть бути зроблені на знімку і відновлені за лічені секунди, в той час як зображення на дисках часто займає години.

Я можу зробити знімок VM, перевстановити на іншу ОС, потім відновити і якось магічно протягом декількох секунд мій старий VM відновлюється до стану, в якому він був раніше.

Як це може статися? Що насправді хост VM робить для VM, що робить це можливим?

Відповіді:


16

Коли ви створюєте знімок, всі зміни, зроблені на початковому зображенні віртуального диска, насправді не вносяться на самому зображенні, але вони записуються в новий (моментний) файл диска. Ця дія настільки швидка, оскільки немає необхідності копіювати цілий образ віртуального диска, оскільки він працює на принципі копіювання за принципом запису (лише змінено, тобто записані блоки записуються на знімок зображення). Зауважте, що зображення знімка зростає, коли ви змінюєте все більше і більше даних на вихідному зображенні віртуального диска (який залишається таким, як був у момент, коли ви зробили знімок). Це, швидше за все, буде набагато менше, ніж оригінальне зображення, але в гіршому випадку він буде точно такого ж розміру (якби всі блоки були змінені).

З цим новим знімком ви можете виконати дві дії:

  1. Відкиньте знімок : дуже швидка дія. Менеджер віртуальної машини просто видаляє файл зображення знімка і повертає керування на вихідне зображення диска або деякі попередні знімки.
  2. Об'єднати знімок : менеджер віртуальної машини об'єднує змінені блоки (тобто знімок) з оригінальним зображенням. Ця дія потребуватиме часу залежно від того, скільки блоків у вихідному зображенні змінилося. Знову ж таки, найгірший сценарій - це те, що все оригінальне зображення буде перезаписано у випадку, якщо всі блоки з оригінального зображення були записані після створення знімка.

Усі описані вище процедури також працюють для декількох знімків. У такому випадку оригінальне зображення може бути одним знімком, а наступний знімок може посилатись блоком на цей (перший) знімок. Таким чином, у вас може бути багато знімків, які ви можете легко відкинути або об'єднати.


1
зніміть знімок, як і будь-який процес видалення зображення, насправді може бути досить повільним, якщо ввімкнено режим видалення після видалення. Це функція безпеки, щоб витерти простір, використаний зображенням або знімком, очистити його перед тим, як він буде звільнений для використання іншими ВМ, інакше, використовуючи зчитування блоку низького рівня, можна буде прочитати дані попереднього використовуваного ВМ. І будь-яке рішення щодо віртуалізації, яке не має цієї функції, має величезний недолік у безпеці
діасний

Я намагався пояснити сценарій створення декількох знімків і як зберігаються зміни з кожного знімка. Дивіться це коротке пояснення щодо роботи знімків VMware: cubicrace.com/2012/02/…
Piyush Chordia

5

З огляду, ваше програмне забезпечення для віртуалізації має відслідковувати чотири речі: стан процесора, оперативну пам’ять, конфігурацію (скільки мережевих карт у VM?) Та диск. Я ігнорую перші три речі, оскільки вони не є величезними обсягами даних, програмне забезпечення може просто робити копії порівняно невеликих структур даних і зберігати їх у файлі. Отже, це залишає лише знімки диска для пояснення.

По-перше, те, що VM бачить на жорсткому диску, це насправді лише набір файлів у файловій системі хосту. Щоб зробити знімок, програмне забезпечення віртуальної машини забирає диск VM в певний момент часу, зберігає його, відкриває новий порожній файл диска та робить схему копіювання при записі з кожним наступним доступом до диска.

Скажімо, ваш файл диска - BigVM.disk. Ви робите знімок, і тепер ваше програмне забезпечення VM перейменовує ваш диск у BigVM-s1.disk, після чого створює новий порожній BigVM.disk. Під час роботи вашої вітчизняної машини всі запити на читання проходять через BigVM.disk. Якщо у цьому файлі немає запису на ту частину диска, яку хоче VM, то дані з BigVM-s1.disk повертаються. Під час запису дані записуються у BigVM.disk замість BigVM-s1.disk. Майбутнє, прочитане в цьому самому секторі, поверне дані з BigVM.disk замість оригінального знімка, що міститься у BigVM-s1.disk. BigVM-s1.disk містить стан жорсткого диска VM на момент зйомки, тоді як BigVM.disk містить усі відмінності на вашому диску з моменту зйомки.

Що станеться, коли ви повернетесь до старшого знімка? Програмне забезпечення VM викидає вміст BigVM.disk і запускається з нового пустого BigVM.disk, який все ще вказує на BigVM-s1.disk.


2

Це лише написання відмінностей у файлах, змінених за час знімка, а не повний диск віртуальної машини. Як і Unix diff та patch, за винятком більш досконалої версії, яка відрізняється на бінарному рівні та знає про інші деталі вашої віртуальної машини.


1

Принаймні, у знімках VMware, що трапляється, це те, що знімок - це в основному сигнал VMX для запуску нової контрольної точки для запису диска та стану машини. Залежно від того, вимкнено вимкнений комп'ютер або вимкнено, відновлення знімка може просто спричинити заниження всього, що трапилося минулого пункту пропуску. В іншому випадку всі ваші дискові сектори VM перетворюються на копіювання, а це означає, що при виконанні гарячого відновлення знімка потрібно лише переписати сектори, які були змінені з моменту зйомки. Тож тому швидше.


-1

Робота над знімками VMware та її внутрішніми характеристиками найкраще пояснюється @ http://www.pcclm.com/2012/02/virtual-machine-snapshots-in-vmware.html


3
Ласкаво просимо до ServerFault! Хоча посилання на зовнішній довідковий матеріал рекомендується, ми також очікуємо, що кожна відповідь буде повною, навіть якщо в майбутньому ваші посилання будуть порушені. Ви можете відредагувати цю відповідь та додати додаткову інформацію.
Skyhawk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.