systemd에서 udev 규칙 트리거

systemd에서 udev 규칙 트리거

매우 공격적인 전원 관리 기능을 갖춘 하드 드라이브가 있습니다. 로드 사이클이 심각한 수준으로 상승하는 것을 방지하기 위해 udev 규칙을 작성했습니다.

SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="TOSHIBA MK2555GS", RUN+="/usr/bin/hdparm -B 200 /dev/%k"

문제는 노트북을 절전 모드에서 깨울 때 규칙이 실행되지 않는다는 것입니다. 그래서 다음과 같은 시스템 서비스가 있습니다.

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

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

[Install]
WantedBy=suspend.target

나는 ExecStart명령이 /bin/udevadm trigger --subsystem-match="block". 이 명령을 수동으로 실행하면 전원 관리가 올바르게 조정되지만 systemd 서비스를 통해 작동하지 않습니다. 이를 수행할 수 있는 방법이 있습니까? 그런데 나는 아치 리눅스를 사용하고 있습니다

답변1

/usr/lib/systemd/systemd-sleephdparm을 실행하는 스크립트를 넣을 수 있습니다. /dev/disk/by-uuid/대신 hdparm을 사용할 수 있습니다/dev/sda...

아니면 사용해 보세요/bin/sh -c "/bin/hdparm -B 200 /dev/disk/by-uuid/XY"

답변2

나는 거의 같은 상황에 있으며 Google에서의 유명세 systemd udevadm trigger와 이러한 드라이브의 터무니없는 기본값을 길들이는 방법에 대한 일반적인 요약으로 인해 이 질문에 더 많은 정보를 추가하고 싶었습니다.

내 Western Digital Blue 하드 드라이브가 거만하고 비생산적이며 반SMART 건강, 전력을 가지고 있다는 것을 깨달았을 때쓰레기넌센스는 기본적으로 활성화되어 있으며 OP와 거의 동일한 프로세스를 따랐습니다. 펌웨어 기능을 비활성화했지만 다음 명령을 사용하여 APM 및 대기 기능도 비활성화해야 했습니다 hdparm. 이 세 가지가 없으면 만연한 로드 사이클링이 계속해서 발생합니다.

첫 번째 차이점은 내 장치가 hdparm.rules장치 추가(부팅) 시에만 호출되도록 설정되어 있기 때문에 udevadm trigger내가 지시하지 않으면 작동하지 않는다는 것입니다.어느를 추가하여 애플리케이션을 트리거합니다 --action=add. 이는 복구 중에 HD를 분리/다시 연결하는 것을 효과적으로 시뮬레이션합니다. 이것이 바로 제가 필요한 것입니다.

그러나 나는 OP와 비슷한 혼란 udevadm trigger에 빠졌고 왜 hdparm rule.systemd service

  1. 우리 시스템에서는 유닛 파일이 그것을 모르기 때문에 service실행 파일의 위치를 ​​명시적으로 지정해야 합니다 .ExecStart /bin/udevadm$path
  2. 그리고아마도....설치했는데 systemd/user아마도 나처럼 실행 중이었기 때문에 root필요한 권한을 얻지 못했을 것입니다 /sbin/hdparm.

(나는 Debian 8을 실행하고 있지만 이것이 배포판에만 국한된 것은 아니라고 생각합니다.)

관련 정보