如何使用 udev 规则将 deadline 设置为 USB 闪存设备的 I/O 调度程序?

如何使用 udev 规则将 deadline 设置为 USB 闪存设备的 I/O 调度程序?

可能重复:
Udev 规则不起作用

我已将 CFQ 设置为默认 I/O 调度程序。当我将数据写入闪存设备时,我经常会遇到性能不佳的情况。如果我使用 deadline 作为 USB 闪存设备的 I/O 调度程序,这个问题就会得到解决。我不能总是手动更改调度程序,对吧?我认为编写 udev 规则是个好主意。

有人能帮我写规则吗?我想要:

  1. 当我插入 USB 设备时,检测该设备的类型。
  2. 如果它是便携式 USB 硬盘,则不执行任何操作(我认为如果设备有多个分区,它始终是便携式硬盘。
  3. 如果它是 USB 闪存设备,则将截止期限设置为它的调度程序。

答案1

首先,将 shell 脚本scheduler4usb放入$PATH(例如/usr/bin:):

#!/bin/bash
# Usage: ./script device scheduler

# If your are using util-linux 2.22, you must change this line to:
# fdisk /dev/$1 -l 2>&1 >/dev/null | grep -q "doesn't contain a valid partition table"
#
fdisk /dev/$1 -l 2>&1 >/dev/null | grep -q "This doesn't look like a partition table"

# If this device has a partition table.
if (($?==0)); then 
    echo $2 > /sys/block/$1/queue/scheduler
fi

exit

不要忘记chmod +x scheduler4usb你的脚本!

然后,将规则写入/etc/udev/rules.d/91-change-schduler.rules

SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="sd?", RUN+="/usr/local/bin/scheduler4usb %k deadline"

相关内容