ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

快照原理(二)——ROW技术

2022-04-07 16:04:44  阅读:586  来源: 互联网

标签:快照 写入 差分 磁盘 原理 block ROW


ROW: redirect on write 。 写时重定向。

如下图所示,左边是我们的文件。上边是inode,下边是block,里边都是123且是指向关系。然后我们对它拍一个快照snap01,snap01中也有索引123,且指向block中对应的数据。这些步骤和COW是一模一样的。不同的是,COW会生成一个COW区域用来存放和原block不同的数据,但是ROW不会。ROW会在底层生成一个.img形式的磁盘文件,我们称这个文件为ROW差分卷。差分就是区别的意思,这里的差分就是指和左边block的区别。原磁盘底层(左边block)也是一个.img形式的磁盘文件(虽然是.img形式结尾,但是这个文件是磁盘文件),当我们拍了一次快照之后,原来的磁盘文件(左边底层block)就直接变成了只读。那这个时候如果我们改变数据会发生什么情况呢?

 

删除:假设我们删除inode中的3,差分卷会怎么做呢?和COW一样,因为snap01中的索引和block中的数据依然是一一指向关系,所以这个时候差分卷什么都不会做。维持原样。

 

 

修改:假设我们的数据发生变化,差分卷会怎么做呢?比如我们把inode中的3改成5。因为之前的block在拍快照之后变成了只读文件,所以没办法写入数据。当inode中的3改成5之后,它会直接把本该写入block中的5写入row差分卷中,然后修改inode中5的指向直接指到差分卷中。

 

 

新增:假设新增数据,会怎么办呢?假设我们新增了数据678,因为原block是只读的,所以678也是直接写到了差分卷中。然后修改inode中678的指向直接指到差分卷中。

 

如果我们接着拍了第二个快照,会发生什么呢?如下图所示,假如我们拍了snap02,那么它就会产生第二个row差分卷,重要的是第一个差分卷就变成了只读,所以只要有新的差分卷生成,之前的差分卷就会变成已读。当有数据写入时,会直接写入到新的差分卷中。snap02中的索引也会一一指向block和第一个差分卷中的数据。所以如果我们连续的拍快照,最后就会形成一个快照链,因为每一个row差分卷都是有用的,快照链如下图所示。

 

 

这就是写时重定向ROW,所谓重定向就是在写入数据的时候直接把他写入到了差分卷中。

 

最后我们总结一下ROW和COW的区别:

cow拍快照后,如果对数据进行修改和新增,不仅会影响原磁盘中的block,也会影响cow区域。

row拍快照后,如果对数据进行修改和新增,只会影响最后一次快照对应的row差分卷。

  

实验:

我们做个实验来看一下ROW的底层到底是什么样的。

如下图所示,我们查看我们虚拟机的磁盘信息,发现它就是一个.img文件,这就对应了我们上边说的磁盘block也是一个.img文件。我们可以看到它的大小是40G,这就是我们创建虚拟机时划分给它的磁盘大小。但是它的实际使用量只用了11G。然后我们给这个虚拟机拍一个快照,我们可以看到这时候多了一个.img文件出来,这就是快照生成的ROW差分卷,我们可以看到这时候它的大小只有9M,因为这时候还没有数据写入。

 

  

这个时候我们在虚拟机中写入一些数据,我们可以看到差分卷的大小变成了136M,这就是我们前边说的ROW快照模式下,原先的磁盘会变成只读,有数据写入时只会写入ROW差分卷中。

 

 

这个时候我们在拍一次快照,我们可以看到又多了一个新的img文件出来,这就是我们说的每拍一个快照,就会生成一个新的row差分卷。

 

 

然后我们在往磁盘中写入数据,我们会发现原先的差分卷大小没有发生变化,而新的差分卷变成了103M。这就是我们说的新的差分卷生成之后,之前的差分卷也都会变成只读。新的数据只会写入到最新的差分卷。

 

 

那么这个时候如果我们删除第二个快照会发生什么呢?我们可以看到第二个快照对应的差分卷已经没有了。第一个差分卷的大小从221M变成了274M,这就意味着他把第二个差分卷中的数据合并到了第一个差分卷中。这就是ROW快照合并。这时候再有数据写入的话,它会直接写入到第一个差分卷中。以此类推,假如我们再把第一个快照删了,那么第一个差分卷中的数据也会合并到原磁盘中。

 

 

标签:快照,写入,差分,磁盘,原理,block,ROW
来源: https://www.cnblogs.com/yunjisuanchengzhanglu/p/16107680.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有