一个执着于技术的公众号

前言

在上一章节,我们学习了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. Error和Exception有什么区别?

    Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题:比如内存溢出,不可能指望程序能处理这样的情况:Exception表示需要捕捉或者需要程序进行处理的异常, ...

  2. Centos最小化安装

    1.选择最小安装: 2.选择相应的安装包 老男孩提示: 1.根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全. 2.如果安装过程落了部分包 ...

  3. stm32 中库函数、结构体、地址的强制类型转换、相应特殊功能寄存器之间的关系

    以一个挂接在APB2上的外设函数使能为例 A : RCC_APB2PeriphClockCmd():时钟使能函数 1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFI ...

  4. js 遮罩效果

    -------------------------------tipswindown.js------------------------------ ///--------------------- ...

  5. 手把手教你打造一个纯CSS图标库

    来,干了这碗安利 写这篇文章的目的其实就是为了安利一下我的图标库:iconoo,所以,开门见山,star吧少年少妇们!(这样的我是不是应该要加个github互粉的团伙了?) 主题说完了,下面进入正题. ...

  6. js常用的函数库

    阻止冒泡.默认行为.事件捕获 /* funname preventEventPropagation * desc 阻止冒泡事件&阻止默认行为&阻止事件捕获 * params {name ...

  7. 如何形成一个完整的HTML对象

    写在前面,本文将同步发布于Blog.掘金.segmentfault.知乎等处,如果本文对你有帮助,记得为我得到我的个人技术博客项目给个star哦. 为何写这篇文章? 你可能做Web开发已经有一段时间, ...

  8. Linux 0.11源码阅读笔记-文件管理

    Linux 0.11源码阅读笔记-文件管理 文件系统 生磁盘 未安装文件系统的磁盘称之为生磁盘,生磁盘也可以作为文件读写,linux中一切皆文件. 磁盘分区 生磁盘可以被分区,分区中可以安装文件系统, ...

  9. 【uniapp 开发】日期工具类 -- DateUtil

    日期格式转毫秒值 var time = '2019-08-08 12:09:34'; var time222 = time.replace("-", "/"). ...

  10. Django框架中settings.py注释

    1 # coding:utf8 2 """ 3 Django settings for DjangoTest project. 4 5 Generated by 'dja ...