[TOC]
RBD全称为RADOS Block Device,是一种构建在RADOS集群之上为客户端提供块设备接口的存储服务中间层。这类的客户端包括虚拟机KVM和云计算操作系统OpenStack、CloudStack等。 RBD为条带化,支持存储空间的动态扩容等特性,并可以借助RADOS实现快照,副本和一致性。 客户端访问RBD有两种方式。
1、创建RBD接口需要创建专门用于RBD的存储池
| |
| ceph osd pool create kvm 32 32 |
| |
| |
| ceph osd pool application enable kvm rbd |
| |
| |
| ceph osd pool set kvm crush_rule egon_rule |
2、初始化存储池
3、创建镜像
| |
| rbd create --size 5G --pool <pool name> <image name> |
| |
| |
| rbd create --size 1G --pool kvm img1 |
4、查看镜像
| |
| rbd ls --pool kvm -l |
| |
| |
| rbd --image img1 --pool kvm info |
| |
| 显示内容注解: |
| size:镜像的大小与被分割成的条带数。 |
| order 22:条带的编号,有效范围是12到25,对应4K到32M,而22代表2的22次方,这样刚好是4M。 |
| id:镜像的ID标识。 |
| block_name_prefix:名称前缀。 |
| format:使用的镜像格式,默认为2。 |
| features:当前镜像的功能特性。 |
| op_features:可选的功能特性。 |
5、修改镜像大小
| rbd resize --pool kvm --image img1 --size 5G |
使用resize就可以调整镜像的大小,一般建议只增不减,如果是减少的话需要加一个选项–allow-shrink,如。
| rbd resize --pool kvm --image img1 --size 2G --allow-shrink |
6、删除镜像
使用remove或者rm都可以,通常不推荐直接删除镜像,下述方法删除镜像后,镜像将不可恢复。
推荐使用trash命令,这个命令删除是将镜像移动一回收站,如果想找回还可以恢复,如。
| rbd trash move <pool name>/<image name> |
| rbd trash list --pool <pool name> |
| rbd trash restore <pool name>/<id> |
| |
| |
| rbd trash move kvm/img1 |
| rbd trash list --pool kvm |
| rbd trash restore kvm/5b6376b8b4567 |
| rbd ls --pool kvm -l |
对rbd镜像进行快照,可以保留镜像的状态历史,另外还可以利用快照的分层技术,通过将快照克隆为新的镜像使用。
| rbd snap create --pool <pool name> --image <image name> --snap <snap name> |
- –pool:指定哪个存储池。
- –image:指定哪个镜像。
- –snap:指定快照的名称。
还可以使用下面的命令创建快照,更方便,简单。
| rbd snap create <pool name>/<image name>@<snap name> |
例
| rbd snap create kvm/img1@img1_snap1 |
列出指定镜像所有快照。
| rbd snap list <pool name>/<image name> |
还可以用json格式输出。
| rbd snap list <pool name>/<image name> --format json --pretty-format |
例
| rbd snap list kvm/img1 --format json --pretty-format |
回滚镜像到指定快照。
| rbd snap rollback <pool name>/<image name>@<snap name> |
注意: 在回滚快照之需要将镜像取消镜像的映射,然后再回滚。
例
| rbd snap rollback kvm/img1@img1_snap1 |
限制镜像可创建快照数。
| rbd snap limit set <pool name>/<image name> |
解除限制。
| rbd snap limit clear <pool name>/<image name> |
删除指定快照。
| rbd snap rm <pool name>/<image name>@<snap name> |
删除所有快照。
| rbd snap purge <pool name>/<image name> |
快照分层支持用快照的克隆生成新镜像,这种镜像与直接创建的镜像几乎完全一样,支持镜像的所有操作。唯一不同的是克隆镜像引用了一个只读的上游快照,而且此快照必须要设置保护模式。
- 将上游快照设置为保护模式。
| rbd snap protect <pool name>/<image name>@<snap name> |
| |
| |
| rbd snap create kvm/img1@img1_snap666 |
| rbd snap protect kvm/img1@img1_snap666 |
2、克隆快照为新的镜像。
| rbd clone <pool name>/<image name>@<snap name> --dest <pool name>/<image name> |
| |
| |
| rbd clone kvm/img1@img1_snap666 --dest kvm/img3 |
- –dest:指定新的镜像名。 克隆完成后可以通过下面命令查看快照的子项。
| rbd children <pool name>/<image name>@<snap name> |
通常情况下通过快照克隆而得到的镜像会保留对父快照的引用,这时候不可以删除该父快照,否则会有影响
| rbd snap rm kvm/img1@img1_snap666 |
| |
如果要删除快照但想保留其子镜像,必须先展平其子镜像,展平的时间取决于镜像的大小,操作方法如下。
1、展平子镜像。
| rbd flatten <pool name>/<image name> |
| |
| |
| rbd flatten kvm/img3 |
当展平完成后,正常情况下该快照还是受保护的,无法删除,所以还需要先取消保护。
2、取消快照保护。