Como posso definir o prazo como agendador de E/S para dispositivos Flash USB usando regras do udev?

Como posso definir o prazo como agendador de E/S para dispositivos Flash USB usando regras do udev?

Possível duplicata:
A regra Udev não está funcionando

Eu configurei CFQ como o agendador de E/S padrão. Muitas vezes obtenho um desempenho ruim quando gravo dados em um dispositivo Flash. Isso será resolvido se eu usar o prazo como agendador de E/S para dispositivos USB Flash. Nem sempre consigo alterar o agendador manualmente, certo? Acho que escrever regras do udev é uma boa ideia.

Alguém pode escrever regras para mim? Eu quero:

  1. Quando conecto um dispositivo USB, detecto o tipo do dispositivo.
  2. Se for um disco rígido USB portátil, não faça nada (acho que se um dispositivo tiver mais de uma partição, é sempre um disco rígido portátil.
  3. Se for um dispositivo USB Flash, defina o prazo conforme o agendador.

Responder1

Primeiro, coloque o script de shell scheduler4usbem $PATH(por exemplo /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

Não se esqueça de chmod +x scheduler4usbseguir seu roteiro!

Em seguida, escreva a regra em /etc/udev/rules.d/91-change-schduler.rules:

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

informação relacionada