快照机制COW和ROW原理区别

一直对快照的两种模式cow和row区分不开,今天看到一篇文章讲的很清晰。转载过来,希望能给有同样困惑的同学以帮助。

所谓快照,是指某数据集在某一时刻一个完全可用的拷贝。也叫即时拷贝。注意是一个完全可用的。如果是在window环境下,则要结合VSS 机制,把应用程序的buffer,文件系统的buffer,操作系统的buffer全部刷向磁盘后,再做快照。

当前快照有两种实现,分别是COW(Copy on first write) 和ROW(Redirect on first write).

假如有一个卷8个物理块,分别为1~8, 在某一个时刻做了快照,这时候生成了一个快照卷,快照卷也有8个块,和原始卷一样指向相同的物理块。这时候有一个新的io,修改原始卷的第8个物理块,对COW 而言,会依次做如下几步

1、分配一个新的物理块。我们称为第9个物理块

2、读取第8个物理块

3、新读取的第8个物理块数据写入到第9个物理块。

4、更新快照卷map,指向第9个物理块

5、更新第8个物理块

 

快照机制COW和ROW原理区别_第1张图片

图片发自简书App

 

从上面可以看出,本来写一个物理块,变成了1读3写。

COW 优点:

1、原始卷物理块连续。没有碎片。

COW 缺点:

1、写放大,本来一个写,变成1读3写。

对ROW 而言,会依次做如下几步

1、分配一个新的物理块。我们称为第9个物理块

2、数据写入到第9个物理块。

3、更新原始卷map,指向第9个物理块

 

快照机制COW和ROW原理区别_第2张图片

图片发自简书App

 

从上面可以看出,本来写一个物理块,变成了2写。

ROW 优点:

1、性能比COW 好。

ROW 缺点:

1、写放大,本来一个写,变成2写。

2、原始卷物理块不连续。没、有碎片。


 

你可能感兴趣的:(Storage)