kvm 快照

针对libvirt虚拟机主要有两类的快照:内部和外部,它们每一个都有它们的优势和劣势。

内部快照:在你快照后文件还是一个镜像文件,virt-manager提供了一个图形工具去管理内部快照。下面是几个内部快照的限制。

1. 仅支持qcow2格式。

2. 当快照时,虚拟机是暂停的。

3. 不支持LVM存储沲。

外部快照:是基于写时复制的概念,当创建快照时,源镜象变成只读和新一个磁盘镜像层被自动创建。(不支持图形界面管理)

libvirt支持以下几种格式:

只介绍几个常用的:
raw: 由于这个格式没有附加的源数据源层,因此它有非常小的负载,有着较高的性能优势 。当然它缺少了个比如内部快照、压缩和其它特性。假如你运行高度的I/0密集应用,强烈建议采用这种格式 。
qcow2:这是专门给虚拟化,像云这些设计的。支持快照(内部和外部),压缩、加密等。也支持按需分配和预先分配的方式。

可以使用以下两种方式去看下VM disk 镜像的格式。
第一种方式:

file disk1

disk1: QEMU QCOW Image (v3), 1073741824 bytes

file disk2

diskd: data
第二种方式:

qemu-img info disk1

image: disk1
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false

磁盘格式转换:
RAW to QCOW2:
$ qemu-img convert -f raw -O qcow2 vm_disk1.img vm_disk1.qcow2

QCOW2 to RAW:
$ qemu-img convert -f qcow2 -O ram vm_disk2.qcow2 vm_disk2.img

内部快照:
下面我们主要介绍创建、删除、和还原(内部快照)。
仅仅qcow2的磁盘支持内部快照。如果不是这个格式 话使用qemu-img命令进行转换。
在这里我们使用的虚拟机CentOS_01来做内部快照的案例。
(1)校验我们用的主机镜像信息

virsh snapshot-list CentOS_01

Name Creation Time State

(2)创建内部快照,我们这里列出和快照相关的命令简单介绍。
snapshot-create: 基于xml文件创建快照。
snapshot-create-as: 从创建的指令中创建快照。
snapshot-current: 获得或者设置当前快照。
snapshot-delete:删除一个域的快照。
snapshot-dumpxml:备份一个域的快照。
snapshot-edit:编辑快照。
snapshot-info:获取一个快照的信息。
snapshot-list: 列出这个域的快照。
snapshot-parent: 获取这个快照的父快照。
snapshot-revert: 还原快照。

创建内部快照的简单示例:

vrish snapshot-create CentOS_01

(3)使用定义的名字和描述来创建快照。

virsh snpahsot-create-as CentOS_01 --name "Snapshot 1" --description"Frist snapshot" --atomic

我们在创建快照时,强烈建议使用--atomic,这就相当于Mysql的事务一样。

(4)校验刚才我们创建的快照。

virsh snapshot-list CentOS_01

Name Creation Time State

snapshot1 2015-08-19 08:41:23 +0530 running

(5)我们执行第三步创建多个快照,看下父子关系等。和怎么还原,创建好后结果应该如下:

virsh snapshot-list CentOS_01 --parenet

Name Creation Time State Parent

Snapshot1 2015-08-19 09:00:13 +0530 running (null)
Snapshot2 2015-08-19 09:00:43 +0530 running Snapshot1
Snapshot3 2015-08-19 09:01:00 +0530 shutoff Snapshot2
也可以使用--tree的选项,来显示快照的间的关系 。

virsh snaphshot-list CentOS_01 --tree

我们也可以使用qemu-img来快照硬盘的详细信息。

qemu-img info /var/lib/libvirt/qemu/vmdisk1.qcow2

image: /var/lib/libvirt/qemu/vmdisk1.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 1.6G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1439951249 220M 2015-08-19 07:57:29 00:09:36.885
2 Snapshot1 204M 2015-08-19 09:00:13 00:01:21.284
3 Snapshot2 204M 2015-08-19 09:00:43 00:01:47.308
4 Snapshot3 0 2015-08-19 09:01:00 00:00:00.000
Format specific information:

我们也可以使用check选项来校验我们的磁盘信息。

qemu-img check /var/lib/libvirt/qemu/vmdisk1.qcow2

还原内部快照:
还原快照的命令格式如下:

virsh snapshot-revert <vm-name> --snapshotname "Snapshot1"

删除内部快照:

virsh snapshot-list CentOS_01

Name Creation Time State

