gpt4 book ai didi

linux - 更改 I/O 调度程序不使用 sd* 来引用磁盘

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:03 25 4
gpt4 key购买 nike

我想将 I/O 调度程序更改为我系统上某个特定磁盘的截止日期。然而,我发现的所有资源都使用了我无法使用的方法,因为它们要么使用 sd*(sda、sdb 等)引用磁盘,要么使用 Grub 而不是 Grub2。

我不能使用像 sd* 这样的标签来指代磁盘的原因很明显:它可以而且将会随着磁盘而改变。我查看了 UUID (/dev/disk/by-uuid) 以查看它们是否可以提供解决方案,但可惜。在 Internet 上找到的许多资源都在谈论使用 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 调度程序?

最佳答案

我想没有比 osgx 建议的创建脚本更简单/更干净的解决方案了。

在 dmesg 中,我没有找到任何类似磁盘序列号的东西,所以我想出了一个不同的解决方案,其他人也可能更容易应用。

/etc/init.d/ 中创建一个名为setscheduler.sh 的文件并添加以下内容:

#!/bin/bash

# List of UUIDs (one per line)
# For each drive: Add the UUID of a single partition located on the drive of which you want to change the I/O-scheduler
UUID_LIST=(
2669b09e-75cd-4f45-bedb-8cb405444287
)

DISK_PATH="/dev/disk/by-uuid"
BLOCK_PATH="/sys/block"

for UUID in ${UUID_LIST[@]} ; do
if [[ -L "${DISK_PATH}/${UUID}" ]] ; then
TARGET=$( readlink "${DISK_PATH}/${UUID}" )
DISK=`expr "${TARGET}" : '.*\(sd[a-z]\)'`

if [[ -d "${BLOCK_PATH}/${DISK}" ]] ; then
echo deadline > "${BLOCK_PATH}/${DISK}/queue/scheduler"
echo 1 > "${BLOCK_PATH}/${DISK}/queue/iosched/fifo_batch"
fi
fi
done

使文件可执行:

sudo chmod +x /etc/init.d/setscheduler.sh

将其注册为 init.d 脚本:

sudo update-rc.d setscheduler.sh defaults

关于linux - 更改 I/O 调度程序不使用 sd* 来引用磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7294719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com