我想永久更改 Fedora 20 上特定磁盘的 I/O 调度程序。根据我的发现,这可以通过以 root 身份执行以下 shell 行来实现:
echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler
但是,重启后更改会丢失。似乎实现我想要的一种方法就是创建一个 systemd 服务,但我完全不知所措,因为它必须在安装磁盘后执行。有人能帮我编写这样的 systemd 服务吗?也欢迎任何其他可行的解决方案。
答案1
tuned
和软件包tuned-utils
适用于 Fedora(Red Hat 也有)。这是可以应用的系统服务预定义或用户定义的系统配置文件以及可动态调整的参数,包括挂载选项、磁盘调度程序、sysctl 参数等等。许多 Liinux 管理员都忽略了这些设置。
请参阅 Fedora 20 手册:
http://docs.fedoraproject.org/en-US/Fedora/20/html/Power_Management_Guide/sect-tuned-installation-and-usage.html
就像是:
tuned-adm profile virtual-guest
或者
tuned-adm profile enterprise-storage
这是 RHEL 的设置时间表。Fedora 可能略有不同。
我知道您正在寻找特定磁盘上的设置,但我倾向于将 I/O 调度参数应用于所有磁盘。无论哪种方式,看看预定义的配置文件是否适合您(无需重复努力)。如果不行,配置文件很容易定制。
答案2
您只需创建一个文件/etc/systemd/system/io-scheduler.service内容如下:
[Unit]
Description=I/O Scheduler Setter
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo noop > /sys/block/sda/queue/scheduler'
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
然后,启用该服务以在启动时自动启动,并使用以下命令为当前会话启动它:
chmod 755 /etc/systemd/system/io-scheduler.service
systemctl enable io-scheduler.service
systemctl start io-scheduler.service
答案3
您可以通过将以下内容添加到内核命令行来更改所有磁盘的默认调度程序,该命令行可以在以下位置找到/boot/grub/menu.lst
:
elevator={SCHEDULER-NAME}
答案4
@ewwhite,你回答了 op 没有问到的一个问题。
您所建议的资源并未提供“永久更改特定磁盘的 I/O 调度程序”的答案,并且“Fedora 和 Red Hat 记录和预期的方式”的评论是不正确的,原因有几个,在此我就不多说了。
要更改特定磁盘的 io 调度程序,op 选择了正确的方法:
echo noop> / sys / block / sda /queue / scheduler
他选择如何运行这个命令有点随意;这可以通过配置管理应用程序、脚本或创建服务单元来完成,就像他所做的那样。
@boscoe - 这在 grub2 系统上会是个问题。这个问题针对的是 F20。此外,它会将电梯应用于所有磁盘,而这并不是操作人员想要的。