如何使用 fuse 驱动程序挂载 rbd 设备?

如何使用 fuse 驱动程序挂载 rbd 设备?

这是来自以下人士的后续问题:如何从 fstab 挂载 rbd 设备这是我之前问过的。

如何使用 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 共享该容器。我不太想让这个特定的容器拥有对主机的完全访问权限。

答案1

我必须假设你在谈论这个问题时指的是 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 会抱怨,因为它们不是专用块设备)。如果存在文件系统,您可以将它们安装为循环设备。

$ rbd 创建测试
# mkdir -p /rbd_images
# rbd-fuse /rbd_images
# mkfs /rbd_images/test
# mkdir -p /mnt/rbd_test
# 挂载 /rbd_images/test /mnt/rbd_test

应呈现如下内容:

$ mount
/rbd_images 上的 rbd-fuse 类型 fuse.rbd-fuse (rw,nosuid,nodev)
/mnt/rbd_test 上的 /rbd_images/rbd_test 类型 ext4 (rw)

这是否是正确的实现此目的的方法(供您使用)是另一回事。但是,它可以允许您访问您的系统krbd版本不支持的 RBD 映像。

答案2

ceph.fuse 文件系统类型(及其手动等效 ceph-fuse)用于挂载 cephfs 卷。它们与 RADOS 块设备 (RBD) 有根本区别。

一方面,RBD 代表一个块设备,主机系统可以在其上运行文件系统,就像物理块设备一样。Ceph 对 RBD 内部文件系统的结构一无所知。另一方面,cephfs 本身就是一个文件系统,即 ceph 管理单个文件和元数据。其中一个后果是,您通常只能挂载一次 RBD,因为访问同一块设备的两个主机没有任何同步访问的规定,而您可以像网络文件系统一样多次挂载 cephfs。

相关内容