RBD镜像格式2的镜像可以支持几个可选的特性
其中layering特性是RBD镜像的核心特性
1 | rbd feature enable <pool-name>/<rbd-name> layering |
镜像快照snap
先说如果没有快照的情况下,数据对RBD的读写会直接写入磁盘
首先快照是什么
与虚拟机不同,RBD的快照在初始状态下是一个和原镜像同样结构的空镜像
COW写时复制/COR读时复制
写入数据
首先snap是只读的,写入是对RBD进行写入
snap在初始状态下,如果有数据进行写入,就会触发COW写时复制
1.原始数据被放到新存储块下的block_new
2.新数据替换掉原始数据的位置block_old
3.snap将已修改的数据块位置,关联到block_new
4.RDB将修改过的block_old位置标记为不受snap保护的位置
此时这个snap其实增长了新数据占用的那一点点空间
非初始状态下
如果有数据进行写入,且写入位置为block_old,那么不受snap保护,不会触发COW,新数据就会直接写入到RBD中
读取数据
snap初始状态下,读取到的是RBD的内容,因为全部都受snap保护
非初始状态下,会读取所有受保护数据块对应位置的RBD的内容,同时读取所有不受保护的数据块的snap的数据
根据上面说的写入数据的机制,可以知道snap将这些数据块元数据已经做了修改,将其指向block_new的位置
镜像克隆
RBD 克隆扁平化(Flattening) 是指将基于快照创建的克隆镜像与其父快照之间的依赖关系断开,使克隆镜像成为一个完全独立的镜像的过程。当执行扁平化操作时,系统会将所有从父快照继承的数据块复制到克隆镜像中,从而消除对原始快照的依赖。
根据上面说的COW的读取数据,镜像克隆其实就是读数据最后读成一个完整镜像的过程,最后克隆出来的结果就是一个RBD镜像
RBD快照操作
1 | 在创建快照前,需要先冻结文件系统 |