udev ルールを使用して USB フラッシュ デバイスの I/O スケジューラとして期限を設定するにはどうすればよいでしょうか?

udev ルールを使用して USB フラッシュ デバイスの I/O スケジューラとして期限を設定するにはどうすればよいでしょうか?

重複の可能性あり:
Udevルールが機能していません

デフォルトの I/O スケジューラとして CFQ を設定しました。フラッシュ デバイスにデータを書き込むときにパフォーマンスが悪くなることがよくあります。この問題は、USB フラッシュ デバイスの I/O スケジューラとして Deadline を使用すると解決します。スケジューラを常に手動で変更できるわけではありませんよね? udev ルールを記述するのは良い考えだと思います。

誰か私のためにルールを書いてくれませんか?私が欲しいのは:

  1. USB デバイスを接続すると、デバイスの種類を検出します。
  2. ポータブル USB ハードディスクの場合は何もしないでください (デバイスに複数のパーティションがある場合は、常にポータブル ハードディスクであると考えられます)。
  3. USB フラッシュ デバイスの場合は、スケジューラとして期限を設定します。

答え1

まず、シェル スクリプトを(例: )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"

関連情報