Как работает моментальный снимок виртуальной машины?
16
Пользуясь программным обеспечением для создания образов дисков более десяти лет, я смущаюсь, что виртуальные машины могут быть мгновенно сняты и восстановлены за считанные секунды, в то время как создание образа диска часто занимает часы.
Я могу сделать снимок виртуальной машины, переустановить ее на другую ОС, затем выполнить восстановление и каким-то волшебным образом в течение нескольких секунд моя старая виртуальная машина полностью восстановилась в том состоянии, в котором она была ранее.
Как это может произойти? Что на самом деле делает хост с виртуальной машиной, что делает это возможным?
При создании снимка все изменения, внесенные в исходный образ виртуального диска, фактически не вносятся в сам образ, а записываются в новый (снимок) файл диска. Это действие очень быстрое, потому что нет необходимости копировать весь образ виртуального диска, потому что оно работает по принципу копирования по принципу записи (только изменено, т.е. записанные блоки записываются в образ снимка). Обратите внимание, что изображение снимка увеличивается по мере того, как вы изменяете все больше и больше данных на исходном образе виртуального диска (который остается таким же, как в момент создания снимка). Скорее всего, оно будет намного меньше исходного изображения, но в худшем случае это будет точно такой же размер (если все блоки были изменены).
С этим новым снимком можно выполнить два действия:
Сброс снимка : очень быстрое действие. Диспетчер виртуальных машин просто удаляет файл образа снимка и возвращает управление исходному образу диска или некоторым из предыдущих снимков
Объединить снимок : менеджер виртуальной машины объединяет измененные блоки (то есть снимок) с исходным изображением. Это действие займет время в зависимости от того, сколько блоков исходного изображения изменилось. Опять же, в худшем случае весь исходное изображение будет перезаписано в случае, если все блоки из исходного изображения были записаны после создания снимка.
Все процедуры, описанные выше, также работают для нескольких снимков. В этом случае исходное изображение может быть одним снимком, а следующий снимок может ссылаться на блок на этом (первом) снимке. Таким образом, вы можете получить множество снимков, которые вы можете легко удалить или объединить.
Отмена снимка, как и любой процесс удаления изображения, может быть довольно медленной, если у вас включена функция очистки после удаления. Это функция безопасности для очистки пространства, используемого изображением или моментальным снимком, перед его освобождением для использования другими виртуальными машинами, в противном случае, используя низкоуровневое чтение блоков, можно будет прочитать данные, использованные предыдущей виртуальной машиной. И у любого решения для виртуализации, у которого нет этой функции, есть огромный недостаток безопасности
dyasny
Я попытался объяснить сценарий создания нескольких снимков и как сохранить изменения с каждым снимком. См. Это краткое объяснение о работе снимков VMware: cubicrace.com/2012/02/…
Пиюш Чордия
5
С помощью моментального снимка ваше программное обеспечение для виртуализации должно отслеживать четыре вещи: состояние процессора, ОЗУ, конфигурацию (сколько сетевых карт в ВМ?) И диск. Я игнорирую первые три вещи, потому что они не огромные объемы данных, программное обеспечение может просто делать копии относительно небольших структур данных и сохранять их в файле. Таким образом, остается только снимок диска для объяснения.
Во-первых, то, что виртуальная машина видит как жесткий диск, на самом деле представляет собой просто набор файлов в файловой системе хоста. Чтобы сделать снимок, программное обеспечение виртуальной машины берет диск виртуальной машины в определенный момент времени, сохраняет его, открывает новый пустой файл на диске и выполняет схему копирования при записи при каждом последующем доступе к диску.
Допустим, ваш файл на диске - 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.
Это только запись различий в файлах, измененных с момента моментального снимка, а не всего диска виртуальной машины. Как unix diff и patch, за исключением более сложной версии, которая отличается на двоичном уровне и знает о других деталях вашей виртуальной машины.
По крайней мере в снимках VMware происходит то, что снимок в основном является сигналом для VMX, чтобы начать новую контрольную точку для записи на диск и состояния машины. В зависимости от того, включена ваша виртуальная машина или нет, восстановление снимка может просто включать в себя удаление всего, что произошло после этой контрольной точки. В противном случае все секторы диска вашей виртуальной машины становятся копируемыми при записи, что означает, что при выполнении восстановления моментального снимка требуется только перезапись секторов, которые изменились с момента создания снимка. Вот почему это быстрее.
Добро пожаловать в ServerFault! Хотя ссылки на внешние справочные материалы приветствуются, мы также ожидаем, что каждый ответ будет полным, даже если в будущем ваши ссылки будут повреждены. Вы можете отредактировать этот ответ и добавить дополнительные детали.
С помощью моментального снимка ваше программное обеспечение для виртуализации должно отслеживать четыре вещи: состояние процессора, ОЗУ, конфигурацию (сколько сетевых карт в ВМ?) И диск. Я игнорирую первые три вещи, потому что они не огромные объемы данных, программное обеспечение может просто делать копии относительно небольших структур данных и сохранять их в файле. Таким образом, остается только снимок диска для объяснения.
Во-первых, то, что виртуальная машина видит как жесткий диск, на самом деле представляет собой просто набор файлов в файловой системе хоста. Чтобы сделать снимок, программное обеспечение виртуальной машины берет диск виртуальной машины в определенный момент времени, сохраняет его, открывает новый пустой файл на диске и выполняет схему копирования при записи при каждом последующем доступе к диску.
Допустим, ваш файл на диске - 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.
источник
Это только запись различий в файлах, измененных с момента моментального снимка, а не всего диска виртуальной машины. Как unix diff и patch, за исключением более сложной версии, которая отличается на двоичном уровне и знает о других деталях вашей виртуальной машины.
источник
По крайней мере в снимках VMware происходит то, что снимок в основном является сигналом для VMX, чтобы начать новую контрольную точку для записи на диск и состояния машины. В зависимости от того, включена ваша виртуальная машина или нет, восстановление снимка может просто включать в себя удаление всего, что произошло после этой контрольной точки. В противном случае все секторы диска вашей виртуальной машины становятся копируемыми при записи, что означает, что при выполнении восстановления моментального снимка требуется только перезапись секторов, которые изменились с момента создания снимка. Вот почему это быстрее.
источник
Лучше всего объяснить работу со снимками VMware и их внутренними компонентами @ http://www.pcclm.com/2012/02/virtual-machine-snapshots-in-vmware.html
источник