使用KVM创建&恢复快照

快照?什么是快照?最简单的理解就是在系统运行时记录一下当前系统使用情况、内存分配、磁盘存储等方面快速备份的一种手段。相比于传统备份速度快得多而且回滚方便!

哪如何使用快照?windows的用户就歇菜吧没这功能!对于linux用户来说使用LVM文件系统是可以创建快照的,专门用于备份文件系统的文件!说到现在好像没有扯到KVM虚拟化上去耶!好吧,只是在说明之间能够让大家简单的了解一下快照。

对于虚拟化来说不管是vmware xen kvm都能够拍摄快照,并且快照包含了所以操作系统状态的信息(比LVM文件系统强多了)并且恢复方便、速度快、复制快照创建新的操作系统等优势。所以使用虚拟化最关键的部分就是快照功能了!原因就是能够方便的部署自己的服务内容。使用在桌面云端可以更可靠的保护用户资料,并且误操作能够大大降低损失。好处还是多多的吧?接下来我们说说关于KVM使用快照功能!

kVM快照分类:

在KVM使用中快照一共分为两种:内置快照和外置快照

内置快照意思就是还原的快照合并在磁盘映像文件所在的文件中!

当然外置快照的意思就是将拍摄的快照放到指定地点!

执行快照状态:

所谓的快照状态一共分为两种:关机状态快照、开机状态快照

关机状态快照:在VM系统关机时候创建快照,数据可以保证一致性。

开机状态快照:在VM系统运行时候创建快照,拍摄快照以后的数据是无法保证一致性的!

虚拟机磁盘数量状态:

创建快照也得看看虚拟机磁盘状态,一共分为两种:单盘、多盘。

单盘:创建单盘快照不涉及原子性

多盘:创建多盘快照涉及原子性,主要依赖于 qemu 的 transaction 实现。主要分两个方面:

1、所有快找点相同

2、拍摄快照所有盘要么全部成功、要么全部失败!

在KVM虚拟化中创建快照的方式(也可以是工具栈的使用):

第一种使用qemu-img snapshot 命令来创建快照,在本博文中是被取出的。非常不实用,创建快照只能在关机状态下进行。对于走在虚拟化的服务器来说7*24小时开机最好是必须的…所以这种默认工具栈不实用所以我这里就不说了!

第二种使用virsh工具栈来创建快照,这个非常推荐因为可以在VM运行时候创建快照。不用让虚拟机关机。在上上一期我们说道过virsh工具来管理虚拟机,只是说了基本操作并没有说到快照。还记得不?使用virsh –help查询帮助,关于快照管理的有这些:

snapshot-create:从XLM中创建快照
snapshot-create-as:创建快照
snapshot-current:Get or set the current snapshot
snapshot-delete:删除快照
snapshot-dumpxml:Dump XML for a domain snapshot
snapshot-edit:edit XML for a snapshot
snapshot-info:查看快照详细信息
snapshot-list:查看某domain快照
snapshot-parent:Get the name of the parent of a snapshot
snapshot-revert:从哪个快照还原

我把常用的都搞成中文方便大家观看,内容在下面是直接复制的–help内容:

kvm13

第三种在virt-manager中创建快照:这种非常简单图形化操作!不过我在最后会说明!


使用virsh工具栈创建内置快照:

首先看看基本使用语法:
virsh snapshot-create-as –domain NAME –name “NAME” –description <STRING>

选项解释:
domain:VM名称
name:给快照起名
description:快照的详细描述

除此之外还能选择:
live:take a live snapshot

以centos7.0 VM举例:

[root@localhost ~]# virsh list
 Id Name State
----------------------------------------------------
 12 wintest2 running
 13 centos7.0 running
#查看有哪些运行中的VM
[root@localhost ~]# virsh snapshot-list centos7.0
 Name Creation Time State
------------------------------------------------------------
 clean-os 2016-09-28 10:09:47 +0800 running
 wget&amp;lftp 2016-09-28 12:43:11 +0800 shutoff
#之前我有创建过快照,这个命令+domain name为查看此domain中的快照。
#接下来我进入虚拟机中安装vim!

kvm14

安装完毕以后我们再创建一个快照:

[root@localhost ~]# virsh snapshot-create-as --domain centos7.0 --name "install_vim" --description "install the vim in centos7.0"
Domain snapshot install_vim created #这样就算创建完毕了
[root@localhost ~]# virsh snapshot-list centos7.0
 Name Creation Time State
------------------------------------------------------------
 clean-os 2016-09-28 10:09:47 +0800 running
 install_vim 2016-09-29 10:12:07 +0800 running
 wget&amp;lftp 2016-09-28 12:43:11 +0800 shutoff
#这个快照我是在centos7.0 VM运行时候创建的,关机创建语法都是一样的。

接下来我们创建一个windows的快照:

