Western Digital: отключаем APM

Если при установленном Linux (да и в Windows есть такая проблема), диск частенько щелкает - поздравляю, отрабатывает APM (Advanced Power Management) и паркует головку диска. В некоторых моделях это происходит каждый 3 секунды. Бесполезная вещь, которая напрягает механику диска и всех окружающих, т.к. слышать эти щелчки быстро надоедает.

Если проверить счетчик циклов командой

smartctl -a /dev/sda | grep Load_Cycle_Count

становится очевидно что проблема есть и что-то с ней нужно делать.

Есть утилита от WD: https://support.wdc.com/downloads.aspx?p=113 и есть адаптированное решение под Linux: http://idle3-tools.sourceforge.net/ но увы, работают не со всеми моделями дисков. У меня все варианты запуска выдавали «sg16(VSC_SENDKEY) failed: Invalid exchange»:

idle3ctl -g /dev/sda
idle3ctl -g100 /dev/sda
idle3ctl -g101 /dev/sda
idle3ctl -g103 /dev/sda
sg16(VSC_SENDKEY) failed: Invalid exchange

Часто советуемый вариант с

hdparm -J

у меня тоже не сработал - команда применяется, но диск продолжает щелкать. Зато помог другой подход:

hdparm -B 255 -S 0 /dev/sda 

Чтобы данная настройка заработала при загрузке системы (или при необходимости ее можно было отключить) создал файл /etc/systemd/system/wd-apm.service

  
[Unit]
Description=Western Digital disable APM

[Service]
ExecStart=hdparm -B 255 -S 0 /dev/sda

[Install]
WantedBy=multi-user.target

Далее включаем запуск при загрузке:

systemctl daemon-reload
systemctl enable wd-apm.service