这是来自的后续问题:How do I mount an rbd device from fstab我问过一段时间。
如何使用 fuse 驱动程序挂载 rbd 设备?(如果不打开很多权限,我就无法使用 docker 的内核驱动程序)
据我所知,我在 fstab 文件中创建了一个条目,如下所示:
id=client.admin /mnt fuse.ceph 0 0
但是我看不到如何指定 rbd 块设备。如果我运行这个挂载,我会在 /mnt/mariadb1 中看到一个文件(mariadb1 是我使用 rbd create --size 250000 mariadb1 创建的 rbd 设备的名称)
我如何实际将其挂载为文件系统?
注意:是的,我真的很想使用内核 rbd 驱动程序并从主机挂载它,然后将它公开给我的 docker 容器,但是……我正在使用 CoreOS。
如果可以在主机挂载命名空间中挂载文件系统,我会接受,但还没有看到前进的方向。我管理的最好的方法是从具有很多特权的容器中安装它。但我不能与 --volumes-from 共享该容器。我真的不喜欢让这个特定的容器完全访问主机。
我不得不假设您在谈论这个时指的是 RBD-fuse,因为 ceph-fuse 是一个 cephfs 实用程序,与 RBD 无关。
但是,您的问题的前提被进一步打破,因为您对实际操作的理解
rbd-fuse
是不完整的。librbd
为您提供存储在 Ceph 中的图像文件。大多数人(通过rbd map
)使用该映像以 /dev/rbd* 的形式提供伪块设备。唯一的区别
rbd-fuse
是它公开了自己的伪文件系统,并将图像作为普通的 POSIX 兼容文件提供,而不是块设备。因此
rbd-fuse
,对图像文件的实际内容没有更多的了解rbd map
。当调用
rbd-fuse mountpoint
池内的任何 RBD 图像时,将在mountpoint
. 它需要命令选项,特别是-p
如果您在 ceph 中使用不同的池rbd
而-c
不是/etc/ceph/ceph
. 您还可以使用-r
.您如何处理这些文件取决于您自己。他们可以将文件系统写入它们(注意 Linux 会抱怨,因为它们不是专业的块设备)。如果存在文件系统,您可以将它们挂载为循环设备。
应该呈现如下内容:
不过,这是否是正确的方法(供您使用)是另一回事。
krbd
但是,它可以让您访问您的系统版本不支持的 RBD 映像。ceph.fuse 文件系统类型(及其手动等效的 ceph-fuse)用于挂载 cephfs 卷。这些与 RADOS 块设备 (RBD) 根本不同。
一方面,RBD 表示主机系统可以在其上运行文件系统的块设备,就像物理块设备一样。Ceph 对 RBD 内的文件系统结构一无所知。另一方面,cephfs 本身就是一个文件系统,即 ceph 管理单个文件和元数据。后果之一是您通常只能挂载一次 RBD,因为访问同一个块设备的两台主机没有任何规定来同步对它的访问,而您可以像网络文件系统一样多次挂载 cephfs。