Libvirt外部快照

外部快照的创建

实验环境

CentOS 7

  • 升级QEMU

CentOS 7自带的qemu版本太低需要升级

$ sudo yum install -y gcc
$ sudo yum install -y zlib-devel
$ sudo yum install -y glib2-devel
$ sudo yum install -y spice-server-devel.x86_64
$ sudo yum install -y usbredir-devel

$ ./configure --target-list=x86_64-softmmu --enable-spice --enable-usb-redir --enable-vnc --enable-kvm --disable-docs
$ make
$ make install
$ sudo yum remove qemu-kvm

$ ln -s qemu-kvm /usr/local/bin/qemu-system-x86_64
# sed -e 's/SELINUX=.*/SELINUX=disabled/g' -i /etc/selinux/config && reboot
# sed -e 's/\#user = "root"/user = "root"/' /etc/libvirt/qemu.conf
# sed -e 's/\#group = "root"/group = "root"/' /etc/libvirt/qemu.conf
# service libvirtd restart
# /usr/libexec/qemu-kvm -M ?
# virsh edit domain
# 根据上面的结果修改machine
# <os>
#    <type arch='x86_64' machine=''>hvm</type>
#  </os>
创建外部快照
  • 查询主机上的虚拟机
# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     mos                            running
 -     ubuntu                         关闭
 -     winxp                          关闭
  • 查询虚拟机快照列表
# virsh snapshot-list mos
 名称               生成时间              状态
----------------------------------------------------
  • 查询虚拟机的磁盘
# virsh domblklist mos
目标     源
------------------------------------------------
hda        /var/lib/libvirt/images/mos.qcow2
hdb        -
  • 创建外部快照
# virsh snapshot-create-as mos fsnap "first snapshot" --atomic --disk-only --diskspec hda,snapshot=external,file=/var/lib/libvirt/images/snapshot.qcow2
# virsh snapshot-list mos
 名称               生成时间              状态
------------------------------------------------------------
 fsnap                2016-07-03 10:52:15 +0800 disk-snapshot
外部快照文件
  • 快照文件

拍摄快照后会自动生成对应的快照文件,快照文件的根元素<domainsnapshot>下的<disks>元素记录了参与快照的磁盘信息;<domain>记录了快照前虚拟机的状态,即快照前virsh dumpxml domain的信息。通过快照文件我们可以知道哪些磁盘在快照中发生了变化,以及拍摄快照前磁盘的状态。

# pwd
/var/lib/libvirt/qemu/snapshot/mos
# ls
fsnap.xml

外部快照的恢复

目前virsh还不支持外部快照的恢复,所以直接使用virsh snapshot-revert命令是不行的,那么如何手工恢复到快照前的状态呢?

Active层

虚拟机磁盘链的最末端就是Active层,也就是保存磁盘数据变化的层

  • 快照前
mos.qcow2(Active)
  • 快照后
mos.qcow2(fsnap) <==[backing_file]== snapshot.qcow2(Active)

快照后新的磁盘变化将被写入snapshot.qcow2中,mos.qcow2的文件内容将不再改变

  • 再次快照
mos.qcow2(fsnap) <==[backing_file]== snapshot.qcow2(ssnap) <==[backing_file]== active.qcow2(Active)
  • 恢复快照

从上面可以看出,恢复到快照fsnap,就是要再次重复次快照后的动作,以mos.qcow2作为backing_file再创建一个新的Active层。虽然fsnap保存了Active层的磁盘信息,但是Active层并不是快照,原先的Active层没有办法再回去,所以要删除对应磁盘文件。

恢复步骤
  • 查询要恢复快照的状态

根据域名和文件名在/var/lib/libvirt/qemu/snapshot/找到对应的快照文件,并找到参与快照的磁盘在<domain>元素中的file信息

<source file='/var/lib/libvirt/images/mos.qcow2'/>
  • 创建新的Active层

以找到的磁盘文件为backing_file创建新的Active层

# qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/mos.qcow2,backing_fmt=qcow2 /var/lib/libvirt/images/revert_fsnap.qcow2
  • 编辑虚拟机配置文件

根据新创建的Active层磁盘文件信息修改虚拟机的当前磁盘信息

file='/var/lib/libvirt/images/snapshot.qcow2'
修改为
file='/var/lib/libvirt/images/revert_fsnap.qcow2'
  • 编辑虚拟机快照文件

根据新创建的Active层磁盘文件信息使用命令virsh snapshot-edit修改根元素<domainsnapshot>下的<disks>元素

file='/var/lib/libvirt/images/snapshot.qcow2'
修改为
file='/var/lib/libvirt/images/revert_fsnap.qcow2'
  • 修改虚拟机当前快照

使用virsh snapshot-current命令修改虚拟机当前快照

# virsh snapshot-current mos fsnap
已将快照 fsnap 设定为 current
  • 删除旧Active层的磁盘文件
# rm -rf snapshot.qcow2

外部快照的删除

假设虚拟机当前快照如下,要删除的快照为ssnap

mos.qcow2(fsnap) <==[backing_file]== snapshot.qcow2(ssnap) <==[backing_file]== active.qcow2(Active)
  • 合并Active层

因为blockcommit的速度比blockpull要快,所以使用blockcommitActive层的磁盘文件合并到待删除的磁盘文件snapshot.qcow2,并自动更新Active层

# virsh blockcommit mos hda --base snapshot.qcow2 --pivot --active
# virsh domblklist mos
目标     源
------------------------------------------------
hda        /var/lib/libvirt/images/snapshot.qcow2

如果快照链很长,只是删除其中的某个元素,那么不能从Active层开始合并,需要指定--top参数

  • 删除快照ssnap元数据
# virsh snapshot-delete mos ssnap --metadata
已删除域快照 ssnap
  • 删除Active层的磁盘文件
# rm -rf active.qcow2

问题处理

虚拟机在启动后,很快就自动进入paused状态

### 解决办法:检查虚拟机对应的qemu日志,查看是否存在磁盘读写问题

转载于:https://www.cnblogs.com/silvermagic/p/7666169.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值