johnzhang518
作者johnzhang518·2022-12-23 16:38
技术支持·IPS

存储快照ROW和COW的差异对比

字数 1276阅读 1077评论 0赞 0

快照是日常存储运维中常用到的技术,通过快照,我们可以获得一个数据集合在某个时间点的一份完全可用的拷贝。

快照的作用很多,目前用的比较多的有两种,一种是进行在线的数据会恢复,当存储设备发生故障或文件损坏时,可以进行及时的数据恢复,将数据恢复成快照产生时的状态;另一种用法是提供另外一个数据访问的通道,当源数据进行在线业务时,可以用快照数据做测试或 T+1 查询。

快照可以分为全量快照和增量快照。全量快照是源数据的一份完整拷贝,从容量上看源卷和快照卷为 1:1 ,由于比较耗费存储容量,所以一般全量快照的数量不会保留很多。增量快照是通过仅存储与源数据的不同的那些数据块的一种技术,虽然所耗费的存储容量降低了很多,但增量快照不能保存一份完整的拷贝。增量快照又分为写时快照( COW , Copy-On-Write )和写时重定向快照( ROW , Redirect-On-Write )。本文主要讨论 COW 和 ROW 的技术特点和差异性。

写时快照 COW
在创建写时快照 COW 时 , 存储系统会拷贝出一份源数据卷指针表的副本 , 该副本作为快照卷数据指针表。 COW 快照只会记录创建快照的时间点的那份完整数据拷贝,当有新的数据第一次写入源数据卷时,首先将原有的位置的内容读取,写到 COW 快照卷中,然后将新数据写入到源数据卷中,即执行一次读操作和两次写操作。

如下图所示,源数据卷存储数据为 ABCD ,当 A 位置有新数据写入时,需要将 A 数据写入到快照卷中,然后将 A 位置的数据更新为 A’ 。当源数据卷中的 A’ 位置需要第二次更新时,即可以直接更新,无需再执行上面所述的更新快照卷的动作。

写时快照 COW 由于是增量快照,不会占用过多的存储空间。所有更新的数据是在源卷空间中进行更新的,因此,采用 COW 快照时源数据是连续的,所以应用系统在进行读的效率非常高。

但由于快照创建后每次写入操作都需要先将源数据卷中的原始数据拷贝到快照卷中才能开始写入源数据卷,所以会降低源数据卷的写性能。

综上,写时快照 COW 比较适合于业务系统对存储设备读多写少的场景。

写时重定向快照 ROW
创建写时重定向快照 ROW 后,如果对源数据卷的数据进行更新操作的话 , 并不会像 COW 那样修改源数据卷原始数据 , 而是在一个新的空间中存放用新数据。

如下图所示,源数据卷存储数据为 ABCD ,当 A 位置有新数据 A’ 写入时,需要在新的存储空间写入 A’ , ROW 快照卷的指针仍然指向原来的数据。此时,当应用读取数据时,所读数据为 A’BCD 。

写时重定向快照 ROW 不会降低源数据卷的写性能。源数据卷创建 ROW 快照后的写操作会被重定向,所有的写 I/O 都被重定向到新卷中,而所有快照卷数据 ( 旧数据 ) 均保留在只读的源数据卷中。因此更新源数据只需要一个写操作,解决了 COW 写两次的性能问题。

但由于源数据卷在不停的写操作下,已经从原来的连续的存储空间变得分散到磁盘空间的各个区域,造成了连续读性能的下降,写操作越多,数据碎片化越严重。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广