Автоматическая остановка шпинделя диска

Автоматическая остановка шпинделя диска может понадобиться, например, если у вас в ноутбуке установлены SSD для работы и HDD для бекапа. Очевидно, что HDD нужен бывает редко, однако батарею он есть всегда.
Для того, чтобы HDD просыпался только когда он нужен, необходимо добавить правило udev. Его можно добавить в соответствующий файлик правил, посвященных энергосбережению или создать новый - это не принципиально. У меня пара дисков которые не должны все время работать, поэтому я создам один файлик - /etc/udev/rules.d/70-hdd-powerdown-rules.rules. И напишу туда пару правил по такому шаблону:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sdX", ATTR{queue/rotational}=="1", RUN+="/path/to/hdparm -S 1 /dev/sdX"

Тут надо заменить sdX на имя диска, который необходимо остановить и /path/to/hdparm на полный путь к hdparm. Это правило будет автоматически останавливать диск, если он неактивен в течение 5 секунд.
Однако, буква диска может меняться. На этот случай udev способен идентифицировать диски по серийному номеру. Серийный номер смотрим командой:

sudo udevadm info -n /dev/sdb | grep ID_SERIAL_SHORT

В ответ получаем что-то такое:

E: ID_SERIAL_SHORT=WD-WXH1A31F7617

И немного модифицируем правило, которое будет применяться ко всем дискам с заданным серийным номером:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]", ENV{ID_SERIAL_SHORT}=="WD-WXH1A31F7617", RUN+="/sbin/hdparm -S 1 /dev/%k"

После создания правил можно заставить udev их перечитать. На системах с systemd так:

sudo udevadm control --reload-rules && sudo udevadm trigger

А на системах с System V так:

udevcontrol reload_rules && udevtrigger

Проверить выключается ли диск можно командой:

sudo hdparm -C /dev/sdc

Если он выключился, то его состояние будет standby:

# hdparm -C /dev/sdc

/dev/sdc:
 drive state is:  standby 

а если диск работает, то active/idle:

# hdparm -C /dev/sda

/dev/sda:
 drive state is:  active/idle

Инигда так случается, что диск отказывается уходить в standby. В моем случае причиной оказались настройки Advanced Power Management. Это параметры энергосбережениясамого диска. У меня они были выставлены на максимальную производительность:

sudo hdparm -B 254 /dev/sdb

И в этом режиме диск не засыпал.
Для того, чтобы диск нормально уходил в standby нужно было сделать так:

sudo hdparm -B 127 /dev/sdb

Или добавить это команду прямо в правило udev:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]", ENV{ID_SERIAL_SHORT}=="WD-WXH1A31F7617", RUN+="/sbin/hdparm -B 128 /dev/%k && /sbin/hdparm -S 1 /dev/%k"
Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/auto_stop_hdd_spindel_while_no_activity_with_udev_rules.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1