为什么 mkfs.ext4 无法在 650 MB 映像文件上创建 2048 块大小的文件系统?

为什么 mkfs.ext4 无法在 650 MB 映像文件上创建 2048 块大小的文件系统?

我调用的命令如下

  1. 创建图像文件
dd if=/dev/zero of=benj.luks bs=1k count=666000
  1. 设置 LUKS 容器
cryptsetup luksFormat benj.luks
  1. 设置循环设备并打开 LUKS 容器
cryptsetup luksOpen benj.luks benjImage
  1. 检查循环设备是否已设置并映射
lsblk

输出

NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0         7:0    0 650.4M  0 loop  
└─benjImage 254:1    0 634.4M  0 crypt 
  1. 在 benjImage 上创建文件系统 ext4
sudo mkfs.ext4 -b 2048 -F -F /dev/mapper/benjImage

命令失败

mke2fs 1.46.5 (30-Dec-2021)
mkfs.ext4: Invalid argument while setting blocksize; too small for device

答案1

cat /sys/block/loop0/queue/physical_block_size
cat /sys/block/loop0/queue/logical_block_size

据透露,循环设备被安装为 4096 字节的块设备,无法在其上创建 2048 字节的文件系统。

因此,解决方案是手动设置循环设备并使用 -b 选项将扇区大小定义为 2048,如下所示

sudo losetup -b 2048 -f benj.luks

在步骤 2 之前,然后在 /dev/loop0(或分配的任何循环设备)而不是图像文件上应用连续命令,即

cryptsetup luksFormat /dev/loop0
cryptsetup luksOpen /dev/loop0 benjImage
sudo mkfs.ext4 -b 2048 /dev/mapper/benjImage

相关内容