如何在循环设备上为 Ceph 创建 osd

How to create osd for Ceph on loop device

我正在 Vagrant 环境中使用 Ceph 并尝试创建一些最小集群。 我有两个节点:'master' & 'slave' 作为管理员、班长、经理掌握。 OSD 的奴隶。

我正在遵循官方的 ceph 部署指南并面临 OSD 创建问题。 在从属节点上,我创建了一些 10Gb 循环设备并将其安装到 /media/vdevice 然后在主节点上我尝试创建 OSD:

ceph-deploy osd create slave1:loop0

它失败了:

...
[slave1][WARNIN]   File "/usr/lib/python2.7/dist-packages/ceph_disk/main.py", line 956, in verify_not_in_use
[slave1][WARNIN]     raise Error('Device is mounted', dev)
[slave1][WARNIN] ceph_disk.main.Error: Error: Device is mounted: /dev/loop0
[slave1][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.osd][ERROR ] Failed to execute command: /usr/sbin/ceph-disk -v prepare --cluster ceph --fs-type xfs -- /dev/loop0
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs

在卸载 loop0 的情况下失败:

[slave1][WARNIN] ceph_disk.main.Error: Error: /dev/loop0 device size (0M) is not big enough for data
[slave1][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.osd][ERROR ] Failed to execute command: /usr/sbin/ceph-disk -v prepare --cluster ceph --fs-type xfs -- /dev/loop0
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs

这是有道理的,因为实际存储没有绑定到系统。 那么如何为OSD准备存储呢?

Ceph 需要 OSD 上的块设备。要将磁盘映像文件转换为环回块设备,您可以使用 losetup 实用程序。

sudo losetup /dev/loop0 /your/10GB/file.img

此命令将磁盘映像文件附加到 /dev/loop0 设备节点,创建可与 Ceph 一起使用的环回块设备。

如果需要从设备节点分离镜像文件可以执行

sudo losetup -d /dev/loop0

请注意,默认情况下 Ceph 为每个设备预留 100 MB,因此您必须确保您的图像文件大小大于该大小。您可以使用

创建合适的图像文件
dd if=/dev/zero of=/cephfs/vdisk.img count=1 bs=10G