[root@localhost ~]# virsh snapshot-create-as --domain wintest1 --name "clean os"
Domain snapshot clean os created
[root@localhost ~]# virsh snapshot-list --domain wintest1
 Name Creation Time State
------------------------------------------------------------
 clean os 2016-09-29 10:22:05 +0800 shutoff
 hello 2016-09-28 10:20:38 +0800 shutoff
#这样windows的VM快照就算创建完毕了,里面的hello是我以前的快照!

上文是在关机状态下面创建的windows创建的快照,现在试试在windows VM开机状态下创建快照会发生什么事情?

[root@localhost ~]# virsh snapshot-create-as --domain wintest1 --name "wenben"
Domain snapshot wenben created
#我这边是成功的,如果你创建失败会出现这个:
error: operation failed: Error -22 while writing VM

在base源安装的包组是qemu1.5版本的但是与centos7.0冲突是个bug!!!当时遇到这个问题搞了我一个上午去追求答案,结果在红帽论坛找到这么一个解释:

That message comes from qemu (file a bug report with them for poor-quality error message; looks like someone forgot to convert a negative value back into a positive EINVAL errno value).
As for why qemu is seeing an EINVAL, I have to wonder if it is a case of AppArmor blocking access to a file. But that’s weird, as internal snapshots don’t normally need to open any additional files. At any rate, it’s more likely to be a qemu bug than a libvirt one.

后来在centos7.0 bug报告中才发现确实有这么一个bug,详细网址在:https://bugs.centos.org/view.php?id=10696

那么说了这确实是个BUG那么解决办法呢?答案是有的,但是我要卖个关子等文章结尾汇报问题所在的时候再讲解决办法。

好了,关于创建内置快照我这边就算说完了!接下来讲讲外置快照!

使用virsh创建外置快照:

我们先把centos7.0使用快照滚回干净的操作系统:

[root@localhost ~]# virsh snapshot-revert --domain centos7.0 --snapshotname "clean-os"

#这样就算恢复成功了,对了恢复快照的时候别忘了把VM关机再恢复!否则会无提示失败

接下来我们创建一个外置快照,不过首先给centos7.0安装一个mariadb:

kvm15

创建外置快照,在开机状态下:

[root@localhost ~]# virsh snapshot-create-as --domain centos7.0 --name "mariadb" --disk-only --diskspec vda,snapshot=external,file=/kvm/centos7\ test1/mariadb.img
Domain snapshot mariadb created
#这样就算创建完毕了,当然大多数人用centos7都是失败的,失败结果是:
error: Operation not supported: live disk snapshot not supported with this QEMU binary

为啥会失败?我首先先说说关于外置快照多出来的几个选项:

–disk-only:表示创建外置快照
–diskspec:定义磁盘属性并且定义放置位置等相关信息,相关信息包括:disk[,snapshot=type][,driver=type][,file=name] 使用的虚拟磁盘、快照种类、磁盘种类、文件放置位置。
–atomic:启用原子性,多为多盘的虚拟机!

说完了选项开始说说为啥大多数人在开机创建外置快照会出错,其实这个也是centos7的专属qemu bug。是因为qemu不兼容所导致的问题,解决办法是安装qemu-kvm-rehv包不要安装qemu-kvm(base源中的包)…但是安装完毕以后需要重启才生效!

关于汇报的教程和相关安装源在:https://www.redhat.com/archives/libvirt-users/2014-November/msg00106.html

首先添加安装源,安装镜像网站也在里面!第二步使用yum卸载qemu-kvm、第三步:使用yum install –nogpgcheck qemu-kvm-rehv 安装成功以后别忘了重启电脑!

随后就能解决外置快照无法在VM运行状态创建,并且还能解决windows VM无法在运行状态下创建快照以及创建外置快照等问题!

好了关于创建快照部分就算介绍完毕了,一共说了外置快照和内置快照两种创建方式以及相关bug解决方案,但是还有一个问题也得说说:

当你使用virsh启动一台虚拟机时候出现:error: Cannot access storage file ‘/root/centos7.0.img’ (as uid:107, gid:107): Permission denied 没有权限,我们需要在/etc/libvirt/qemu.conf配置文件中修改user和group为root即可!大约位置在:

# user = “qemu” # A user named “qemu”
# user = “+0” # Super user (uid=0)
# user = “100” # A user named “100” or a user with uid=100
#
user = “root”

# The group for QEMU processes run by the system instance. It can be
# specified in a similar way to user.
group = “root”

# Whether libvirt should dynamically change file ownership
# to match the configured user/group above. Defaults to 1.
# Set to 0 to disable file ownership changes.
#dynamic_ownership = 1

或者直接搜索user就能找到!这一期就算结束了,重要的bug已经解决希望大家多看即便关于bug的汇报对你有所帮助!

Comments

Leave a Reply

Your email address will not be published. Name and email are required