Snapshot1 2015-08-19 09:00:13 +0530 running
Snapshot2 2015-08-19 09:00:43 +0530 running
Snapshot3 2015-08-19 09:01:00 +0530 shutoff
snapshot4 2015-08-19 10:17:00 +0530 shutoff

virsh snapshot-delete CentOS_01 Snapshot2

Domain snapshot Snapshot2 deleted

virsh snapshot-list CentOS_01

Name Creation Time State

Snapshot1 2015-08-19 09:00:13 +0530 running
Snapshot3 2015-08-19 09:00:43 +0530 running
snapshot4 2015-08-19 10:17:00 +0530 shutoff

使用vrit-manager管理快照
(1)

(2)

(3)创建快照

外部快照:
几乎所有格式的磁盘的镜像都越看越外部快照。
创建外部快照:
(1)查看我们要使用做实验的虚拟机详细信息。

virsh domblklist Win7_01 --details

Type Device Target Source

file disk vda /vmstore1/win7_01.img

(2)检查我们想要做快照的虚拟机是否在运行状态 。

virsh list

Id Name State

4 Win7_01 running
无论主机是否在运行状态或者是离线状态,我们都可以经主机创建外部快照。

(3)创建快照

virsh snapshot-create-as win7_01 snapshot1 "My First Snapshot" --disk-only --atomic

--disk-only参数是指仅仅对磁盘做快照。
--atomic: 这往往是保证数据的完整性,证明要么失败要么成功,不会停留在中间状态 。造成数据的不一致。

(4)上面的快照仅是磁盘的状态 ,不包括内存的。

virsh snapshot-info win7_01 snapshot1

(5) 现在列出我们刚才的虚拟机的关联的磁盘。

virsh domblklist win7_01

从上面的结果我们可以看到,我们磁盘的源改变了。

(6)我们来查看我们的源磁盘信息。

qemu-img info /vmstore1/win7_01.snapshot1

image: /vmstore1/win7_01.snapshot1
file format: qcow2
virtual size: 19G (20401094656 bytes)
disk size: 1.6M
cluster_size: 65536
backing file: /vmstore1/win7_01.img
backing file format: raw
从以上的信息我们看到backing file是指向/vmstore1/win7_01.img

(7)以上的信息表明了我们的新镜像/vmstore1/win7_01.snapshot1目前是可读写的,它的源镜像是/vmstore1/win7_01.img 。
vmstore1/win7_01.img = is backing file (original disk )
/vmstore1/win7_01.snapshot1 = is newly created overlay image where now all the writes are happening

(8)现在我们创建第二个快照,这次创建时,我们把它保存在不同的地方 。默认快照和磁盘是在相同的存储沲里面的。

virsh snapshot-create-as Win7_01 snapshot2 "Second snapshot" --disk-only --diskspec vda, snapshot=external, file=/snapshot_store/win7_01.snapshot2 --atomic

以上--diskspec这个选项是创建快照在别的位置。 这个选项要按照如下格式 :disk[,snapshot=type][,driver=type][,file=name] format.

(9)配置第三个快照

virsh snapshot-create-as Win7_01 snapshot3 "Third Snapshot" --disk-only --quiesce

   Domain snapshot snapshot3 created

quiesce: Quiesce是一个文件系统冻结的机制。它使文件系统能够进行一致的状态。假如没有这个选项的话,这个块照将不会包含脏数据。也就是说,在快照期间,可能会导致镜像的错误。需要使用该功能的话,qemu-agent也需要安装。要不然会报如下错误。
error: Guest agent is not responding: Guest agent not available for now

让我们看一下,各个快照 之间的链是怎么样的一个形式。

  1. 列出虚拟机关联的所有快照 。

    virsh snapshot-lsit Win7_01

    Name Creation Time State

    snapshot1 2015-08-21 10:21:38 +0530 disk-snapshot
    snapshot2 2015-08-21 11:51:04 +0530 disk-snapshot
    snapshot3 2015-08-21 11:55:23 +0530 disk-snapshot

  2. 检查对于当前磁盘而言,哪一个是活动的磁盘快照 。

    virsh domblklist Win7_01

    Target Source

    vda /snapshot_store/win7_01.snapshot3

(3) 使用以下命令进行查看各个间的关系。

qemu-img info --backing-chain /snapshot_store/win7_01.snapshot3| grep backing

backing file: /snapshot_store/win7_01.snapshot2
backing file format: qcow2
backing file: /vmstore1/win7_01.snapshot1
backing file format: qcow2
backing file: /vmstore1/win7_01.img
backing file format: raw
也可以看下面的图进行理解它们之间的关系。

