快照原理(全拷贝快照、cow、row)

快照原理(全拷贝快照、cow、row)

快照是记录系统某个时间点的状态,可以帮助用户回到快照记录的时刻,例如恢复故障等等,可见快照功能非常重要。
常见快照的有两类:全拷贝快照、差分快照(cow、row)

RAID JBOD: raid0,raid1,raid2,raid3 …

常用的RAID模式及其基本特点如下;

  1. RAID0可以简单理解为将多个硬盘合并为一个大硬盘使用。由于数据可以分散同时写入多块硬盘,所以可以获得很高的读写性能。其缺点是阵列中任意一块硬盘损坏则数据全部丢失。RAID0至少需要两块硬盘。
  2. RAID1可以简单理解为使用多个硬盘做重复镜像。这种阵列可提供很好的数据安全性,只有所有硬盘全部损坏才会导致数据丢失。RAID1至少需要两块硬盘。
  3. RAID2在普通阵列的基础上,使用专用的磁盘保存数据的ECC校验码,通过海明码校验,可以在数据发生错误的情况下检查并将错误校正,以保证输出的正确。
  4. RAID3于RAID2类似,但是只提供查错功能,不提供纠错功能。
  5. RAID4可以理解为RAID3的大数据版。它的难度比RAID3大得多,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。
  6. RAID5可以理解为RAID3的分布数据版。由于数据的分布存放,因为访问效率更高。

全拷贝快照

全拷贝快照可以参考raid1 理解,创建的时候会生成一个源卷的镜像卷,在读操作的时候没有什么影响,在写操作的时候会有两次写入,分别写入源卷与镜像卷。

img

拍摄快照时,镜像卷会断开读写操作,这样就会完整记录此时的磁盘状态,这个方法是最完整的,创建快照可瞬间完成,但是磁盘占用很大,源卷有多大,镜像卷就需要多大。

inode 基本作用

用来记录文件系统对象的一些元信息数据。一个文件占用一个inode , inode数量大小是固定的(ext4与xfs可以设置为256B)。
inode中大致有如下信息:
文件属主与属组
文件读写属性(基本rwx权限等)
文件大小(字节数)
文件时间戳(ctime、atime、mtime)
记录文件内容的指向block(文件内容数据的存储位置指针,)
文件特性表示(flag,如SetUID)
连接数(有多少硬链接指向这个inode)

如何通过inode读取到正确的文件内容

一个文件占用一个inode ,且inode是固定的,小文件过多就可能造成磁盘空间剩余挺多,但是inode耗尽的情况。
ext文件系统可以查询inode总数

img

查看当前系统inode使用情况

img

一个大文件,文件内容占用大量存储空间的话,明显一个inode 就不能完全记录这个文件存储位置指针。为此记录区块的区域定义为12个直接、一个间接、一个双间接、一个三间接记录区。这些“间接”就是拿一个区块来作为记录区来使用的“记录区”,这些就是延伸出来的“记录区”
当一个inode 中的12个直接记录区直接指向真实内容block号码。
间接记录区指向block1,block1记录了真实内容的block号码
双间接记录区指向block1,这个block1指向一个block2,block2记录了真实内容的block号码
三间接记录区指向block1,这个block1指向一个block2,block2指向block3,block3记录了真实内容的block号码
inode指向真实block号码简图(可以百度,有更详细的图片)

img

差分快照

cow

这个方式会创建源卷与快照卷,源卷保存原始数据,创建快照是会保存原始数据所在的源数据块的物理位置元数据,即快照卷会保存原始数据的inode信息。
cow(Copy On Write)写时复制,顾名思义,就是在写入操作的时候进行复制源数据到新的block保存

  1. 写入操作的时候快照软件会监控原始数据是否发生变化
  2. 如果需要修改inode1原始数据block1 , 会先复制block1的数据到inode2的block2
  3. 快照软件修改快照卷中原始数据的inode1修改为inode2
  4. 将需要写入的数据写入到block1。

由此可见写操作时会有多次的读写操作,就会出现耗时相比较长的情况。单纯读操作没啥影响。

那么 CoW 的工作原理可以用图来表示,如下:

CoW快照原理.png

总结一下,CoW 快照的优缺点:

  • 修改数据性能下降
  • 读数据性能不变

row

row(Redirect-On-Write),写时重定向。row与cow很相似,不同在于创建快照之后,首次写操作会重定向到新卷中。创建快照之前的所有原始数据都会保存在源卷,创建之时源卷是只读状态。当文件变更的时候,新变更的数据写入快照卷的block,文件inode也会修改为新的block,相对于cow这样做的好处就是不用执行多次写操作。
这种方式还可以创建快照链,这种快照链类似增量备份,新快照只会记录变化的部分,例如VMware的快照,每次新建快照会生成一个新的快照文件,这个文件是在上一个快照的增量部分,了解mysql的朋友就知道mysql增量备份就是类似的原理。当我们要恢复一个数据的时候,这个数据会先从最原始的快照(源卷)开始合并,知道合并到需要恢复的这个快照数据。

img

img

row原理简图

img

快照的应用场景

全拷贝快照
因为全拷贝消耗很大,目前没有使用过,可能在特殊场景才能用到,(比如需要 在某一精准时刻 备份与源文件数据一致?)

cow
某些数据库软件就是使用的 CoW 机制,还有一些较为重要的文件,redis mysql 等等做数据备份的时候,全量备份时用的比较多

row
虚拟软件(例如刚才说的VMware)的快照,虚拟化平台所使用的快照技术一般是基于 row 来实现的,还有mysql的增量备份


参考资料

w
虚拟软件(例如刚才说的VMware)的快照,虚拟化平台所使用的快照技术一般是基于 row 来实现的,还有mysql的增量备份


参考资料

  • 28
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
qcow2是一种用于磁盘镜像的格式,它采用了row/cow(Read-Only / Copy-On-Write)快照技术。 首先,我们来解释一下row/cow的概念。当创建一个基础镜像时,qcow2使用row模式,即只读模式。这意味着任何修改都不会直接应用在基础镜像上,而是在cow镜像中进行。 当需要对镜像进行修改时,会创建一个cow镜像作为基础镜像的副本。cow镜像会记录所有修改的数据块。在读取数据时,qcow2首先检查cow镜像中是否存在所需的数据块,如果存在,则直接从cow镜像读取。如果不存在,则从基础镜像中读取。 当需要保存修改后的镜像时,qcow2会将cow镜像中的数据块合并到基础镜像中,这样就完成了修改的永久保存。 使用row/cow快照技术的好处是节省了存储空间。由于只记录了修改的数据块,所以cow镜像通常只占用少量空间,而且可以共享基础镜像的不变部分。这意味着可以同时创建多个cow镜像,在相同的基础镜像上进行不同的修改,并且只需要存储修改的差异部分,节省了存储空间。 此外,row/cow快照技术还具有更好的性能。由于只有数据块发生变化的部分需要读写,因此可以大大提高传输速度和磁盘操作效率。 总之,qcow2的row/cow快照技术通过读取基础镜像和cow镜像的方式,实现了节省存储空间和提高性能的效果。它在虚拟化环境中被广泛应用,并且有利于提高资源利用率和系统性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值