创建一个块设备池
在管理节点上,使用该ceph工具创建一个pool。
在管理节点上,使用该rbd工具初始化池以供RBD使用:
rbd pool init <pool-name>
rbd默认池名称为“ rbd”,没有的就创建一下,否则
rbd ls
时会报rbd: error opening default pool ‘rbd’错误
举例:
[ceph@ceph06 ~]$ ceph osd pool create rbd 32 32 #创建rbd默认池
pool 'rbd' created
[ceph@ceph06 ~]$ rbd pool init rbd
[ceph@ceph06 ~]$ ceph osd pool create images 32 32 #创建名称为images的池
pool 'images' created
[ceph@ceph06 ~]$ rbd pool init images
创建一个块设备用户
注:通过提供可选参数–id {id}来指定用户ID,否则rbd命令将使用默认的用户ID admin访问Ceph集群,此ID允许对群集进行完全管理访问,建议您尽可能使用受限制的用户。
To create a Ceph user, with ceph specify the auth get-or-create command, user name, monitor caps, and OSD caps:
ceph auth get-or-create client.{ID} mon 'profile rbd' osd 'profile {profile name} [pool={pool-name}][, profile ...]' mgr 'profile rbd [pool={pool-name}]'
For example, to create a user ID named qemu with read-write access to the pool rbd and read-only access to the pool images, execute the following:
[ceph@ceph06 ~]$ sudo ceph auth get-or-create client.qemu mon 'profile rbd' osd 'profile rbd pool=rbd, profile rbd-read-only pool=images' mgr 'profile rbd pool=images' -o /etc/ceph/ceph.client.qemu.keyring
创建块设备映像
要创建块设备映像,请执行以下操作:
rbd create --size {megabytes} {pool-name}/{image-name}
例,要创建一个名为1GB的映像bar,该映像将信息存储在名为的池中images,请执行以下操作:
[ceph@ceph06 ~]$ rbd create --size 1024 images/bar
[ceph@ceph06 ~]$ rbd ls images
bar
如果在创建映像时未指定池,则它将存储在默认池中rbd
[ceph@ceph06 ~]$ rbd create --size 1024 foo
[ceph@ceph06 ~]$ rbd ls
foo
[ceph@ceph06 ~]$ rbd ls rbd
foo
列出块设备映像
要列出rbd池中的块设备:
rbd ls
要列出特定池中的块设备:
rbd ls {poolname}
要列出rbd池中的延迟删除块设备:
rbd trash ls
要列出特定池中的延迟删除块设备:
rbd trash ls {poolname}
检索映像信息
从默认rbd池中检索特定映像信息:
#语法:
rbd info {image-name}
#举例:
[ceph@ceph06 ~]$ rbd info foo
rbd image 'foo':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 2d096da276cd5
block_name_prefix: rbd_data.2d096da276cd5
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Tue May 12 02:53:04 2020
access_timestamp: Tue May 12 02:53:04 2020
modify_timestamp: Tue May 12 02:53:04 2020
从指定rbd池中检索特定映像信息:
#语法:
rbd info {pool-name}/{image-name}
#举例:
[ceph@ceph06 ~]$ rbd info images/bar
调整块设备映像的大小
Ceph块设备映像是精简配置的。在您开始将数据保存到它们之前,它们实际上并不使用任何物理存储。但是,它们确实具有您使用该–size选项设置的最大容量。如果要增加(或减少)Ceph块设备映像的最大大小,请执行以下操作:
#增加容量:
[ceph@ceph06 ~]$ rbd resize --size 2048 foo
Resizing image: 100% complete...done.
[ceph@ceph06 ~]$ rbd info foo
rbd image 'foo':
size 2 GiB in 512 objects
order 22 (4 MiB objects)
#压缩容量:
[ceph@ceph06 ~]$ rbd resize --size 1024 foo --allow-shrink
Resizing image: 100% complete...done.
[ceph@ceph06 ~]$ rbd info foo
rbd image 'foo':
size 1 GiB in 256 objects
删除块设备的镜像
从池中删除块设备,请执行以下操作:
#语法:
rbd rm {pool-name}/{image-name} #如果是默认的rbd池,可以直接省略{pool-name}/
#举例:
[ceph@ceph06 ~]$ rbd rm images/bar
Removing image: 100% complete...done.
trash-垃圾桶功能
如果rbd有snapshot或者clone image,也能够放进trash里面,但不能够真正地删除因为内部关联还是存在的。
将image移到trash
#语法:
rbd trash mv {pool-name}/{image-name} #把镜像移动到trash里
rbd trash rm {pool-name}/{image-id} #从trash里删除镜像
#举例:
[ceph@ceph06 ~]$ rbd trash mv foo #foo镜像在默认的rbd池中,可省略pool池名:rbd/,下同
[ceph@ceph06 ~]$ rbd trash ls
2d096da276cd5 foo
[ceph@ceph06 ~]$ rbd trash rm 2d096da276cd5
Removing image: 100% complete...done.
#可以使用--expires-at设置延迟时间(默认为now),如果延迟时间未到期,则除非使用–force,否则无法将其删除,例:
[ceph@ceph06 ~]$ rbd trash mv foo --expires-at 120
[ceph@ceph06 ~]$ rbd trash ls
2d1aae4854be5 foo
[ceph@ceph06 ~]$ rbd trash rm 2d1aae4854be5
Deferment time has not expired, please use --force if you really want to remove the image
Removing image: 0% complete...failed.
2020-05-12 03:39:48.247 7febc7ee8b00 -1 librbd::api::Trash: remove: error: deferment time has not expired.
[ceph@ceph06 ~]$ rbd trash rm 2d1aae4854be5 --force
Removing image: 100% complete...done.
恢复块设备映像
要恢复rbd池中的延迟删除块设备,请执行以下操作:
#语法:
rbd trash restore {pool-name}/{image-id}
#举例:
[ceph@ceph06 ~]$ rbd trash ls #默认的rbd池,可以直接省略{pool-name}/
2d1fe6de70f1f foo
[ceph@ceph06 ~]$ rbd trash restore 2d1fe6de70f1f
[ceph@ceph06 ~]$ rbd ls
foo
#当然--image在还原镜像时使用重命名镜像
rbd trash restore swimmingpool/2bf4474b0dc51 --image new-name