我(可能很明显)是一个相对较新的 Linux 用户,所以我已经准备好迎接“你为什么不这样做……”评论。我很想听听他们的意见……但我也很想从根本上了解为什么这不能正常工作。
细节:
rc.local 文件是这样实现的:
#!/bin/bash
touch /var/lock/subsys/local
/sbin/blockdev --setra 128 /dev/sda
/sbin/blockdev --setra 128 /dev/dm-1
/sbin/blockdev --setra 128 /dev/dm-0
Run Code Online (Sandbox Code Playgroud)rc.local。你使用的是 CentOS 7。你已经有了 systemd。 /etc/rc.local是 systemd 中的双重向后兼容机制,因为它是一种向后兼容机制,它本身就是System 5 中的兼容机制rc。正如下面超链接的 AskUbuntu 问题中的混乱所示,使用/etc/rc.local可能会出错。所以制作一个合适的 systemd 服务单元。
首先,创建一个模板服务单元。为了举例,我们称之为/etc/systemd/system/custom-readahead@.service:
[单元] 文档=https://unix.stackexchange.com/questions/247436/ 说明=在存储设备 %I 上设置自定义预读 BindsTo=dev-%i.device [服务] 类型=oneshot ExecStart=/sbin/blockdev --setra 128 /dev/%I
当适当的设备到达时,安排由即插即用设备管理器 (udev) 启动该服务单元。您必须根据自己的特定需求定制的规则如下所示:
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[az]", ENV{SYSTEMD_WANTS}="custom-readahead@%k"
该SYSTEMD_WANTS设置会导致 udev 启动命名服务 —针对设备的模板实例化%k。然后运行此服务blockdev。
显然还有另一种方法可以做到这一点,它依赖于 udev 直接设置这些设置的能力。为此,您不需要 systemd 模板单元或实例化服务。相反,只需直接在其规则中指示 udev:
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[az]", ATTR{bdi/read_ahead_kb}="128"
注意之间的差异==和=。
rc.local无论哪种方式,都没有涉及任何地方。
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |