使用该losetup
命令,您可以将常规文件转换为假装块设备。然后,您可以像任何其他设备一样对其进行分区和格式化。
有没有办法让 Linux 假装这个“设备”有一个 4K 的逻辑扇区大小?
fdisk
有多个开关:
-b 扇区大小
指定磁盘的扇区大小。有效值为 512、1024、2048 或 4096。(最近的内核知道扇区大小。仅在旧内核上使用此值或覆盖内核的想法。)从 util-linux-2.17 开始,fdisk 区分逻辑扇区大小和物理扇区大小。此选项将两个扇区大小更改为扇区大小。
-C 环
指定磁盘的柱面数。我不知道为什么有人想要这样做。
-H 头
指定磁盘的磁头数。(当然,不是物理编号,而是用于分区表的编号。)合理的值是 255 和 16。
这不是我的社论(“我不知道为什么有人会想要这样做。”)。有点好人包含了他们当时没有看到用途的功能。
是的,这是可能的:如果你跑
losetup --help
Run Code Online (Sandbox Code Playgroud)
你会注意到这个选项
-b, --sector-size
Run Code Online (Sandbox Code Playgroud)
direct-IO
我建议也测试在循环块设备上使用该选项
以下是我创建循环设备的方法:
-b, --sector-size
Run Code Online (Sandbox Code Playgroud)
但也许在你的情况下,仅就--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
Run Code Online (Sandbox Code Playgroud)
请注意 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
在块设备与其托管之间添加加密层)文件系统)