快照可通过两种方式实现:COFW、ROFW

COFW执行过程:

1、系统执行快照,此时将所有的写IO暂挂,然后开始将整个文件系统的元数据链复制一份,复制完成后立即解除暂挂。PS:被复制下来的这份元数据链与当前活动的元数据链完全相同;

2、某时间应用程序更改了当前活动的A数据块为A1,数据首次覆盖写(COFW),需要先将原来的A数据块复制出来,然后再写入A1数据块。在快照元数据链中将原来指向A的指针改为指向复制出来的A新地址;

3、之后更改的数据同理;

4、如果产生了新分配的数据,由于这个文件系统在快照那一刻没有记录,所有系统不会做任何复制动作,追加写会伴随着元数据的数量和容量的变化而不仅是指针指向的改变,但对于LUN来说,卷容量和位置是固定的,除非某场景下将某个LUN扩容;

5、当源文件系统内所有的数据块被覆盖写一遍之后,系统内就有两套完成的文件系统;一套当前活动文件系统,另一套是这个文件系统所对应的历史某时刻的快照数据。


ROFW执行过程:

ROFW执行过程

1、系统执行快照,此时将所有写IO暂挂,然后立即开始将整个文件系统的元数据复制一份,复制完成后立即解除暂挂;

2、之后某时刻应用程序更改当前活动C为C1,属于首次覆盖写(ROFW),直接将C1数据块重定向写入到某剩余空间内,之后将当前活动文件系统元数据链中原本指向C的指针改为指向被重定向写出去的C1新地址

3、之后更改的数据同理;

4、如果产生了新分配的数据,由于这个文件系统在快照那一刻没有记录,所以系统并不会作任何重定向动作

5、当源文件系统内所有的数据块被覆盖写一遍之后,系统内就有两套完成的文件系统;一套当前活动文件系统,另一套是这个文件系统所对应的历史某时刻的快照数据。