如何使用 udev 規則將截止時間設定為 USB 快閃記憶體裝置的 I/O 調度程式?

如何使用 udev 規則將截止時間設定為 USB 快閃記憶體裝置的 I/O 調度程式?

可能的重複:
Udev 規則不起作用

我已將 CFQ 設定為預設 I/O 調度程序。當我將資料寫入閃存裝置時,我經常遇到效能不佳的情況。如果我使用截止時間作為 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"

相關內容