泻药
题主很仔细,快照确实是虚拟化很棒的一个技术特性,现在物理机角度理解它确实不太容易,我尝试白话解释下原理。
首先,虚拟机和物理机显著的不同是我们看待一台虚拟机是当成文件处理的,理解了这点,下面的问题就好理解了
先说建立快照,实质的过程把当前的内存状态打个标签写入硬盘的过程,这两部都很简单,就像是git的add .和commit一样存档而已,唯一的不同是,这个写入硬盘的过程是除了一个几k的标签外,不产生任何新文件的,并不是想象中的把当前文件另存为新文件,然后再有个专门的标签索引器来做时光穿梭,就像是:
原来硬盘里:
a (a).current
加载到内存里:
a
内存里写点东西:
abc
快照后内存里:
abc
快照后硬盘里
abc _abc.tag (abc).current
这里面abc是那个只增不减的块文件, (abc).current是当前的虚拟机文件状态标签,_abc.tag只是从(abc).current复制出来的一个存档小标签。
然后快照完继续操作虚拟机,这个过程叫copyonwrite但是直译过来并不直观,c@w的意思是指,不论你将来怎么对这个文件进行修改,都只能对文件是增量修改而已,写入过程不会造成旧档丢失,除非你快照删掉,才会把快照关键的存档连带去掉。
比如你添加d删除a
修改前硬盘:
abc _abc.tag (abc).current
加载到内存:
abc