З огляду, ваше програмне забезпечення для віртуалізації має відслідковувати чотири речі: стан процесора, оперативну пам’ять, конфігурацію (скільки мережевих карт у 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.