KVM学习笔记(快照与备份恢复)

1 备份策略参数

RPO:Recovery Point Objective,当前时间距恢复点的时间间隔
RTO:Recovery Time Objective,从当前时间开始恢复所需要的时间
宕机时间=RPO+RTO


宕机时间

2 KVM快照

快照分类:
磁盘快照

  1. 根据快照信息的保存位置
    内置快照:快照保存在虚拟机磁盘文件中
    外置快照:快照保存在外置单独的文件中
  2. 根据虚拟机状态
    关机快照
    运行态快照:需要在虚拟机中安装agent,能够将缓存中的数据写入磁盘,保证数据的一致性
  3. 根据磁盘数量
    单盘
    多盘:原子性,把为虚拟机所有磁盘创建快照的操作当做一个原子操作,要么全部成功,要么全部失败

内存快照
将内存中系统运行的信息进行保存
检查点快照
硬盘快照+内存快照,能够完整的保存虚拟机的状态。

3 virt-manager快照管理

安装qemu-guest-agent

yum -y install qemu-guest-agent

使用virt-manager管理界面创建的快照是检查点快照,能够同时保存硬盘和内存的状态。


virt-manager快照管理界面

创建快照

创建成功后,查看虚拟机的快照信息

#查看虚拟机的快照信息
[root@node1 ~]$ virsh snapshot-list Centos6 
 Name                 Creation Time             State
------------------------------------------------------------
 snapshot1            2020-10-22 17:52:47 +0800 running
#直接查看虚拟机磁盘文件的快照信息
[root@node1 ~]$ qemu-img snapshot -l /vmkvm_exp/centos6-disk0.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         snapshot1              220M 2020-10-22 17:52:47   00:04:34.993

接下来创建第二个快照


第二个快照创建完毕

virt-manager不直观,使用virsh命令行可以查看快照的父子关系,以及快照关系树

#snapshot-list加--parent参数,查询快照父子关系
virsh $ snapshot-list Centos6 --parent
 Name                 Creation Time             State           Parent
------------------------------------------------------------
 snapshot1            2020-10-22 17:52:47 +0800 running         (null)
 snapshot2            2020-10-22 18:04:33 +0800 running         snapshot1
#snapshot-list加--tree参数,查询快照树
virsh $ snapshot-list Centos6 --tree
snapshot1
  |
  +- snapshot2

4 快照删除

快照本质上是差分盘技术,创建快照时硬盘创建一个差分硬盘(子盘),后续增删的数据都是保存在子盘上的,父盘做只读处理,这个只读的父盘就是创建的快照。在做快照还原时,只需删除差分盘即可。读盘时先检查差异磁盘,再检查原有磁盘,这样看写入性能影响是很小的,但读盘时需要读几个虚拟磁盘文件,有一定性能影响。


快照示意图

在第一个快照的基础上可以再次创建快照,相当于子盘再继续创建差分盘(孙盘),这样子子孙孙延续下去。


两次快照示意图

删除快照时,会将选中快照对应的虚拟硬盘数据合并到它的差分子盘上,然后删除该差分盘。不会改变 VM的当前状态,只是删除了选中层次的差分硬盘。
快照2删除示意图

5 virsh管理快照

创建快照

snapshot-create-as <domain> [--name <string>] [--description <string>] [--print-xml] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] [--memspec <string>] [[--diskspec] <string>]...
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --name <string>  name of snapshot
    --description <string>  description of snapshot
    --print-xml      print XML document rather than create
    #打印快照xml文件而不创建快照
    --no-metadata    take snapshot but create no metadata 
    #不创建快照的metadata信息
    --halt           halt domain after snapshot is created
    --disk-only      capture disk state but not vm state
    #只创建磁盘快照,不包括内存
    --reuse-external  reuse any existing external files
    --quiesce        quiesce guest's file systems
    --atomic         require atomic operation
    #原子性,多块盘同时做,要么都成功要么都失败
    --live           take a live snapshot
    --memspec <string>  memory attributes: [file=]name[,snapshot=type]
    [--diskspec] <string>  disk attributes: disk[,snapshot=type][,driver=type][,file=name]
    #做外部快照时,指定磁盘有关参数

virsh $ snapshot-create-as Centos6 --name snapshot1
#当不加--name参数时,快照名称为时间戳

查看快照信息

snapshot-info <domain> [--snapshotname <string>] [--current]
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --snapshotname <string>  snapshot name
    --current        info on current snapshot

virsh $ snapshot-info Centos6 --current 
Name:           snapshot2
Domain:         Centos6
Current:        yes
State:          running
Location:       internal
Parent:         snapshot1
Children:       0
Descendants:    0
Metadata:       yes

回滚快照

