我建议您使用udev来设置SSD磁盘的参数。这样,您可以配置更适合SSD等的特定队列调度程序。您还可以基于许多参数,仅将参数应用于某些设备。
您可以通过执行以下操作来获取匹配设备所需的特定属性(例如,磁盘型号和制造商):
udevadm info -a -p /sys/block/sda
并检查您的块设备的所有ATTR对。
另一个好处是能够设置可插拔磁盘的参数(例如,在机箱或热插拔托架中),并且只要设备参数匹配,该设置将应用于所有新设备。
这是一个示例,将特定的调度程序应用于Intel SSD,所需的预读值(4096块= 2048 kb),还将一个调度程序应用于所有其他SSD:
cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"
保存文件后,您可以测试您的规则是否与设备匹配以及udev使用udevadm会做什么:
udevadm test --action=add /sys/block/sda
这会打印出udev加载的所有规则,匹配项,不匹配项以及插入设备后udev会做出哪些决定。
希望这可以帮助。