• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

基于LVM的快照实现原理分析

Linux技术 winrains 来源:Linux社区 1年前 (2019-08-31) 90次浏览

1.LVM介绍

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。 基本的逻辑卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid备。
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

2.LVM快照原理

LVM对LV提供的快照功能,只对LVM有效。
当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。
在写操作写入块之前,将原始数据移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。
创建snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。

2.1 创建快照

在快照创建的时候,仅拷贝原始卷里数据的元数据(meta-data),并生成位图记录原始卷的块数据变化。
基于LVM的快照实现原理分析-听海博客

2.2 读写原始卷

在创建完快照后,对原始卷的读写请求处理流程如下。

1,写原始卷 在原始卷的写入数据

1) 检查Chunk位图中要写入数据所在的Chunk所对应的bitmap是否被置位; 2) 如果已被置位,直接写入该Chunk;如果未被置位,将拷贝该Chunk的数据到快照备份卷;
3) 将Chunk位图中对应的bitmap置位。 4) 将数据写入原始卷。
基于LVM的快照实现原理分析-听海博客

2,读原始卷

直接从原始卷对应的Chunk中读取数据。
基于LVM的快照实现原理分析-听海博客

2.3 读写快照

1.读快照

在处理快照的读请求时,检查Chunk位图是否置位,如果置位从快照读取数据;如果未置位,则从原始卷读取数据。如下图所示:
基于LVM的快照实现原理分析-听海博客

2.写快照

在处理快照的写请求时,
1) 检查Chunk位图是否置位,如果置位直接写快照;
2) 如果未置位,则从原始卷读取该Chunk的数据,拷贝到快照卷; 3) 将Chunk位图中对应的位图置位; 4) 将数据写入快照卷。
基于LVM的快照实现原理分析-听海博客

3.LVM快照实验

1) 创建1G大小的LV,名称为lvData1,在该lv上创建文件系统,并创建文件。
基于LVM的快照实现原理分析-听海博客
2) 创建500M大小的快照LV(lvcreate –L 500M -s -n snaplv /dev/vg/lvData1),名称为snaplv。
创建过程很快,可以看到该LV的LVSize和原始卷是一样的,多了一些快照的属性,其LV snapshot status 为active,distination为LVData1。
基于LVM的快照实现原理分析-听海博客
3) 在原始卷lvData1中写入新的文件,可以看到快照卷的Allocated to snapshot 会逐渐
变大。
基于LVM的快照实现原理分析-听海博客

作者:Linux社区

来源:https://www.linuxidc.com/Linux/2016-09/135484.htm


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (3)