Автоматическая остановка шпинделя диска
Автоматическая остановка шпинделя диска может понадобиться, например, если у вас в ноутбуке установлены 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"
Discussion