要确认当前 Linux 系统某块磁盘实际启用的 I/O 调度策略,需读取 /sys/block/sda/queue/scheduler,方括号内为生效项;可用 lsblk -d -o NAME,ROTA,MODEL 识别设备名;dmesg | grep -i "scheduler" 或直接查看该文件可获支持列表;批量检查用循环命令遍历匹配设备。

要确认当前 Linux 系统为某块磁盘实际启用的 I/O 调度策略,不能只看内核编译支持了哪些,必须读取运行时生效的设备级配置。
查单块磁盘当前生效的调度器
执行命令:cat /sys/block/sda/queue/scheduler
输出形如:noop [mq-deadline] kyber none,其中方括号 【[ ]】 包裹的即为当前生效项。注意:sda 需替换为你实际要查的设备名(如 nvme0n1、vda、mmcblk0 等)。
若不确定设备名,先运行 lsblk -d -o NAME,ROTA,MODEL,根据 ROTA(0=SSD/NVMe,1=HDD)和 MODEL 快速识别目标磁盘。
查系统支持的所有调度器
方法一:用 dmesg 搜索注册信息dmesg | grep -i "scheduler"
看到类似 io scheduler mq-deadline registered、io scheduler kyber registered 的行,即表示该调度器已被内核加载。
方法二:直接读取通用列表(部分新内核支持)cat /sys/block/sda/queue/scheduler 本身也列出所有可用选项,只是当前生效项被高亮。
批量检查所有块设备的调度策略
第一步:获取所有可调度设备列表ls /sys/block/ | grep -E '^(sd|nvme|vd|mmc)'
第二步:对每个设备循环读取并高亮当前项for dev in $(ls /sys/block/ | grep -E '^(sd|nvme|vd|mmc)'); do echo -n "$dev: "; cat /sys/block/$dev/queue/scheduler 2>/dev/null | tr '\n' ' '; echo; done
这一步会一次性打印出所有磁盘的调度器状态,避免逐个敲命令。注意:某些虚拟设备(如 loop、zram)无 queue/scheduler 接口,重定向 2>/dev/null 可跳过报错。











