【发布时间】:2011-09-03 17:34:16
【问题描述】:
我想将 I/O 调度程序更改为系统上某个特定磁盘的截止日期。然而,我发现的所有资源都使用了我无法使用的方法,因为它们要么使用 sd*(sda、sdb 等)引用磁盘,要么使用 Grub 而不是 Grub2。
我不能使用像 sd* 这样的标签来指代磁盘的原因很明显:它可以并且将会针对磁盘进行更改。 我查看了 UUID(/dev/disk/by-uuid),看看它们是否可以提供解决方案,但是唉。互联网上的很多资源都在谈论使用 UUID 引用驱动器或磁盘,而您只能通过这种方式真正引用磁盘上的分区。 在我看来,使用 UUID 引用分区是安全引用分区的一个受欢迎的改变,但是对于整个磁盘来说缺乏类似的东西真的很可惜。
以下任何一项都不是选项:
在/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline quiet splash"
会导致所有磁盘使用相同的调度程序。
在/etc/rc.local
echo deadline > /sys/block/sda/queue/scheduler
echo 1 > /sys/block/sda/queue/iosched/fifo_batch
正在使用 sd* 标签。
在 /etc/sysfs.conf 中
block/sda/queue/scheduler = deadline
再次使用 sd* 标签。
如何使用一种安全的方式来更改 I/O 调度程序来引用磁盘?
【问题讨论】:
-
写一个init.d脚本,解析dmesg。每个 sd* 磁盘都有 SerialID,因此您可以找到当前启动的磁盘 sd# 编号。此外,您可以遍历所有 sd* 并直接请求串行(例如 smartctl 可以这样做)。
标签: linux ubuntu uuid scheduler