前言

这个问题是不久前在ceph社区群里看到的,创建image的时候,当时的报错如下:

2016-12-13 23:13:10.266865 7efbfb7fe700 -1 librbd::image::CreateRequest: pool not configured for self-managed RBD snapshot support


rbd: create error: (22) Invalid argument

这个错我之前也没见过,并且因为很少用到快照,所以可能也就没有触发这个问题,在查看了一些资料以后,明白了原因,这里就梳理一下

Ceph实质上有两种Snapshot模式,并且两种Snapshot是不能同时应用到同一个Pool中。


Pool Snapshot: 对整个Pool打一个Snapshot,该Pool中所有的对象都会受影响


Self Managed Snapshot: 用户管理的Snapshot,简单的理解就是这个Pool受影响的对象是受用户控制的。这里的用户往往是应用如librbd。

上面这段话引用自 麦子迈:解析ceph-snapshot

本篇就将讲述下用两种的互斥是如何实现的,又如何解决

实践

我们创建两个存储池

[root@lab8106 ~]# ceph osd pool create testpool1 8
pool 'testpool1' created
[root@lab8106 ~]# ceph osd pool create testpool2 8
pool 'testpool2' created

我们在testpool1当中创建一个image,testpool2保留为空

[root@lab8106 ~]# rbd -p testpool1 create testimage --size 4000

我们检查下存储池

[root@lab8106 ~]# ceph osd dump
···
pool 5 'testpool1' replicated size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 85 flags hashpspool stripe_width 0
removed_snaps [1~3]
pool 6 'testpool2' replicated size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 82 flags hashpspool stripe_width 0
···

创建了image的存储池多了一个标记 removed_snaps [1~3] ,而没有创建的存储池没有这个标记

我们现在来对两个存储池创建快照

[root@lab8106 ~]# ceph osd pool mksnap testpool1 testpool1-snap
Error EINVAL: pool testpool1 is in unmanaged snaps mode
[root@lab8106 ~]# ceph osd pool mksnap testpool2 testpool2-snap
created pool testpool2 snap testpool2-snap

可以看到创建了image的存储池无法创建存储池的快照,因为存储池当前已经为unmanaged snaps mode了,而没有创建image的 就可以做存储池快照

我们再继续创建image,看下会发生什么

[root@lab8106 ~]# rbd -p testpool1 create testimag2 --size 4000
[root@lab8106 ~]# rbd -p testpool2 create testimag3 --size 4000
2016-12-13 23:31:58.105932 7fd9cb7fe700 -1 librbd::image::CreateRequest: pool not configured for self-managed RBD snapshot support
rbd: create error: (22) Invalid argument

可以看到做了存储池快照的存储池无法创建image了,并且提示了没有配置成self-managed RBD snapshot,创建的时候会去检查是否是自管理模式

这个地方有个配置项目是

rbd_validate_pool = true

我们把这个参数改成false,然后再次创建

[root@lab8106 ~]# rbd -p testpool2 create testimag3 --size 4000

就可以创建了

本篇共出现了两次抛错,所以,这个是需要我们去做好选择的,总结下大概是这样的

总结

本篇总结了快照的两个出错的原因,尽量提前做好规划,再去选择哪种

最新文章

  1. linux 时间同步的2种方法
  2. 表单填写示例(通过JavaScript访问DOM)
  3. href="javascript:function()" 和onclick的区别
  4. Bootstrap 排版 笔记
  5. user-select
  6. git如何使用 svn如何使用
  7. iOS图片加载新框架 - FlyImage
  8. C#如何在事件中获得GridView里面TextBox的值
  9. 8款超酷体验的jQuery/CSS3应用插件
  10. texedo 分布式事务
  11. BZOJ 3401: [Usaco2009 Mar]Look Up 仰望( 单调栈 )
  12. Detailed Information for Outputted Files from Somatic Mutation Annotators(annovar 注释文件条目详细解释)
  13. Angular--ui-router的使用
  14. 201521123009 《Java程序设计》第8周学习总结
  15. dijit.byId("grid") is undefined
  16. Fleck For Web Socket
  17. VS2015 无法启动 IIS Express Web 服务器 解决方案
  18. HDU-6386-最短路
  19. 在javascript中toString 和valueOf的区别
  20. javascript公有静态成员

热门文章

  1. 【C++学习笔记】C++经典十二道笔试题!你能做出几道?
  2. Go 安装配置golint
  3. ASP.NET实现进度条效果【转】
  4. JAVA XML格式化输出
  5. codevs1298, hdu1392 (凸包模板)
  6. 使用BeetleX.Tracks对APM关系链埋点
  7. MongoDB用户,角色管理 --- MongoDB基础用法(三)
  8. ThreeJS系列2_effect插件集简介( 3d, vr等 )
  9. k8s中pod的yaml文件全面解读
  10. python类变量与成员变量