С помощью моментального снимка ваше программное обеспечение для виртуализации должно отслеживать четыре вещи: состояние процессора, ОЗУ, конфигурацию (сколько сетевых карт в ВМ?) И диск. Я игнорирую первые три вещи, потому что они не огромные объемы данных, программное обеспечение может просто делать копии относительно небольших структур данных и сохранять их в файле. Таким образом, остается только снимок диска для объяснения.
Во-первых, то, что виртуальная машина видит как жесткий диск, на самом деле представляет собой просто набор файлов в файловой системе хоста. Чтобы сделать снимок, программное обеспечение виртуальной машины берет диск виртуальной машины в определенный момент времени, сохраняет его, открывает новый пустой файл на диске и выполняет схему копирования при записи при каждом последующем доступе к диску.
Допустим, ваш файл на диске - BigVM.disk. Вы делаете снимок, и теперь ваша программа VM переименовывает ваш диск в BigVM-s1.disk, а затем создает новый пустой BigVM.disk. Когда ваша виртуальная машина работает, все запросы на чтение проходят через BigVM.disk. Если в этом файле нет записи для той части диска, которую хочет ваша виртуальная машина, возвращаются данные из BigVM-s1.disk. При записи данные записываются в BigVM.disk вместо BigVM-s1.disk. Дальнейшее чтение этого же сектора вернет данные из BigVM.disk вместо исходного снимка, содержащегося в BigVM-s1.disk. BigVM-s1.disk содержит состояние жесткого диска вашей виртуальной машины на момент создания снимка, в то время как BigVM.disk содержит все различия на диске, начиная с этого снимка.
Что происходит, когда вы возвращаетесь к более старому снимку? Программное обеспечение VM выбрасывает содержимое BigVM.disk и запускается заново, с новым пустым BigVM.disk, который все еще указывает на BigVM-s1.disk.