一个执着于技术的公众号

前言

在上一章节,我们学习了LVM逻辑卷管理技术,知道了LVM能够通过增减PE的数量来弹性调整文件系统的大小。除此之外,LVM还有另一个重要功能「LVM快照技术」,也就是可以给文件系统做一个备份。

LVM快照原理

在讲LVM之前,大家先思考一个问题;为什么不管多大的逻辑卷进行备份,快照都会在几秒之内完成?

其实LVM快照采用写时复制技术(copy-on-wire,COW),即当LVM快照创建的一瞬间,系统会记录那个时间点逻辑卷的状态、数据等。此时拍下的快照相当于一张白纸。如图所示:

快照做好后,随着时间的推移,源卷里的东西会发生改变。如数据1、2改写成了A、B,如下图:

此时lv源卷里发生改变的数据会转移到快照卷里面去。当恢复快照时,源卷会和快照进行合并,源卷里没有改变的数据+快照卷,就恢复到最初的状态

「注意」

  • 快照卷空间大小不能设置太小,否则当源卷数据改变太大时,快照卷没法装下。快照卷大小封顶由卷组(VG)的大小决定。

  • 快照与待备份的逻辑卷(LV)必须要在同一个VG下,否则创建快照会失败。

创建 LVM 快照

1、实验准备


在做LVM快照之前,我们先把逻辑卷创建出来:

1)事先准备4个分区

2)创建PV

3)创建卷组vg1

4)创建大小为10G的逻辑卷lv1

5)格式化&&挂载至/data下

6)写入数据,以便后面实验验证


2、LVM快照实验

在创建快照之前,我们先查看下系统当前的LV及VG的使用情况

通过查询,得知逻辑卷lv1大小为10G,所属卷组vg1;卷组vg1容量为40G,空闲容量还有30G。因此我们有足够的资源为逻辑卷lv1创建快照。

1、创建快照

参数解释:

  -L:指定快照卷大小
--snapshot :指定创建类型为快照卷
--name:指定快照卷名称
/dev/vg1/lv1:代表要对lv1卷打快照

其实快照就是一个特殊类型的逻辑卷,跟创建逻辑卷的命令相同,也是lvcreate。

  • lvs查询快照卷


2、模拟数据受损,以便进行备份恢复


这里代表原始数据是hello world,被恶意更改为hello worl。现在我们采用「LVM快照回滚」找回我们的“重要数据”

3、挂载快照

「这里有个报错哦」


排错步骤如下:

1)根据提示,执行dmesg | tail

2)根据报错提示,无法挂载此UUID的磁盘。我们再查看下磁盘的UUID吧

这时会发现:逻辑卷lv1与快照卷lv1_snap001共用同一个UUID了。通过查询资料,得出以下结论:

如果逻辑卷使用的文件系统为xfs,挂载快照卷时会报错的。因为xfs不允许相同的UUID文件系统直接挂载(快照是LVM的克隆,因此UUID是一致的)。要解决这个办法,要么修改其UUID,要么带上nouuid参数,让文件系统忽略相同的UUID所造成的问题。

3)我们这里选择带上nouuid参数,执行结果如下图:

问题解决,快照卷已挂载至/data_bak


4、还原数据


以上实验是我们明确知道需要还原的某个文件,因此挂载快照卷,直接拷贝其快照卷中的文件即可。但是,当数据卷上有很多小文件,数据都有可能被改变。这种情况就不适用上面的方法了。接下来我们介绍还原数据卷上所有数据的方式。

还原整个逻辑卷的数据

1、挂载快照卷2、把快照中的数据导出

  • 本实验将快照卷的数据导至/opt目录

3、卸载数据卷&&格式化数据卷&&重新挂载

此时数据卷已无数据,现在利用我们备份的数据进行恢复

4、把数据还原到源数据卷


这样就把创建快照时刻的数据完全还原出来了,只不过操作有点繁琐。接下来,我们用一种更简单方法,利用「合并快照」两步搞定数据还原。

合并快照(merge snapshot)

1、老规矩,先模拟大量重要数据受损,需要恢复整个逻辑卷的情况:

这里的大量文件,就特指test文件吧

2、卸载数据卷和快照卷

3、合并快照

确认源数据卷和快照数据卷都没有被挂载后就可以执行合并快照的操作了:

注意,合并快照的操作会自动删除快照数据卷,如下图所示:

4、重新挂载源数据卷

test文件内容已变成“hello world”,说明整个数据卷上的内容已经被还原到了创建快照的时刻。

总结

快照是 LVM 中的一个稍微高级一点的话题,但仅就日常使用来说,本文介绍的常见用法足够大家愉快的开启探索之旅了。

往期精彩

◆  手把手教你搭建一套OpenStack云平台

◆  带你体验一次原生OpenStack发放云主机的过程

◆  Linux运维工程师面试问答录

◆  干货 | Linux平台搭建网关服务器

◆  干货 | 理解正向代理与反向代理的区别

◆  硬核科普服务器硬盘组成与基本原理

◆  一文带你速懂虚拟化KVM和XEN

