23.4. 堆栈 I/O 参数
Linux I/O 堆栈的所有层都经过了设计,可以在堆栈之上传播各种 I/O 参数。当层消耗属性或聚合多个设备时,该层必须公开适当的 I/O 参数,以便上层设备或工具在转换后能够准确地查看存储。一些实际的示例如下:
- 对于非零 alignment_offset,仅应调整 I/O 堆栈中的一个层;当层相应地调整后,它将导出具有 alignment_offset 为 0 的设备。
- 使用 LVM 创建的条状设备映射器(DM)设备必须导出相对于条带数(磁盘数)和用户提供的块大小的 minimum_io_size 和 optimal_io_size。
在 Red Hat Enterprise Linux 7 中,设备映射器和软件 Raid (MD)设备驱动程序可用于任意组合具有不同 I/O 参数的设备。内核的块层将尝试合理组合各个设备的 I/O 参数。内核不会阻止组合异构设备;但是,请注意这样做所带来的风险。
例如,512 字节设备和 4K 设备可以合并为一个逻辑 DM 设备,其将有 4K 的 logical_block_size。在这种混合设备上分层的文件系统假定 4K 会以原子方式写入,但实际上,在发布到 512 字节设备时,该文件将跨越 8 个逻辑块地址。将 4K logical_block_size 用于更高级别的 DM 设备会增加系统崩溃时部分写入 512 字节设备的可能性。
如果组合多个设备的 I/O 参数会导致冲突,则块层可以发出一个警告,指出设备易受部分写入和/或未对齐的影响。