你能看懂的cow和row快照原理

快照的类型:

1、全量快照:为源数据创建并维护一个完整的镜像卷。

2、增量快照:利用COW或ROW的方式实现增加快照(差量)。

快照的原理

快照不是拷贝,它是指向保存在存储设备中的数据的引用标记或指针。(就是保存的数据的元数据,可以通过这些元数据索引到实际的数据,不是拷贝原数据,所以速度很快),但是只是保存“指针”会有一个问题,如果原数据发生变化怎么变???因为你只是保存的指针,这个时候有两种解决方案。一种是COW(copy-on-write), 一种是ROW(redirect-on-write)。下面我们来看它们具体是怎么实现的。

COW

先说一下背景,现在有两个指针表,一个是快照的指针表,一个是原卷的指针表,在数据没有发生任何改变的时候,它们是一样的。

你能看懂的cow和row快照原理_第1张图片

现在有一个块的数据发生了变化。然后这个时候如果直接在磁盘上改的话。之前打的快照就不能恢复成原来的数据(打快照时的),所以cow的方案是将原数据的某一块(比如3)先写到快照卷中,然后把快照卷里的指向修改(修改到快照卷里的3),然后再对数据里的3进行修改。所以这样就保留了快照的信息。

ROW

同样的背景(同上),ROW的方案是把新数据写到快照卷里,然后把原卷指针卷的指针指向改变(改到快照卷的那个新数据),这比CO的好处是不用多做那一次拷贝,(cow需要把原数据拷贝到快照卷)。但是它的问题是如果存在多个快照,就存在很恶心的链式关系(最新一次的快照原始数据存在就存在了上一次快照创建的快照卷中)

解释:很多文档都说了当第一次写入数据时,会做cow和row操作。这个第一次是什么意思,就是当原数据第一次发生变化的时候,因为快照记录的是原数据,然后当它第一次改变的时候,做这个操作能保证它记录的还是原数据,但当第二(第n次)次改变的时候,与我无瓜了,因为我已经记录下来了,这就是这个第一次的意思。

url

ROW/COW 快照技术原理解析_tiankong_的博客-CSDN博客_row快照

你可能感兴趣的:(备份,云计算)