snapshot-revert <domain> [--snapshotname <string>] [--current] [--running] [--paused] [--force]
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --snapshotname <string>  snapshot name
    --current        revert to current snapshot
    --running        after reverting, change state to running
    --paused         after reverting, change state to paused
    --force          try harder on risky reverts

virsh $ snapshot-revert Centos6 --snapshotname snapshot1

6 备份与恢复

6.1 backing_file

创建虚拟机磁盘文件时可以使用backing_file来指定父盘镜像创建子盘,VM挂载子盘后,看上去跟父盘完全一样,只是后续增删的数据都是保存在子盘上的。
可以基于同一个父盘创建多个子盘给不同的虚拟机使用,桌面云的链接克隆就是这个原理,父盘为装好操作系统的系统盘,不同的子盘存放不同用户的数据。
由于读取父盘数据时存在并发的问题,需要避免在高IO环境中使用。

6.2 备份

采用内置快照时,快照存储在虚拟机磁盘文件内,对于正在运行的虚拟机,如果有数据写入,无法对磁盘文件进行拷贝。
采用外置快照时,父盘只读不写,写入在外置的差分盘中进行,可以对父盘文件进行拷贝。

6.3 基于外置快照的备份

创建外置快照需要升级qemu-kvm为ev版本

yum -y install qemu-release-qemu-ev
yum -y install qemu-kvm-ev libvirt

创建外置快照,外置快照的磁盘文件是qcow2格式的

virsh snapshot-create-as Centos6 --name guest-state1 \
--disk-only --atomic --diskspec vda,file=/export/images/Centos6-overlay1.qcow2
#vda是Centos6虚拟机要创建快照的磁盘,file= 是快照文件存放的位置

#外置快照磁盘文件是qcow2格式
[root@node1 ~]$ qemu-img info /export/images/Centos6-overlay1.qcow2
image: /export/images/Centos6-overlay1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.8M
cluster_size: 65536
backing file: /vmkvm_exp/centos6-disk0.qcow2
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

#此时虚拟机的磁盘文件指向创建的外置快照
[root@node1 ~]$ virsh domblklist Centos6 
Target     Source
------------------------------------------------
vda        /export/images/Centos6-overlay1.qcow2
hda        -

创建完成后,可以原父磁盘文件进行备份。
备份结束后,将快照差分盘数据回写入母盘。

blockcommit <domain> <path> [--bandwidth <number>] [--base <string>] [--shallow] [--top <string>] [--active] [--delete] [--wait] [--verbose] [--timeout <number>] [--pivot] [--keep-overlay] [--async] [--keep-relative] [--bytes]
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--path] <string>  fully-qualified path of disk
    --bandwidth <number>  bandwidth limit in MiB/s
    --base <string>  path of base file to commit into (default bottom of chain)
    --shallow        use backing file of top as base
    --top <string>   path of top file to commit from (default top of chain)
    --active         trigger two-stage active commit of top file
    --delete         delete files that were successfully committed
    --wait           wait for job to complete (with --active, wait for job to sync)
    --verbose        with --wait, display the progress
    --timeout <number>  implies --wait, abort if copy exceeds timeout (in seconds)
    --pivot          implies --active --wait, pivot when commit is synced
    #快照写入母盘后,虚拟机磁盘文件指向母盘,抛弃子盘
    --keep-overlay   implies --active --wait, quit when commit is synced
    --async          with --wait, don't wait for cancel to finish
    --keep-relative  keep the backing chain relatively referenced
    --bytes          the bandwidth limit is in bytes/s rather than MiB/s

virsh $  blockcommit Centos6 vda --active --pivot --verbose 

#写入成功且pivot后,虚拟机磁盘变为母盘
[root@node1 ~]$ virsh domblklist Centos6 
Target     Source
------------------------------------------------
vda        /vmkvm_exp/centos6-disk0.qcow2
hda        -

删除外置快照,kvm不支持删除外置快照文件,需要删除外置快照metadata信息后,手工删除外置快照文件

#删除metadata
virsh $  snapshot-delete Centos6 guest-state1 --metadata
#删除磁盘文件
[root@node1 ~]$ rm -f /export/images/Centos6-overlay1.qcow2 

7 qemu-img磁盘快照

通过qemu-img命令创建快照链只能在虚拟机关机状态下运行,否则会造成vm的硬盘文件损坏。

7.1 虚拟磁盘快照查询

使用snapshot -l查询

qemu-img snapshot -l 硬盘文件名

使用info查询

qemu-img info 硬盘文件名

7.2 创建虚拟磁盘快照

qemu-img snapshot -c snapshot的tag 硬盘文件名

7.3 虚拟磁盘快照回滚

qemu-img shapshot -a snapshot的tag 硬盘文件名

7.4 虚拟磁盘快照删除

qemu-img shapshot -d snapshot的tag 硬盘文件名
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354