COW快照(copy-on-write)和ROW快照(redirect-on-write)的区别

概述

所有快照类型的共同点是,它们都是虚拟的拷贝而不是物理的拷贝。一旦被保护对象(protected entity,一般指volume,而在对象存储的场景下指的可能是container或NAS share)遭遇损坏,所有快照都将宣告无效。

做快照,通常有2个目的:一是为了将来对于删除或损坏的文件能够进行恢复;二是作为副本或备份的源端(注:比如,备份快照,而不是备份原volume)。

为了防止快照发生物理介质性质的损坏,必须复制或备份到其他的设备上。即,必须做一个物理拷贝。(注:这里似乎指的是对快照本身做一个物理拷贝,而不是对protected entity做物理拷贝。)

copy-on-write快照和redirect-on-write快照的区别主要是关于如何存储一个修改的block的修改前内容。Copy-On-Write是将旧数据拷贝出来,在原位置写新数据,即尽量维持原protected entity的物理位置的完整性;Redirect-On-Write是在新的位置写新的数据,然后将指针指向新的位置,那么当改写越多的时候,整个protected entity就等于是越分散。

Copy-on-Write快照

当protected entity的某个block将被改写的时候,该block首先被copy到其他地方(即拷贝到快照系统指定的某个位置),然后再在它原来的位置(即该protected entity的存储位置)进行改写。
这种方法的每次写操作都要求3个I/O操作:一次读操作和两次写操作。读取一个copy-on-write快照的内容,会有计算量。(注:因为要寻址,原block都分散在各处了。

Redirect-on-Write快照

RoW快照使用指针指向protected entity的所有block. 若一个block将被改写,存储系统将指向该block的指针指向一个新位置,然后将新数据写到该新位置。而快照系统知道在哪里找到原block内容,还是使用指针。
读取一个redirect-on-write快照没有任何的计算量。

对性能的影响

Copy-on-wirte快照对于原protected entity的性能有着巨大的影响。创建的快照越多,它们存储的时间越久,对protected entity的性能印象就越大。(注:想象一下,一个volume做了N个CoW快照,当该volume有一个block被改写后,该block的原版本就要被拷贝到N个地方,然后重写原block。所以创建的快照越多,对性能影响越大。)所以,copy-on-write快照一般被用于作为备份的临时源。它们被创建、被备份,然后立即就被删除了。
而Redirect-on-write快照则经常会被创建,而且会被保存很久。如果做中长期的数据保护,那么Redirect-on-write快照是推荐之选。

参考文献:

https://storageswiss.com/2016/04/01/snapshot-101-copy-on-write-vs-redirect-on-write/

你可能感兴趣的:(存储,存储)