知识卡片
写时复制快照的对象级粒度
内容
[[精简配置与快照克隆的空间分配策略]]描述的写时复制思路在Ceph RBD里的落地粒度是数据对象而不是整个Image:创建快照那一刻并不会立即复制任何数据,只有当某个具体的数据对象第一次被覆盖写时,才会把这个对象原有的内容复制出来生成快照对象,之后的写才落到原对象上。这意味着快照的空间和时间开销只和”之后实际被修改过的那部分数据”成正比,没被碰过的对象永远不会被复制。基于同样的机制,Ceph还支持克隆——把某个快照直接复制变成一个可写的新Image,克隆出来的Image没有自己数据的部分会顺着Parent引用链一路找到原始快照读取,直到调用一个耗时的flatten操作才会彻底和Parent解绑变成独立数据集。发散:写时复制的开销永远取决于”真正被修改的比例”,这也是为什么快照特别适合读多写少或者只读归档场景——写得越多,写时复制带来的额外读写次数就越可观。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第7章《分布式存储与Ceph》