首页 > 解决方案 > 有没有办法让内核将块设备视为具有大于 4k 块大小的块设备?

问题描述

回到这个问题,现在已经 4 岁了......

绕过块层/设备上的 4KB 块大小限制

我是内核新手,所以我不太了解,这就是我在这里问的原因。我知道 512 字节扇区是 linux 世界的中心。而且我通过尝试知道,如果我创建一个传递大于 4096 的 blk_queue_logical_block_size() 的块设备,我会在内核中得到 BUG 空指针异常,这可能是 Theo Ts'o 在上述问题中解释的原因。

他提到必须执行内核已经执行的读取-更新-写入序列。也许这已经改变了。如果我创建了一个具有 4k 块的块设备,并且我在第一个块中添加了 1 个字节,那么内核执行读取,更新一个字节并为那个块发出一个写入。

实际上它发出 4 4k 读取我认为这是一个主动预取。我想知道的是内核中是否有一个设置仍然允许内核内部使用 4k 块,这样它就不会导致 4k 页面大小出现问题,但是让内核向我的块提供大于 4k 的块设备。

所有读取-更新-写入的东西都在某个地方,并且由于上述问题已有 4 年历史,我想也许已经发生了一些变化,这可能会使现在的答案有所不同..

还有很多其他功能(blk_queue_physical_block_size、blk_queue_max_segment_size 等)我不能 100% 确定它们是如何工作的。

我搜索过的所有块设备文章都没有考虑到这个问题。

有谁知道是否有可能在 linux 内核(当前版本很好)中让它将块设备视为具有大于 4k 的块?

感谢您一路上的任何指示或提示,我对此还是有点新手。

这是我正在编写的虚拟块设备驱动程序,它不映射到物理磁盘,因此块大小不必匹配任何现有的硬件要求。

标签: linuxlinux-kernelblockkernel-module

解决方案


推荐阅读