一般的虚拟机镜像文件,比较直接的做法是存放在一个img镜像文件里,或者直接使用/dev/sda*分区。但是万一把虚拟机分区“玩坏”了就不好恢复了。
qemu支持一种镜像格式qcow2,能够创建增量镜像,这样可以把修改存在新文件里,当出错时可以保护原始镜像。这个功能非常有用,【xen似乎支持qcow2,待查】但是Xen自身不支持。
Xen想要使用增量镜像,只能使用LVM文件系统的snapshot快照功能。(note:Xen HVM虚拟机因为使用qemu做前端,所以同样可以用qcow2格式。但是PV虚拟机就只能用LVM snapshot)
LVM可以对一个分区创建多个快照(snapshot),作为分区的增量镜像。在快照里的修改不会影响到源分区。
在创建快照时,需要指定快照的大小。当snapshot的空间被填满时,LVM会丢弃这个快照(奇怪的设定),所以尽量不要塞满……而比较新的lvm版本支持把snapshot与本体分区合并,如果建立了快照又想同时修改本体和快照,可以使用这个merge功能。
下面是具体的配置。
环境:
LVM版本为2.02.54。这个版本比较老。比较新的版本支持把snapshot与本体分区合并。
GUI使用KDE的kvpm,和Gnome下的system-config-lvm
LVM的文件系统可以定义在物理分区上,或者镜像文件里。我使用的是/dev/sda*分区。建立lvm分区:
sudo pvcreate /dev/sda11 -v
注意这一步会抹掉分区头部信息。剩下的分配卷组/分区的步骤可以在GUI里完成。最后的结果是这样:
/dev/sda11(Physical Volume)
--- vg0(Group0)
------ PV (10GB, ext4)
------ swap (512MB, swap)
其他的预留给hvm虚拟机和snapshot
安装配置好镜像pv里的所有内容后,使用GUI建立两个snapshot:pv-shot1和pv-shot2,大小均为2GB
然后把虚拟机配置文件做相应的修改:
xm_vars.var('volume', use="Specify the logical volume (snapshot) used")
disk = [
"phy:/dev/vg0/%s,xvda2,w" % volume,
]
name = 'debian-pv-%s' % volume
运行时的命令行:
sudo xm create -c debian-pv.cfg volume=pv-shot1
这样启动的虚拟机,所有的修改都在snapshot中进行,原始镜像可以得到很好的保护。