◆  实战 | Hadoo大数据集群搭建

◆  运维工程师心法:6大技能让你告别背锅

干货 | LVM快照学习的更多相关文章

  1. 烂泥:LVM学习之KVM利用LVM快照备份与恢复虚拟机

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近一段时间一直在学习有关LVM逻辑卷方面的知识,前几篇文章介绍了有关LVM的逻辑卷的基本相关知识,包括逻辑卷及卷组的扩容与缩小.今天我们再来介绍LVM ...

  2. Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份

    这里我们讨论Linux操作系统的备份. 在生产环境,客户都会要求做全系统的数据备份,用于系统崩溃后的一种恢复手段.这其中就包含操作系统数据的备份恢复. 由于是生产环境,客户都会要求备份不中断业务,也就 ...

  3. lvm snapshot(lvm 快照)

    lvm快照有多种实现方法,其中一种是COW(Copy-On-Write),不用停止服务或将逻辑卷设为只读就可以进行备份,当一个 snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据, ...

  4. 烂泥:KVM利用LVM快照快速部署虚拟机

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了有关KVM利用LVM快照备份和恢复虚拟机的功能,这篇文章我们来介绍,如何利用LVM快照功能为KVM快速部署虚拟机. 部署虚拟机需要以下几 ...

  5. lvm快照备份数据库(Mysql5.7)

    备份的目的 能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方. 备份的分类 以操作过程中服务的可用性分: 冷备份:cold backup mysql服务关闭,mysq ...

  6. LVM快照备份与恢复

    简介   最近在做数据备份方面的工作,用到两个工具,一个是dd,而另一个是lvm的快照(snapshot).由于数据比较大,直接是用dd非常耗时,而lvm的快照可以在几秒内轻松搞定,而且可以达到实时的 ...

  7. LVM : 快照

    LVM 机制还提供了对 LV 做快照的功能,也就是说可以给文件系统做一个备份,这也是设计 LVM 快照的主要目的.LVM 的快照功能采用写时复制技术(Copy-On-Write,COW),这比传统的备 ...

  8. MySQL基于LVM快照的备份恢复(临时)

    目录1.数据库全备份2.准备LVM卷3.数据恢复到LVM卷4.基于LVM快照备份数据5.数据灾难恢复6.总结 写在前面:测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷, ...

  9. mysql数据库基于LVM快照的备份

    lvm-snapshot: 基于LVM快照的备份 1.事务日志跟数据文件必须在同一个卷上          2.创建快照卷之前,要请求mysql的全局锁,在快照创建完成之后释放锁          3 ...

随机推荐

  1. kafka报文一直打印的问题

    一.问题描述 今天开发了一个kafka消费者数据接收的功能,基本过程为分别启动本地的kafka服务和代码程序,在服务端手动发送消息,代码来进行接收消费.经测试,代码功能正常,但是再接收到一条kafka ...

  2. java-网络通信--socket实现多人聊天(基于命令行)

    先编写最简答的服务器 思路 1编写一个实现Runnable接口的静态内部类 ServerC,便于区分每个客户端 1.1 获取客户端数据函数 public String remsg() 1.2 转发消息 ...

  3. TIME_WAIT 优化

    ·[场景描述] HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟. 如果我们使用了nginx去作为 ...

  4. 7_线性控制器设计(Linear Controller Design)

    开环系统中 状态方程,其中A的特征值将决定这个系统的表现(稳定性或者收敛速度:特征值小于0时系统稳定) 如果开环系统特征值大于0时(即系统不稳定时): 可以引入输入量U时(U是关于状态变量X的函数), ...

  5. [译]HTML&CSS Lesson5: 定位

    CSS最大的用处之一就是可以将内容和元素定位到任何我们想要的位置,使我们的设计具有结构,使内容更加易懂. CSS有好几种不同的定位属性,每种都有自己的使用场景.在这节课中我们会通过不同的案例--可复用 ...

  6. 体温登记app开发流程

    关于体温app,比较难的是获取定位信息,剩下的就是增删改查. 设计思路:首先布局一个添加页面,给每个元件添加id,之后在获取地点的EditText获取位置信息,在添加两个布局文件,体现在一个页面里用来 ...

  7. java中如何按一定的格式输出时间, 必须给出例子

    题目2: 按一定的格式输出时间 import java.util.*;import java.text.SimpleDateFormat;public class Test {    public s ...

  8. JavaScript 中 append()、prepend()、after()、before() 的区别

    内容 append().prepend().after().before() 的区别 jQuery 操作 DOM 之添加节点 方法名 作用 $(selector).append() 指定元素内部添加, ...

  9. IO流入门+简单案例实现

    IO流 总结内容 1. IO流是什么 2. 字符流和字节流 3. File常用API(前面类型为返回类型) 4. 编码转换 5. IO流实现流程 6. 输入输出流简单实现 7. 输入输出流简单实现 总 ...

  10. 小程序中webview内嵌h5页面

    小程序内嵌h5页面跳转小程序指定页面,  需要引用  JSSDK:   <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2 ...