注意
本文档适用于 Ceph 的开发版本。
rbdmap -- 在启动时映射 RBD 设备
概要
描述
rbdmap 是一个 shell 脚本,它自动化了在一个或多个 RBD(RADOS 块设备)镜像上的 rbd map 和 rbd unmap 操作。虽然系统管理员可以随时手动运行该脚本,但主要用例是在启动时自动映射/挂载 RBD 镜像(以及在关机时卸载/取消映射),由初始化系统触发(ceph-common 软件包中包含一个 systemd 单元文件 rbdmap.service 用于此目的)。
该脚本接受一个参数,可以是“map”或“unmap”。在这两种情况下,脚本都会解析一个配置文件(默认为 /etc/ceph/rbdmap,但可以通过环境变量 RBDMAPFILE 覆盖)。配置文件的每一行对应于要映射或取消映射的 RBD 镜像。
配置文件格式为
IMAGESPEC RBDOPTS
其中 IMAGESPEC 应指定为 POOLNAME/IMAGENAME(池名称、斜杠和镜像名称),或仅为 IMAGENAME,在这种情况下,POOLNAME 默认为“rbd”。RBDOPTS 是一个可选的参数列表,将传递给底层的 rbd map 命令。这些参数及其值应指定为逗号分隔的字符串
PARAM1=VAL1,PARAM2=VAL2,...,PARAMN=VALN
这将导致脚本发出如下的 rbd map 命令
rbd map POOLNAME/IMAGENAME --PARAM1 VAL1 --PARAM2 VAL2
(有关所有可能选项的完整列表,请参阅 rbd 手册页。)对于包含逗号或等号的参数和值,可以使用简单的撇号来防止替换它们。
当作为 rbdmap map 运行时,脚本会解析配置文件,并对每个指定的 RBD 镜像尝试首先映射镜像(使用 rbd map 命令),然后挂载镜像。
当作为 rbdmap unmap 运行时,配置文件中列出的镜像将被卸载和取消映射。
rbdmap unmap-all 尝试卸载并随后取消映射所有当前已映射的 RBD 镜像,无论它们是否在配置文件中列出。
如果成功,rbd map 操作会将镜像映射到 /dev/rbdX 设备,此时会触发 udev 规则以创建友好的设备名符号链接 /dev/rbd/POOLNAME/IMAGENAME,指向实际映射的设备。
为了成功挂载/卸载,友好的设备名必须在 /etc/fstab 中有相应的条目。
为 RBD 镜像编写 /etc/fstab 条目时,最好指定“noauto”(或“nofail”)挂载选项。这可以防止初始化系统过早地尝试挂载设备——在该设备甚至不存在之前。(由于 rbdmap.service 执行 shell 脚本,它通常在启动序列中相当晚才触发。)
示例
三个名为“bar1”、“bar2”和“bar3”的 RBD 镜像的 /etc/ceph/rbdmap 示例,它们位于池“foopool”中
foopool/bar1 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
foopool/bar2 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
foopool/bar3 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring,options='lock_on_read,queue_depth=1024'
文件中的每一行包含两个字符串:镜像规范和要传递给 rbd map 的选项。这两行将转换为以下命令
rbd map foopool/bar1 --id admin --keyring /etc/ceph/ceph.client.admin.keyring
rbd map foopool/bar2 --id admin --keyring /etc/ceph/ceph.client.admin.keyring
rbd map foopool/bar2 --id admin --keyring /etc/ceph/ceph.client.admin.keyring --options lock_on_read,queue_depth=1024
如果镜像上是 XFS 文件系统,则相应的 /etc/fstab 条目可能如下所示
/dev/rbd/foopool/bar1 /mnt/bar1 xfs noauto 0 0
/dev/rbd/foopool/bar2 /mnt/bar2 xfs noauto 0 0
/dev/rbd/foopool/bar3 /mnt/bar3 xfs noauto 0 0
创建镜像并填充 /etc/ceph/rbdmap 文件后,要使镜像在启动时自动映射和挂载,只需启用该单元即可
systemctl enable rbdmap.service
选项
None
可用性
rbdmap 是 Ceph 的一部分,Ceph 是一个大规模可扩展的开源分布式存储系统。请参阅 Ceph 文档 https://docs.ceph.net.cn 获取更多信息。
另请参阅
rbd(8),