如何创建作为合法块设备传递的原始(无文件系统)环回设备?

如何创建作为合法块设备传递的原始(无文件系统)环回设备?

问题

如何创建和安装一个假块设备(使用大文件/磁盘映像)作为合法的未格式化磁盘?

背景故事

我正在尝试设置头孢(分布式存储系统)在我的爱好 kubernetes 集群中。Ceph 需要未格式化的块设备它将根据需要进行分区并用于存储。

我没有可用的空闲磁盘,所以我想: 为什么我不创建一个环回设备并使用它呢?

由于我的主机操作系统磁盘有足够的可用空间,我应该能够在其中创建一个大文件并将其安装为环回设备。

这有两个问题(据我理解):

  1. 环回设备必须使用某种文件系统进行格式化才能安装,这不能与 Ceph 一起使用,因为 Ceph需要未格式化的块设备
  2. 环回设备似乎不算作块设备。Ceph 文档用于lsblk -f测试设备是否适合 Ceph。该设备必须显示在输出中没有格式化任何文件系统。

答案1

losetup将为您做这件事。如果您有未使用的循环设备 /dev/loop0:

# Make the file
head -c 10240 /dev/zero > /tmp/zeroes
# Use it as a block device
sudo losetup /dev/loop0 /tmp/zeroes
# Remove the device
sudo losetup -d /dev/loop0

答案2

环回设备必须使用某种文件系统进行格式化才能安装

如果要安装每个块设备,则必须对其进行格式化。实际上,您正在挂载文件系统而不是块设备本身,因此这实际上没有意义。您只需要一个文件,然后用于losetup -f disk.img创建循环设备,仅此而已。循环设备是块设备并且在输出中可见,lsblk因此 Ceph 应该能够使用它。

$ dd if=/dev/zero of=disk.img bs=1M count=100
$ sudo losetup -f disk.img
$ lsblk -f
NAME                   FSTYPE  FSVER  LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINT
loop0                                                                                             
...

如果无法使用循环设备,可以使用目标命令行创建一个更有说服力的文件支持块设备,它看起来像普通的 SCSI 驱动器。

# targetcli /backstores/fileio/ create test disk.img
# targetcli /loopback create
Created target naa.50014050efbb30e0.
# targetcli /loopback/naa.50014050efbb30e0/luns create /backstores/fileio/test

它创建一个新的(假)磁盘,由我为上面的循环设备创建的相同文件支持:

# lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                                           7:0    0   100M  0 loop  
...
sdb                                             8:16   0   100M  0 disk 
...

相关内容