Я использую программное обеспечение для создания образов дисков более десяти лет и считаю ошеломляющим, что виртуальные машины можно создавать и восстанавливать за считанные секунды, в то время как создание образов дисков часто занимает часы.
Я могу сделать снимок виртуальной машины, переустановить ее на другую ОС, затем выполнить восстановление, и каким-то волшебным образом в течение нескольких секунд моя старая виртуальная машина будет полностью восстановлена в том состоянии, в котором она была ранее.
Как такое могло случиться? Что на самом деле делает хост виртуальной машины с виртуальной машиной, что делает это возможным?
Когда вы создаете снимок, все изменения, внесенные в исходный образ виртуального диска, фактически не вносятся в сам образ, а записываются в новый файл (снимок) диска. Это действие так быстро, потому что нет необходимости копировать весь образ виртуального диска, потому что оно работает на копирование при записи принцип (только изменен, т.е. записанные блоки записываются в снимок образа). Обратите внимание, что изображение моментального снимка увеличивается по мере того, как вы меняете все больше и больше данных в исходном образе виртуального диска (который остается таким, каким был в момент создания моментального снимка). Скорее всего, оно будет намного меньше исходного изображения, но в худшем случае будет точно такого же размера (если бы все блоки были изменены).
С этим новым снимком можно сделать два действия:
Все процедуры, описанные выше, также работают для нескольких снимков. В этом случае исходное изображение может быть одним снимком, а следующий снимок может ссылаться на блок на этом (первом) снимке. Таким образом у вас может быть много снимков, которые вы можете легко отбросить или объединить.
Благодаря моментальному снимку ваше программное обеспечение виртуализации должно отслеживать четыре вещи: состояние процессора, оперативную память, конфигурацию (сколько сетевых карт в виртуальной машине?) И диск. Я игнорирую первые три вещи, потому что это не огромные объемы данных, программа может просто делать копии относительно небольших структур данных и сохранять их в файле. Итак, остается объяснить только моментальный снимок диска.
Во-первых, то, что виртуальная машина видит как жесткий диск, на самом деле является просто набором файлов в файловой системе хоста. Для создания моментального снимка программное обеспечение виртуальной машины берет диск виртуальной машины в определенный момент времени, сохраняет его, открывает новый пустой файл на диске и выполняет копирование при записи схема с каждым последующим обращением к диску.
Допустим, ваш дисковый файл - BigVM.disk. Вы делаете снимок, и теперь ваше программное обеспечение виртуальной машины переименовывает ваш диск в 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 содержит все различия на вашем диске с момента этого снимка.
Что произойдет, если вы вернетесь к более старому снимку? Программное обеспечение виртуальной машины выбрасывает содержимое 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