[关闭]
@dyj2017 2017-10-31T14:03:52.000000Z 字数 1509 阅读 1096

rbd: sysfs write failed

ceph ceph运维 rbd


问题描述:

创建完镜像foo后,映射镜像时提示下面的错误:

  1. [root@node3 ~]# rbd map testpool/foo
  2. rbd: sysfs write failed
  3. RBD image feature set mismatch. Try disabling features unsupported by the kernel with "rbd feature disable".
  4. In some cases useful info is found in syslog - try "dmesg | tail".
  5. rbd: map failed: (6) No such device or address

解决办法:

出现这种错误的原因是OS kernel不支持块设备镜像的一些特性,所以映射失败。查看该镜像支持了哪些特性:

  1. [root@node3 ~]# rbd info testpool/foo
  2. rbd image 'foo':
  3. size 1024 MB in 256 objects
  4. order 22 (4096 kB objects)
  5. block_name_prefix: rbd_data.3723643c9869
  6. format: 2
  7. features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
  8. flags:
  9. create_timestamp: Sat Oct 21 14:38:04 2017

可以看到特性feature一栏,由于我OS的kernel只支持layering,其他都不支持,所以需要把部分不支持的特性disable掉。

方法一:

直接diable这个rbd镜像的不支持的特性:

  1. [root@node3 ~]# rbd feature disable testpool/foo exclusive-lock object-map fast-diff deep-flatten
  2. [root@node3 ~]# rbd info testpool/foo
  3. rbd image 'foo':
  4. size 1024 MB in 256 objects
  5. order 22 (4096 kB objects)
  6. block_name_prefix: rbd_data.3723643c9869
  7. format: 2
  8. features: layering
  9. flags:
  10. create_timestamp: Sat Oct 21 14:38:04 2017

方法二:

创建rbd镜像时就指明需要的特性,如:

  1. [root@node3 ~]# rbd create testpool/foo1 --size 1024 --image-feature layering
  2. [root@node3 ~]# rbd info testpool/foo1
  3. rbd image 'foo1':
  4. size 1024 MB in 256 objects
  5. order 22 (4096 kB objects)
  6. block_name_prefix: rbd_data.3752643c9869
  7. format: 2
  8. features: layering
  9. flags:
  10. create_timestamp: Sat Oct 21 14:06:47 2017

方法三:

如果还想一劳永逸,那么就在执行创建rbd镜像命令的主机中,修改Ceph配置文件/etc/ceph/ceph.conf,在global section下,增加:

  1. rbd_default_features = 1

需要先删除之前创建过的镜像,再创建该镜像

通过上面三个方法的任意一种之后,再次尝试映射rdb镜像到本地块设备,成功!

  1. [root@node3 ~]# rbd map testpool/foo
  2. /dev/rbd0

参考文献:

RDB MAP出错RBD SYSFS WRITE FAILED

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注