使用该losetup
命令,您可以将常规文件转换为假装块设备。然后,您可以像任何其他设备一样对其进行分区和格式化。
有没有办法让 Linux 假装这个“设备”有 4K 逻辑扇区大小?
答案1
fdisk
有多个开关:
-b 扇区大小
指定磁盘的扇区大小。有效值为 512、1024、2048 或 4096。(最近的内核知道扇区大小。仅在旧内核上使用此值或覆盖内核的想法。)从 util- linux-2.17 开始,fdisk 区分逻辑扇区大小和物理扇区大小。此选项将两个扇区大小更改为扇区大小。
-C 环
指定磁盘的柱面数。我不知道为什么有人想要这样做。
-H 头
指定磁盘的磁头数。 (当然,不是物理编号,而是用于分区表的编号。)合理的值是 255 和 16。
这不是我编辑的(“我不知道为什么有人想要这样做。”)。有点好人包含了他们当时没有看到用途的功能。
答案2
是的,这是可能的:如果你跑
losetup --help
你会注意到这个选项
-b, --sector-size
direct-IO
我建议也测试在循环块设备上使用该选项
以下是我创建循环设备的方法:
losetup --sector-size 4096 --direct-io=on $loop_device $diskfile
但也许在你的情况下,仅就--sector-size 4096
足够了。
然后,您可以使用以下命令显示循环设备losetup -l
:
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop4000 0 0 0 0 /mnt/fbx/FBX-24T/testspeed2 1 4096
/dev/loop3000 0 0 0 0 /mnt/fbx/FBX-24T/testspeed 1 4096
请注意 4K 块扇区
另请注意,目前,您可以指定从 512 到 4096 的扇区大小,但例如不可能使用 8K 扇区 (8192),losetup
如果您尝试使用大于 4096 的扇区大小,该命令将失败。
这就是我建议使用direct-IO
选项的原因: --direct-io=on
当您在用于创建循环设备的底层文件上有一个 4K 扇区格式的文件系统时(请参阅losetup -P
或losetup --partscan
选项),使用该direct-IO
选项将通过将 IO 直接发送到块设备来绕过内核存储堆栈工作队列。
它有助于保持块设备和您正在写入的文件系统的一致性(对齐)。
在某些情况下,它还提供 8 到 10 倍更好的性能,例如,当从 CIFS 共享上托管的 LUKS 文件创建循环设备时
(LUKS = Linux 统一密钥设置,又名Cryptsetup
在块设备与其托管之间添加加密层)文件系统)
答案3
水平不低。当然可以告诉一些 mkfs 调度实用程序,它们在格式化时应该使用特定的块大小。mkfs.*
有关详细信息,请参阅特定工具的手册页。