Как я могу запустить команду hdparm после загрузки и возобновить работу в Fedora 19?


10

Я купил новый HD (WD5000BPVT), который, к сожалению, пытается спать каждые 5-8 секунд. Мало того, что звук щелчка достаточно слышен, время раскрутки в 1 секунду добавляет очень заметную задержку при повседневном использовании.

Я обнаружил, hdparm -B 254 /dev/sdaчто отключит очень короткий сон, но я не знаю, как применять этот параметр каждый раз, когда привод включен. Приложения dconf-editorи «Настройки управления питанием» ничего не делают в отношении настроек HD. У меня нет какой - либо /etc/hdparmили /etc/acpiпути. MATE - оконный менеджер.

На Fedora 19, как я могу заставить эту команду выполняться всякий раз, когда привод активирован?

Ответы:


12

У меня была та же самая проблема, ни одно из решений здесь не соответствовало моим потребностям. Использование cron - это обходной путь, а не решение, правила udev запускаются при подключении / отключении питания, но не после приостановки / возобновления, и pm-utilsбольше не используются по умолчанию в Fedora 19, когда вы, например, закрываете крышку ноутбука.

Так systemdкак теперь отвечает за приостановку / спящий режим, я думаю, что единственный правильный способ справиться с этой ситуацией - создать systemdмодуль, который будет работать как после загрузки, так и после возобновления из режима ожидания.

Заметки:

  • Используя /dev/disk/by-id/...вместо /dev/sda, вы всегда обязательно получите правильный диск (sda, b, c зависит от порядка, в котором они обнаружены ядром)
  • Вы можете иметь несколько ExecStartстрок, чтобы вы могли настроить несколько дисков

Вот блок, который я написал:

[Unit]
Description=Silence HD
After=suspend.target

[Service]
Type=oneshot
# Disable automatic head parking for the main disk
ExecStart=/sbin/hdparm -B 254 /dev/disk/by-id/ata-ST3250824AS_4N127FD1
# Enable automatic spin down after 30 seconds for the second, infrequently used disk
ExecStart=/sbin/hdparm -S 6 /dev/disk/by-id/ata-ST31000528AS_BVP5H5X1

[Install]
WantedBy=suspend.target basic.target

Сохраните этот файл как /etc/systemd/system/hdsilence.serviceи затем включите его, используя:

systemctl enable hdsilence.service
systemctl daemon-reload

Отлично работает и здесь, на Fedora 20. Спасибо!
Якоб

Так что это делает изменения в /etc/hdparm.conf устаревшими?
Домих

@domih: Насколько я могу судить, hdparm.conf - вещь Debian, и она не поддерживается в Fedora.
Кшиштоф Адамски

6

Вы можете заставить систему выполнить команду во время загрузки, создав собственную службу systemd или добавив команду в /etc/rc.d/rc.local.

Если вы хотите, чтобы команда запускалась при каждом пробуждении системы после сна / гибернации, вы можете добавить скрипт, начинающийся с 2 цифр, в /etc/pm/sleep.d/, посмотрите другие скрипты в / usr / lib64 / pm-utils / sleep.d (при условии x86_64) для более подробной информации. По сути, он принимает параметр в зависимости от того, в какое состояние он входит. Вам также может понадобиться добавить логин в power.d / в том же родительском каталоге, если вы хотите работать по разному от батареи, чем при подключении.


1
creating your own systemd serviceВы можете быть более конкретным? У меня нет файла /etc/rc.d/rc.local.
Пит

1
Документация systemd объясняет синтаксис единицы обслуживания systemd. /etc/rc.d/rc.localФайл только сценарий оболочки, создайте его и убедитесь , что его исполняемым.
Jsbillings

3

Для различных настроек при работе от сети переменного тока / батареи, я бы сделал это с помощью простого udevправила, например
/etc/udev/rules.d/98-apmsettings.rules:

SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/hdparm -B 128 /dev/sda"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/hdparm -B 254 /dev/sda"

Это было установлено , apmчтобы , 254когда ноутбук подключен к сети и , соответственно , 128когда отключен. Кроме того, он всегда должен работать, даже после выхода из режима ожидания.


1
Для тех , кто любит копировать дословно, новые выпуски имеют hdparmв /usr/sbinтак настроить пути.
Роман

2

У меня такой же диск (и та же проблема). Мое глупое, но рабочее решение: я вставил это в /etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda

Разве это не просто доступ к диску каждые 12 секунд? Я обдумал что-то в этом духе, но мне хотелось бы немного поспать, когда не отстегнут.
Пит

Каждые пять минут Вы можете написать скрипт-обертку, который проверяет состояние питания системы.
Хауке Лагинг

1

Правила udev хорошо работают с событиями plug, но чтобы получить правильное поведение после возобновления из suspend, мне нужно что-то вроде этого /etc/pm/sleep.d:

#!/bin/sh

case "${1}" in
    resume|thaw)
    if grep -q 1 /sys/class/power_supply/ADP1/online; then
      /usr/sbin/hdparm -B 254 /dev/sda
    else
      /usr/sbin/hdparm -B 128 /dev/sda
    fi
;;
esac
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.