文章目录
参考文章
https://blog.csdn.net/m0_49864110/article/details/123989551
https://support.huawei.com/enterprise/zh/doc/EDOC1100196336/
https://www.cnblogs.com/ryan1999/p/16526145.html
系统性概述
快照的特点:
1、瞬时生成:存储系统可以在几秒钟内生成一个快照,获取元数据的一致性副本。
2、占用空间少:所以即使源数据量很大,也只会占用很少的存储空间(增量的)。
3、快照依赖于源数据:当源数据损坏后,快照就不能正常使用了(镜像不依赖于源数据,是独立存在的)。
快照常用术语:(文件可以分为元数据和源数据)
元数据:meta data 存放对文件的描述信息(文件属性、权限、标识数据块的位置等)。
源数据:存放实际的数据。
COW快照介绍
COW快照工作原理
# COW|COFW:
1、名词解释:(copy on write| copy on first write)写时拷贝|首次写时拷贝。
2、主要应用场景:存储LUN、裸设备等。
3、简要工作逻辑:先将要更改的数据,读取并复制到快照卷中,再对源卷进行改写操作。(快照卷只依赖源卷)
# COW涉及的表项概念
1、快照LUN(快照卷)
对源LUN创建快照后,逻辑上生成的数据副本。
2、COW数据空间
2.1、何时生成:快照生成并激活后,存储系统会在源LUN所在的存储资源池中动态划分出来的一部分空间
2.2、作用:该空间用来保存写前拷贝数据(也就是快照的数据);
2.3、COW分为两个区域
COW Mate区域:同一个源LUN下所有快照共用的元数据区(存放元数据的更改情况-通过共享映射表实现)
COW Data区域:用于存放写源LUN时产生的写前拷贝数据(即存放快照时的源数据)
3、共享映射表
3.1、何时回用到:在数据写入/修改和数据回滚的时候需要用到(用于存放元数据的更改情况)
3.2、共享映射表存放位置:COW Meta区域中
3.3、作用:记录源LUN上关于快照的数据是否更改
3.3、在数据写入时:
为1表示此数据相比于快照数据有所更改,等到再次写入数据时就可以直接覆盖;
为0表示当前数据与快照数据相比无更改,在下次写入数据时需要进行写时复制。
3.4、在数据回滚时:
为0表示无更改,就不需要恢复;
为1表示更改了,需要进行恢复。
4、独享映射表
4.1、作用:记录快照LUN的数据是否有更改.(写快照LUN时所产生的源数据与其在快照LUN中存放元数据位置的映射关系)
4.2、存放位置:存放在每个快照LUN的Meta区域中.
COW快照初始化状态
COW快照-源卷写入过程(第一次新增数据)
COW快照-源卷写入过程(第一次删除数据)
COW快照-源卷写入过程(第一次|第二次变更数据)
COW快照-快照卷写入过程(修改数据)
COW快照-快照卷写入过程(新增数据)
COW快照-快照卷读取过程(分快照卷无数据|快照有数据)
COW快照-回滚过程(读数据过程)、删除过程
COW快照卷演示实验
# 创建20G的lvm卷,并挂载
lvcreate -n data -L 20G test
mkfs.ext4 /dev/test/data
mount /dev/test/data /root/data/
# 为该lvm卷创建一个20M的快照,并查看COW空间大小
lvcreate -s -n snaphost01 -L 20M /dev/test/data
[root@C20240311019468 ~]# lvdisplay /dev/test/snaphost01
--- Logical volume ---
LV Path /dev/test/snaphost01
LV Name snaphost01
VG Name test
LV UUID Y2EiGz-4TS1-hZGt-tkVW-3LcA-YhWi-BzjjMk
LV Write Access read/write
LV Creation host, time C20240311019468, 2024-03-11 11:54:03 +0800
LV snapshot status active destination for data
LV Status available
# open 0
LV Size 20.00 GiB
Current LE 5120
COW-table size 20.00 MiB # 注意这里COW只有20M,一旦用尽,快照就失效了
COW-table LE 5
Allocated to snapshot 0.06% # 快照卷本身只占COW空间的0.06%(因为快照卷本身也在cow空间内)
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 252:3
# 再创建一个30G的快照(源卷本身才20G空间),并查看cow空间大小
lvcreate -s -n snaphost02 -L 30G /dev/test/data
[root@C20240311019468 ~]# lvdisplay /dev/test/snaphost02
--- Logical volume ---
LV Path /dev/test/snaphost02
LV Name snaphost02
VG Name test
LV UUID 7tKPBh-PEVr-VdYg-leR9-ewEB-kWNX-D9f4eK
LV Write Access read/write
LV Creation host, time C20240311019468, 2024-03-11 12:59:00 +0800
LV snapshot status active destination for data
LV Status available
# open 0
LV Size 20.00 GiB
Current LE 5120
COW-table size 20.08 GiB # COW空间最大只能是源卷大小(我们多给10G没用的)
COW-table LE 5141
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 252:5
ROW快照介绍
ROW快照工作原理
ROW:
1、名词解释:(redirect on write)写时重定向。
2、主要应用场景:虚拟机磁盘、数据库增量备份(适用于分布式场景下的写密集型--业界普遍采用 分布式存储+ROW)
3、简要工作逻辑:将源卷数据保护起来,将更改的新数据写入快照卷,有链式依赖。
ROW快照初始化状态
ROW快照-数据写入过程
ROW快照-数据读取过程
ROW快照-快照删除、快照回滚过程
ROW和COW的区别
# COW的优缺点
优点:COW在进行快照操作之前不会占用任何的存储资源
缺点:
1、当修改源数据时,会发生三次读写操作(读源数据、将源数据写入到快照卷、将新数据写入到源数据卷);
2、无法得到完成的物理副本,快照卷的COW可能只保留了源数据卷的部分原始数据;
3、当快照卷的数据(也就是COW的数据)超过创建快照时的数据,该快照就会失效(通常会设置自动扩容阈值,避免该问题)
# ROW的优缺点
优点:
1、不会降低源数据卷的写性能(源数据卷创建快照后的写操作会被重定向,所有的写操作都被重定向到新卷中;
2、所有的快照卷数据都保留在只读的源数据卷中)
缺点:
1、没有一个完整的快照卷(ROW的快照卷数据映射表保存的是源数据卷的原始副本);
2、单机读写性能下降。
COW写时拷贝 | ROW写时重定向 | |
---|---|---|
读区别 | 一次(源卷记录的是最新的数据,可以直接读源卷) | 查映射表(根据需求选择是读源卷还是快照卷) |
写区别 | 二次(先拷贝再写入) | 一次(直接写入到快照存储空间) |
删除快照区别 | 直接删除快照空间即可 | 需要进行回滚操作 |
存储空间大小 | 源卷1G,使用300M,COW空间最大只能是1G,快照卷空间最大也只能是1G, | 不设限 |
适合场景 | 读密集型应用,或者对存储设备容易出现写热点的应用 | 写密集型应用,在分布式存储中,读性能会更高 |
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论