从外部快照进行还原
外部快照可以在主机活动或离线状态创建,但是却没有什么内建的特去还原和删除快照。假如你使用virsh 还原外部快照的话。那么将会报错。

virsh snapshot-revert Win7_01 --snapshotname "snapshot3"

error: unsupported configuration: revert to external snapshot not supported yet

我们可以手动的还原:
(1)查看我们已经有的快照 。

virshj snapshot-list Win7_01

Name Creation Time State

snapshot1 2015-08-21 10:21:38 +0530 disk-snapshot
snapshot2 2015-08-21 11:51:04 +0530 disk-snapshot
snapshot3 2015-08-21 11:55:23 +0530 disk-snapshot

假如我们想还原snapshot2的话,首先我们是需要关闭虚拟机,和编辑指向snapshot2磁盘的XML文件。
(1) # virsh snapshot-dumpxml Win7_01 --snapshotname snapshot2 | grep ‘source file‘ | helad -1
<source file=‘/snapshot_store/win7_01.snapshot2‘/>

(2) 从上面我们可以看到,快照 snapshot2关联的文件是,/snapshot_store/win7_01.snapshot2文件,校验它的完整性。
#qemu-img check /snapshot_store/win7_01.snapshot2
No errors were found on the image.
46/311296 = 0.01% allocated, 32.61% fragmented, 0.00% compressed clusters
Image end offset: 3670016

如果上面检测报错误的话,我们可以使用-r leaks/all参数来进行修复。但不能保证一定能够修复好。

(3)现在我们去操作XML文件,我们可以从XML文件/snapshot_store/win7_01.snapshot2中添加或者移除磁盘。编辑和修改磁盘的路径。可以使用virt-xml命令。

virt-xml Win7_01 --remove-device --disk target-=vda

vir-xml --add-device --disk /snapshot_store/win7_01.snapshot2,format=qcow2, bus=virtio

(4)上面的命令我们添加了win7_01.snapshot2作为我们的启动盘。通过以下的命令进行校验

virsh domblklist Win7_01

Target Source

vda /snapshot_store/win7_01.snapshot2

(5)然后开启虚拟机,回到我们以前的snapshot2的状态了。

删除外部快照
删除快照也是一个特别麻烦的流程,我们需要手工的把原先的基本层 进行合并后,才能删除快照。针对两并快照 ,有两种方式:
blockcommit: 合并基本层的数据,这样的方式是比较快的。因为这相当于把后面的快照文件往基本的镜像文件里面去合并。
blockpull: 使用这种机制恰恰和上面的那种方式相反,会比较慢一点。这个合并的文件须是qcow2文件。

使用blcokcommit合并外部的快照:
(1)列出当前使用的活动磁盘。

virsh domblklist VM1

Target Source

hda /vmstore1/vm1.snap4

(2)现在列举了出后备的文件链/vmstore1/vm1.snap4
#qemu-img info --backing-chain /vmstore1/vm1.snap4 | grep backing
backing file: /vmstore1/vm1.snap3
backing file format: qcow2
backing file: /vmstore1/vm1.snap2
backing file format: qcow2
backing file: /vmstore1/vm1.snap1
backing file format: qcow2
backing file: /vmstore1/vm1.img
backing file format: raw

3.现在合并所有的快照 镜像到基本的镜像。
#virsh blockcommit VM1 hda --verbose --pivot --active
Block Commit: [100 %]
Successfully pivoted

  1. 现在检查当前活动的磁盘快设备。

    virsh domblklist VM1

    Target Source

    hda /vmstore1/vm1.img

虽说我们合并完成了,但是我们查看该虚拟机的快照 时,仍然有4个快照 。如下图所示:

virsh snapshot-list VM1

Name Creation Time State

snap1 2015-08-22 09:10:56 +0530 shutoff
snap2 2015-08-22 09:11:03 +0530 shutoff
snap3 2015-08-22 09:11:09 +0530 shutoff
snap4 2015-08-22 09:11:17 +0530 shutoff

移除快照使用如下命令:

virsh snapshot-delete VM1 snap1 --children --metadata

virsh snapshot-list VM1

Name Creation Time State

使用blockpull的方式合并外部快照。
(1)列出当前活动的磁盘。

virsh domblklist VM2

Target Source

hda /vmstore1/vm2.snap1

(2)现在列出支持的文件链/vmstore1/vm1.snap4:
#qemu-img info --backing-chain /vmstore1/vm2.snap1 | grep backing
backing file: /vmstore1/vm1.img
backing file format: raw

