来自官方文档:
快照介绍
快照是映像在某个特定时间点的一份只读副本。
对当前镜像打过快照以后,Active层仍在当前镜像,快照文件为只读。
Note
如果在做快照时映像仍在进行 I/O 操作,快照可能就获取不到该映像准确的或最新的数据,并且该快照可能不得不被克隆到一个新的可挂载的映像中。所以,我们建议在做快照前先停止 I/O 操作。如果映像内包含文件系统,在做快照前请确保文件系统处于一致的状态。要停止 I/O 操作可以使用fsfreeze 命令。详情可参考 fsfreeze(8) 手册页。对于虚拟机,qemu-guest-agent 被用来在做快照时自动冻结文件系统。
rbd 快照
基本操作
创建
rbd snap create {pool-name}/{image-name}@{snap-name}
查看
rbd snap ls {pool-name}/{image-name}
回滚快照
rbd snap rollback {pool-name}/{image-name}@{snap-name}
Note
用快照中的数据覆盖映像的当前版本,映像越大,此过程花费的时间就越长。从快照克隆要快于回滚到某快照,这也是回到先前状态的首选方法。
删除快照
rbd snap rm {pool-name}/{image-name}@{snap-name}
Note
Ceph OSDs 异步地删除数据,所以删除快照后不会立即释放磁盘空间。
清除快照
rbd snap purge {pool-name}/{image-name}
分层
可以为某一设备快照创建很多个写时复制( COW )克隆。分层快照使得 Ceph 块设备客户端可以很快地创建映像。例如,你可以创建一个包含有 Linux VM 的块设备映像;然后做快照、保护快照,再创建任意多个写时复制克隆。快照是只读的,所以简化了克隆快照的语义 —— 使得克隆很迅速。
cow 原理图
分层步骤
一个快照的 COW 克隆和其它任何 Ceph 块设备映像的行为完全一样。克隆出的映像没有特别的限制,你可以读出、写入、克隆、调整克隆映像的大小。然而快照的写时复制克隆引用了快照,所以你克隆快照前必须保护它。
保护快照
rbd snap protect {pool-name}/{image-name}@{snapshot-name}
Note
你删除不了受保护的快照。
克隆快照
rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
Note
你可以把某个存储池中映像的快照克隆到另一存储池。例如,你可以把某一存储池中的只读映像及其快照作为模板维护,把可写克隆置于另一存储池。
取消快照保护
rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
罗列快照的子孙
rbd children {pool-name}/{image-name}@{snapshot-name}
拍平克隆映像
克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用,你可以把快照的信息复制给子克隆,也就是“拍平”它。拍平克隆映像的时间随快照尺寸增大而增加。要删除快照,必须先拍平子映像。
rbd flatten {pool-name}/{image-name}
Note
因为拍平的映像包含了快照的所有信息,所以拍平的映像占用的存储空间会比分层克隆要大。
参考:
1、cow & row:http://blog.sina.com.cn/s/blog_b4b6c24d0102whpt.html