LVM快照备份与恢复
简介
最近在做数据备份方面的工作,用到两个工具,一个是dd,而另一个是lvm的快照(snapshot)。由于数据比较大,直接是用dd非常耗时,而lvm的快照可以在几秒内轻松搞定,而且可以达到实时的效果,但是使用lvm快照的代价就是以空间换取时间。
下面我们就先来了解下原理:
LVM中snapshot通过“写时复制”(copy on write) 来实现,即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data);创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里。
注意:采取CoW实现方式时,snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。所以,非常重要的一点,一定要在snapshot的生命周期里,做完你需要做得事情。
实例
需求
lvm创建过程在此就不详述,以下是我现有的lvm,其中lv_image就是我们需要备份的逻辑卷。
[root@test ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv_image vg_image -wi-ao---- 8.00t
LogVol00 vg_test -wi-ao---- 7.81g
LogVol01 vg_test -wi-ao---- 101.70g
- 1
- 2
- 3
- 4
- 5
实现
前提:lvm快照所在的vg必须和备份源(也就是lv_image)是同一个,因此我们需要确认vg_image的剩余空间,若不足需扩展。
1.确认vg_image空间
[root@test ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_image 2 1 0 wz--n- 8.29t 4.00m
vg_test 1 2 0 wz--n- 109.51g 0
- 1
- 2
- 3
- 4
由以上看出vg_image的剩余空间(VFree)为4m,显然空间不够。
2.vg空间扩展
此处,你可能有一个问题“vg需要扩展多大的空间?”前面提到过cow的原理,snapshot越大,我们在snapshot的周期内做的就越多,但是我们空间有限,因此我们一般使用snapshot的空间是原始卷的10%左右。
现在我们有个2T大小的备份盘/dev/sdf1使用。
[root@test ~]# vgextend vg_image /dev/sdf1
Volume group "vg_image" successfully extended
[root@test ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_test lvm2 a-- 109.51g 0
/dev/sdc1 vg_image lvm2 a-- 8.00t 4.00m
/dev/sdf1 vg_image lvm2 a-- 2.00t 2.00t
[root@test ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_image 2 1 0 wz--n- 2.00t 2.00t
vg_picture118 1 2 0 wz--n- 109.51g 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3.创建快照
[root@test ~]# lvcreate -L 300GB -s -n lv_image_snap /dev/vg_image/lv_image
- 1
其中:
-L 300G 表示此次创建快照大小
-s 表示创建快照
-n lv_image_snap 表示新的快照名为lv_image_snap
/dev/vg_image/lv_image 为要创建快照的逻辑卷
[root@test ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv_image vg_image -wi-ao---- 8.00t
lv_image_snap vg_image -swi-a---- 300.00g lv_image 0
LogVol00 vg_test -wi-ao---- 7.81g
LogVol01 vg_test -wi-ao---- 101.70g
- 1
- 2
- 3
- 4
- 5
- 6
至此,我们的快照已经创建完毕,只需将其挂载即可。
mount /dev/vg_image/lv_image_snap /mnt
另,“Data%”部分的数据会随着源逻辑卷的数据增大而增大,达到100%后快照将无法使用,需要进行扩展。在创建快照前,最好将源逻辑卷挂载成只读。
4.删除逻辑卷
lvremove /dev/vg_image/lv_image_snap
vgreduce vg_image /dev/sdf1
pvremove /dev/sdf1
快照还原
在此以上述备份为基础:
#确保/data拥有足够的空间
dd if=/dev/vg_image/lv_image_snap of=/data/recover.img
dd if=/data/recover.img of=/dev/vg_new/lv_new
rm /data/recover.img
lvremove /dev/vg_image/lv_image_snap
- 1
- 2
- 3
- 4
- 5
注意:虽然snapshot小,但是通过snapshot备份出来的空间一定要足够大,因为它的数据和源lvm的数据一样大。
总结
通过使用lvm的快照我们可以轻松的备份数据,由于snapshot和源lvm的关系,snapshot只能够临时使用,不能脱离源lvm而存在;因此做到数据的万无一失,我们可以在snapshot的基础上进行dd备份或其他备份操作,这样既不会影响原始数据也能够达到备份的需求。
LVM快照备份与恢复的更多相关文章
- 烂泥:LVM学习之KVM利用LVM快照备份与恢复虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近一段时间一直在学习有关LVM逻辑卷方面的知识,前几篇文章介绍了有关LVM的逻辑卷的基本相关知识,包括逻辑卷及卷组的扩容与缩小.今天我们再来介绍LVM ...
- Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份
这里我们讨论Linux操作系统的备份. 在生产环境,客户都会要求做全系统的数据备份,用于系统崩溃后的一种恢复手段.这其中就包含操作系统数据的备份恢复. 由于是生产环境,客户都会要求备份不中断业务,也就 ...
- lvm snapshot(lvm 快照)
lvm快照有多种实现方法,其中一种是COW(Copy-On-Write),不用停止服务或将逻辑卷设为只读就可以进行备份,当一个 snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据, ...
- 烂泥:KVM利用LVM快照快速部署虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了有关KVM利用LVM快照备份和恢复虚拟机的功能,这篇文章我们来介绍,如何利用LVM快照功能为KVM快速部署虚拟机. 部署虚拟机需要以下几 ...
- lvm快照备份数据库(Mysql5.7)
备份的目的 能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方. 备份的分类 以操作过程中服务的可用性分: 冷备份:cold backup mysql服务关闭,mysq ...
- LVM : 快照
LVM 机制还提供了对 LV 做快照的功能,也就是说可以给文件系统做一个备份,这也是设计 LVM 快照的主要目的.LVM 的快照功能采用写时复制技术(Copy-On-Write,COW),这比传统的备 ...
- MySQL基于LVM快照的备份恢复(临时)
目录1.数据库全备份2.准备LVM卷3.数据恢复到LVM卷4.基于LVM快照备份数据5.数据灾难恢复6.总结 写在前面:测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷, ...
- mysql数据库基于LVM快照的备份
lvm-snapshot: 基于LVM快照的备份 1.事务日志跟数据文件必须在同一个卷上 2.创建快照卷之前,要请求mysql的全局锁,在快照创建完成之后释放锁 3 ...
- MySQL的备份和恢复-基于LVM快照的备份(lvm-snapshot)
MySQL的备份和恢复-基于LVM快照的备份(lvm-snapshot) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是快照卷 如上图所示,原卷和快照卷可以不一样大,因为 ...
随机推荐
- SQLLITE HELPER
using System;using System.Data.SQLite; namespace SQLiteSamples{ class Program { //数据库连接 ...
- Matlab:显(隐)式Euler和Richardson外推法变步长求解刚性问题
一.显示Euler 函数文件:Euler.m function f=Euler(h,Y) f(1,1)=Y(1)+h*(0.01-(1+(Y(1)+1000)*(Y(1)+1))*(0.01+Y(1) ...
- sevrlet进行用户名密码校验
在eclipse中建立了web项目,实现注册和登录还有在个人中心显示用户名密码 注册功能 源码如下 package com.sevlet.demo; import java.io.IOExceptio ...
- attr VS prop 区别
attr 能够增加.获取.删除页面属性.从页面中获取属性值: prop 用来获取.删除元素自带属性.从属性对象中获取属性值. attr 只获取静态属性值,就是页面加载时的最初的属性值: prop 可以 ...
- python网络爬虫&&爬取网易云音乐
#爬取网易云音乐 url="https://music.163.com/discover/toplist" #歌单连接地址 url2 = 'http://music.163.com ...
- [luogu P3369]【模板】普通平衡树(Treap/SBT)
[luogu P3369][模板]普通平衡树(Treap/SBT) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删 ...
- 微信小程序城市定位(百度地图API)
概述 微信小程序提供一些API(地址)用于获取当前用户的地理位置等信息,但无论是wx.getLocation,还是wx.chooseLocation均没有单独的字段表示国家与城市信息,仅有经纬度信息. ...
- iozone的三大神器之一fileop
iozone用了很久,查看源码,发现iozone其实还附带两个工具fileop和pit_server,fileop测试了POSIX常用的函数,pit_server用来测试TCP或UDP服务 今天用了一 ...
- 在Linux终端安装Julia
官方参考文档:https://julialang.org/downloads/platform.html#generic-binaries 一.centos终端安装 打开Linux终端输入 sudo ...
- Sql语句内功心法
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> 定义模式实际上定义了一个命名空间,在这个空间可以进一步定义该模式包含的数据库对象,例如基本表,视 ...