从 systemd 触发 udev 规则

MoF*_*oFu 7 arch-linux udev systemd

我有一个硬盘,它有一个非常积极的电源管理。为了防止负载周期上升到临界值,我写了一个 udev 规则:

SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="TOSHIBA MK2555GS", RUN+="/usr/bin/hdparm -B 200 /dev/%k"
Run Code Online (Sandbox Code Playgroud)

问题是,在我将笔记本从睡眠中唤醒后,不会触发此规则。因此,我有以下 systemd 服务:

[Unit]
Description=root resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/bin/hdparm -B 200 /dev/sda

[Install]
WantedBy=suspend.target
Run Code Online (Sandbox Code Playgroud)

我更喜欢ExecStart命令类似于/bin/udevadm trigger --subsystem-match="block". 所以我不必明确说明内核名称。如果我手动执行此命令,电源管理会正确调整,但它在 systemd 服务中不起作用。有没有办法做到这一点?顺便说一句,我正在使用 arch-linux

小智 2

您可以放置​​一个执行 hdparm 的脚本/usr/lib/systemd/systemd-sleep。您可以使用 hdparm/dev/disk/by-uuid/代替/dev/sda...

或者尝试使用/bin/sh -c "/bin/hdparm -B 200 /dev/disk/by-uuid/XY"