问题
如何创建和安装一个假块设备(使用大文件/磁盘映像)作为合法的未格式化磁盘?
背景故事
我正在尝试设置车和头孢(分布式存储系统)在我的爱好 kubernetes 集群中。Ceph 需要未格式化的块设备它将根据需要进行分区并用于存储。
我没有可用的空闲磁盘,所以我想: 为什么我不创建一个环回设备并使用它呢?
由于我的主机操作系统磁盘有足够的可用空间,我应该能够在其中创建一个大文件并将其安装为环回设备。
这有两个问题(据我理解):
- 环回设备必须使用某种文件系统进行格式化才能安装,这不能与 Ceph 一起使用,因为 Ceph需要未格式化的块设备
- 环回设备似乎不算作块设备。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
...