Wie kann ich mithilfe von Udev-Regeln eine Deadline als E/A-Scheduler für USB-Flash-Geräte festlegen?

Wie kann ich mithilfe von Udev-Regeln eine Deadline als E/A-Scheduler für USB-Flash-Geräte festlegen?

Mögliches Duplikat:
Die Udev-Regel funktioniert nicht

Ich habe CFQ als Standard-E/A-Scheduler festgelegt. Wenn ich Daten auf ein Flash-Gerät schreibe, ist die Leistung häufig schlecht. Dies wird behoben, wenn ich Deadline als E/A-Scheduler für USB-Flash-Geräte verwende. Ich kann den Scheduler nicht immer manuell ändern, oder? Ich denke, das Schreiben von Udev-Regeln ist eine gute Idee.

Kann mir bitte jemand Regeln schreiben? Ich möchte:

  1. Wenn ich ein USB-Gerät anschließe, wird der Gerätetyp erkannt.
  2. Wenn es sich um eine tragbare USB-Festplatte handelt, tun Sie nichts (ich denke, wenn ein Gerät mehr als eine Partition hat, ist es immer eine tragbare Festplatte).
  3. Wenn es sich um ein USB-Flash-Gerät handelt, legen Sie die Frist als Planer fest.

Antwort1

Fügen Sie zunächst das Shell-Skript scheduler4usbein $PATH(z. B.: /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

Vergessen Sie nicht, chmod +x scheduler4usbIhr Skript zu aktualisieren!

Schreiben Sie die Regel dann in /etc/udev/rules.d/91-change-schduler.rules:

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

verwandte Informationen