linux - 有没有办法让内核将块设备视为具有大于 4k 块大小的块设备?
问题描述
回到这个问题,现在已经 4 岁了......
我是内核新手,所以我不太了解,这就是我在这里问的原因。我知道 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 的块?
感谢您一路上的任何指示或提示,我对此还是有点新手。
这是我正在编写的虚拟块设备驱动程序,它不映射到物理磁盘,因此块大小不必匹配任何现有的硬件要求。
解决方案
推荐阅读
- c# - 在属性中使用类作为参数c#
- python - 使用 peewee 的唯一共同约束
- android-studio - 无法从方法“build”返回“BlocProvider”
- sql - 我的查询不返回第二个表的空值
- laravel - 带有标题集的流明/laravel中的CORS问题
- flutter - 如何管理多个小部件的 setState。更改一个小部件的设置状态会更改所有
- powerbi - 添加没有唯一值的索引 - Power BI / DAX / M
- python - 在 python spark (pyspark) 中将用户产品视图转换为网络矩阵/图形
- python - 将列值分配给python中的每个键
- azure - 在 Azure DevOps 管道中,在执行 az login 时在 powershell 任务中使用变量会导致 ArgumentParseError