(3)合并基本的镜像到快照的镜像。
#virsh blockpull VM2 --path /vmstore1/vm2.snap1 --wait --verbose
Block Pull: [100 %]
Pull complete

(4)现在移除基本的镜像文件

virsh snapshot-delete VM1 snap1 --metadata

我们在合并和删除快照的任务时,不需要把虚拟机停机。

原文地址:http://blog.51cto.com/aishangwei/2124944

时间: 2024-08-12 14:23:55

kvm 快照的相关文章

KVM快照管理

KVM快照管理 1.创建快照virsh snapshot-create daixuan1 [[email protected] ~]# virsh snapshot-create daixuan1 Domain snapshot 1455801179 created 查看快照 [[email protected] ~]# qemu-img info /data/daixuan1.qcow2 image: /data/daixuan1.qcow2 file format: qcow2 virtua

kvm快照

Kvm快照: 1.基于lvm的快照 2.kvm自带的快照功能(需要qcow2 磁盘文件才支持快照) 关闭kvm虚拟机: 查看磁盘文件信息: [[email protected] ~]# qemu-img info /var/lib/libvirt/images/ubuntu16-1.img image: /var/lib/libvirt/images/ubuntu16-1.img file format: raw virtual size: 0 (0 bytes) disk size: 0 磁盘

KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 快照 (Nova Instances Snapshot Libvirt)

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 本文将梳理 QEMU/KVM 快照相关的知识,以及在 OpenStack Nova 中使用 libvirt 来对 QEMU/KVM 虚机做快照的过程. 1. QEMU/KV

烂泥:KVM快照的创建与恢复

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 因为要做有关KVM虚拟机的实验,所以需要虚拟机生成快照.查询相关资料,说KVM可以使用两种方法生成虚拟机的快照. 方法一.使用qemu-img snapshot命令进行生成快照 方法二.使用virsh snapshot-create-as命令进行生成快照 其实经过我的测试,发现使用qemu-img snapshot命令生成快照后,即使恢复快照也是没有用的.虚拟机还是当前的状态,而不是快照之前的状态.不知道为什么,而且还不稳定,经常报错. 注意要使用

KVM(七)使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照

本文将梳理 QEMU/KVM 快照相关的知识,以及在 OpenStack Nova 中使用 libvirt 来对 QEMU/KVM 虚机做快照的过程. 1. QEMU/KVM 快照 1.1 概念 QEMU/KVM 快照的定义: 磁盘快照:磁盘的内容(可能是虚机的全部磁盘或者部分磁盘)在某个时间点上被保存,然后可以被恢复. 磁盘数据的保存状态: 在一个运行着的系统上,一个磁盘快照很可能只是崩溃一致的(crash-consistent) 而不是完整一致(clean)的,也是说它所保存的磁盘状态可能相

KVM快照备份

查看KVM磁盘格式 [[email protected]_05 ~]# qemu-img info /image-1/V-GIT-237.img  image: /image-1/V-GIT-237.img file format: raw virtual size: 50G (53687091200 bytes) disk size: 45G 可以看到磁盘格式为raw,此格式下不能进行快照.需要转换成qcow2格式. 2.转换磁盘格式 [[email protected]_05 ~]# qem

kvm快照备份和恢复

查看磁盘格式: [[email protected]04 ehs-rac-01]# cd /var/lib/libvirt/images/ [[email protected]-as-04 images]# qemu-img info ehs-rac-01.qcow2 image: ehs-rac-01.qcow2 file format: qcow2 virtual size: 30G (32212254720 bytes) disk size: 34G cluster_size: 65536

kvm利用kvm快照备份虚拟机

一.新建lvm快照: lvcreate -L 100M -s -n lvmsp1 /dev/vg1/lvmsp lvcreate -s /dev/vg1/lvmsp -n lvmsp1 -L 100M 二.利用lvm快照,将修改xml配置文件,执行下文件路径.

KVM虚拟机快照

KVM默认的文件格式是raw,也就是使用文件来模拟实际的硬盘(当然也可以使用一块真实的硬盘或一个分区),不过raw格式只支持内存快照(就是启动的 时候加-snapshot,所有更改都写到内存),重启之后就没了. raw格式不支持磁盘快照,因此要使用qcow或qcow2文件格式. 1.kvm创建快照 创建快照有两个命令都能实现 a.snapshot-create # virsh snapshot-create rhel6.3 Domain snapshot 1420722577 created #