本文主要是介绍数据备份 快照技术 之第一次写时复制(COW)和写时重定向(ROW),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据备份 快照技术 之第一次写时复制(COW)和写时重定向(ROW)
1.快照技术
关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点的映像。
快照相当于给数据拍个照片
2. 第一次写时复制 COW
COW(Copy-On-Write),写时拷贝,也称为写前拷贝。
创建快照以后,如果源卷的数据发生了变化,那么快照系统会首先将原始数据拷贝到快照卷上对应的数据块中,然后再对源卷进行改写。
写操作
如上图简要示例,快照创建以后,若上层业务对源卷写数据X,X在缓存中排队,快照系统将X即将写入的位置(逻辑地址)上的数据Y,拷贝到快照卷中对应的位置(逻辑地址)上,同时,生成一张映射表,表中一列记录源卷上数据变化的逻辑地址,另一列记录快照卷上数据变化的逻辑地址。我们可以看到,上层业务每下发一个数据块,存储上,发生了两次写操作:一次是源卷将数据写入快照卷(即图中Y),一次是上层业务将数据写入源卷(即图中X)。
读操作
如上图,快照卷若映射给上层业务进行数据分析等用途时,针对快照进行读操作时,首先由快照系统判断,上层业务需要读取的数据是否在快照卷中,若在,直接从快照卷读取,若不在,则查询映射表,去对应源卷的逻辑地中读取(这个查表并去源卷读的操作,也叫读重定向)。这一点,恰好就解释了为什么快照是一份完全可用的副本,它没有对源卷进行100%的拷贝,但对上层业务来说,却可以将快照看做是和源卷“一模一样”的副本。
也就是说,我们开始有原数据以及创建好的快照,当原数据要发生改变时(暂时在cache中),我们先将即将改变的位置的数据复制到快照,再将数据复制到原始磁盘,然后快照指针更改,存在一个重定向,如果在快照中找不到,即重定向到原始磁盘寻找。
3.写时重定向
ROW(Redirect-on-write ),也称为写时重定向。
创建快照以后,快照系统把对数据卷的写请求重定向给了快照预留的存储空间,直接将新的数据写入快照卷。上层业务读源卷时,创建快照前的数据从源卷读,创建快照后产生的数据,从快照卷读。
写操作:
如上图简要示例,快照创建以后,若上层业务对源卷写数据X,X在缓存中排队,快照系统判断X即将写入源卷的逻辑地址,然后将数据X写入快照卷中预留的对应逻辑地址中,同时,将源卷和快照卷的逻辑地址写入映射表,即写重定向。我们可以看到,上层针对源卷写入一个数据块X,存储上只发生一次写操作,只是写之前进行了重定向。
读操作:
若快照创建以后,上层业务对源卷进行读,则有两种情况:1)若读取的数据,在创建快照前产生,数据是保存在源卷上的,那么,上层就从源卷进行读取;2)若需要读取的数据是创建快照以后才产生的,那么上层就查询映射表,从快照卷进行读取(即读重定向)。
若快照创建以后,上层业务对快照卷进行读,同样也有两种情况:1)若读取的数据,在创建快照前产生,数据是保存在源卷上的,那么上层就查询映射表,从源卷进行读取;2)若需要读取的数据是创建快照以后才产生的,那么上层就直接从快照卷进行读取。
我们可以看到,ROW快照也是根据创建快照后上层业务产生的数据,来实时占用必需的存储空间。
参考:https://zhuanlan.zhihu.com/p/39916936
这篇关于数据备份 快照技术 之第一次写时复制(COW)和写时重定向(ROW)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!