Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Не применяется hdparm (настройка APM HDD) после перезапуска системы  (Прочитано 1861 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн OSeo_G

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Здравствуйте уважаемые !

Проблем такая :
Жёсткий диск, если нет нагрузки, раз в секунд 10 паркуется, выключается, снова включается. Похоже экономит электричество. Или любит тишину. Пробую отключить.

sudo hdparm -M /dev/sda
отвечает acoustic      = not supported #дело не в тишине

sudo hdparm -B /dev/sda
отвечает  APM_level      = 1     #похоже дело в экономии

sudo hdparm -B 254 /dev/sda
отвечает APM_level      = 254    #ага, принял

sudo hdparm -B /dev/sda
отвечает APM_level      = 254    #и запомнил

перезагружаю
sudo hdparm -B /dev/sda
отвечает APM_level      = 1      #слетел !!!

гуглю, делаю как описано тут
https://help.ubuntu.ru/wiki/hdparm#hdparm
правлю /etc/hdparm.conf
apm = 254
apm_battery = 254

перезагружаю, проверяю
sudo hdparm -B /dev/sda
отвечает APM_level      = 1        #не сработало

гуглю дальше
https://forum.ubuntu.ru/index.php?topic=67813.0
добавляю в /etc/hdparm.conf
/dev/sda {
apm = 254
apm_battery = 254
}

перезагружаю, проверяю
sudo hdparm -B /dev/sda
отвечает APM_level      = 1        #опять не сработало

OS ubuntu server 20.04.3
HDD seagate ST1000LM035

Куда ещё копать ?
Благодарю зарание !


/upd
1. после перезагрузки (reboot) параметр не слетает, после обесточивания ноута после выключения (poweroff) слетает
2. справка по hdparm выдаёт  "-B   Set Advanced Power Management setting (1-255)"
то есть команда не пригодна для проверки, а только для установки. но при этом она не ругается, а что-то
похожее на правду возвращает. Ошибка ? А какая тогда команда для проверки ?
« Последнее редактирование: 12 Января 2022, 20:48:40 от ALiEN175 »

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6834
    • Просмотр профиля
Поищи лучше. Недавно на форуме была тема, человек боролся с hdparm.


Пользователь добавил сообщение 12 Января 2022, 17:59:58:
Вот та тема.
« Последнее редактирование: 12 Января 2022, 17:59:58 от andytux »

Оффлайн OSeo_G

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Недавно на форуме была тема
посмотрел. у него странная версия, некий депин 20. и он в конце концов вообще удалил hdparm и в гуи включил план питания.

но у меня сервер. и вот кое что :
https://stackoverflow.com/questions/49841690/hdparm-conf-settings-dont-seem-to-run-at-boot

злой машинный перевод
Цитировать
В Ubuntu 20.04 LTS есть ошибка, из-за которой аргументы командной строки возвращаются неправильно. Исправление состоит в том, чтобы изменить конец hdparm_options()функции /usr/lib/hdparm/hdparm-functions на чтение:

if [ -n "$OPTIONS" ]; then
    echo $OPTIONS
    return 0
elif [ -n "$DEFAULT" ]; then
    echo $DEFAULT
    return 0
fi

поправил в точности как указано выше /usr/lib/hdparm/hdparm-functions
было
  done
        # parsed the whole file and didn't find the disk,
        # so try the default instead.
        if [ -n "$DEFAULT" ]; then
            echo $DEFAULT
            return 0
        fi

стало
       done
        if [ -n "$OPTIONS" ]; then
            echo $OPTIONS
            return 0
        # parsed the whole file and didn't find the disk,
        # so try the default instead.
        elif [ -n "$DEFAULT" ]; then
            echo $DEFAULT
            return 0
        fi

NB предложенное решение не рабочее

надо детально как-то копать скрипт, на каком он языке непонятно.
и как отлаживать, тоже непонятно.


вот вся функция hdparm_options() поправленная мной
hdparm_options()
{
    local WANTED_DISK="$1"

    local DISC= DEFAULT= DEF_QUIET= COMMAND_LINE=
    # if the below is guaranteed to spawn a subshell, then this next line is
    # unnecessary
    local OPTIONS OPT_QUIET KEY SEP VALUE

    egrep -v '^[[:space:]]*(#|$)' /etc/hdparm.conf |
    {
        # set our default global apm policy here.
        if hdparm_try_apm "$WANTED_DISK"; then
            if hdparm_is_on_battery; then
                hdparm_set_option -B128
        # set a spindown time of 3 minutes by default so the disk isn't
        # constantly power cycling on a busy machine if spindown is
        # enabled
        hdparm_set_option -S36
            else
                hdparm_set_option -B254
            fi
        fi

        while read KEY SEP VALUE; do
            case $SEP in
                '{')
                    case $KEY in
                        command_line)
                            unset DISC
                            unset OPTIONS
                            unset OPT_QUIET
                            COMMAND_LINE=1
                            ;;
                        *)
                            if [ -h "$KEY" ]
                            then
                                DISC=$(readlink -m "$KEY")
                                DISC=${DISC%%[[:digit:]]*}
                            else
                                DISC=$KEY
                            fi
                            OPTIONS=$DEFAULT
                            OPT_QUIET=$DEF_QUIET
                            ;;
                    esac
                    ;;
                =)
                    case $KEY in
                         read_ahead_sect)
                             hdparm_set_option -a$VALUE
                            ;;
                        lookahead)
                            hdparm_eval_value $VALUE -A
                            ;;
                        bus)
                            hdparm_eval_value $VALUE -b
                            ;;
                        apm)
                            if ! hdparm_is_on_battery; then
                                hdparm_set_option -B$VALUE
                            fi
                            ;;
                        apm_battery)
                            if hdparm_is_on_battery; then
                                hdparm_set_option -B$VALUE
                            fi
                            ;;
                        io32_support)
                            hdparm_set_option -c$VALUE
                            ;;
                        dma)
                            hdparm_eval_value $VALUE -d
                            ;;
                        defect_mana)
                            hdparm_eval_value $VALUE -D
                            ;;
                        cd_speed)
                            hdparm_set_option -E$VALUE
                            ;;
                        mult_sect_io)
                            hdparm_set_option -m$VALUE
                            ;;
                        prefetch_sect)
                            hdparm_set_option -P$VALUE
                            ;;
                        read_only)
                            hdparm_eval_value $VALUE -r
                            ;;
                        write_read_verify)
                            hdparm_eval_value $VALUE -R
                            ;;
                        spindown_time)
                            hdparm_set_option -S$VALUE
                            ;;
                        force_spindown_time)
                            hdparm_set_option force_spindown_time$VALUE
                            ;;
                        poweron_standby)
                            hdparm_eval_value $VALUE -s
                            ;;
                        interrupt_unmask)
                            hdparm_eval_value $VALUE -u
                            ;;
                        write_cache)
                            hdparm_eval_value $VALUE -W
                            ;;
                        transfer_mode)
                            hdparm_set_option -X$VALUE
                            ;;
                        acoustic_management)
                            hdparm_set_option -M$VALUE
                            ;;
                        keep_settings_over_reset)
                            hdparm_eval_value $VALUE -k
                            ;;
                        keep_features_over_reset)
                            hdparm_eval_value $VALUE -K
                            ;;
                        chipset_pio_mode)
                            hdparm_set_option -p$VALUE
                            ;;
                        security_unlock)
                            hdparm_set_option --security-unlock $VALUE
                            ;;
                        security_pass)
                            hdparm_set_option --security-set-pass $VALUE
                            ;;
                        security_disable)
                            hdparm_set_option --security-disable $VALUE
                            ;;
                        user-master)
                            hdparm_set_option --user-master $VALUE
                            ;;
                        security_mode)
                            hdparm_set_option --security-mode $VALUE
                            ;;
                        ROOTFS)
                            ;;
                        *)
                            echo "Unknown option $KEY"
                            exit 1
                            ;;
                    esac
                    ;;
                "")
                    case $KEY in
                        '}')
                            if [ -z "$DISC" ] && [ -z "$COMMAND_LINE" ]; then
                                echo "No disk enabled. Exiting" >&2
                                return 1
                            fi
                            if [ -n "$OPTIONS" ] && [ "$DISC" = "$WANTED_DISK" ]
                            then
                                echo $OPTIONS
                                return 0
                            fi
                            COMMAND_LINE=
                            ;;
                        quiet)
                            if [ -n "$DISC" ]; then
                                OPT_QUIET=-q
                            else
                                DEF_QUIET=-q
                            fi
                            ;;
                        standby)
                            hdparm_set_option -y
                            ;;
                        sleep)
                            hdparm_set_option -Y
                            ;;
                        disable_seagate)
                            hdparm_set_option -Z
                            ;;
                        security_freeze)
                            hdparm_set_option --security-freeze
                            ;;
                        *)
                            if [ -z "$COMMAND_LINE" ]; then
                                echo "unknown option $KEY" >&2
                                return 1
                            fi
                            ;;
                    esac
                    ;;
                *)
                    if [ -z "$COMMAND_LINE" ]; then
                        echo "unknown separator $SEP" >&2
                        return 1
                    fi
                    ;;
            esac
        done
        if [ -n "$OPTIONS" ]; then
            echo $OPTIONS
            return 0
        # parsed the whole file and didn't find the disk,
        # so try the default instead.
        elif [ -n "$DEFAULT" ]; then
            echo $DEFAULT
            return 0
        fi
    }
}
« Последнее редактирование: 13 Января 2022, 15:34:53 от OSeo_G »

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6834
    • Просмотр профиля
Цитировать
на каком он языке непонятно
Это shell-скрипт.
« Последнее редактирование: 13 Января 2022, 05:32:13 от andytux »

Оффлайн OSeo_G

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
удаление hdparm также не помогает, начинаются парковки и остановки шпинделя раз секунд в 10..

проблема актуальна

Оффлайн OSeo_G

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
попробовал вот такой костыль
https://forum.ubuntu.ru/index.php?topic=194728.msg1466890#msg1466890

файлик добавился

выполнение
sh /etc/init.d/hdparm_parkуспешно устанавливает требуемый уровень


sudo update-rc.d hdparm_park defaults 90команда успешно выполняется
симлинки не создаются

всё равно не работает. в чем причина ?

и ещё, чуть философии.
с свободной, надёжной, и самой безглючной и надёжной ОС всё всегда так ?
« Последнее редактирование: 15 Января 2022, 19:35:10 от OSeo_G »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
OSeo_G, та инструкция от 12 года. Лучше использовать systemd, я уже писал пример - https://forum.ubuntu.ru/index.php?topic=315402.msg2453888#msg2453888

Значение АРМ 255 некоторые диски могут не понимать. Лучше уж наверняка - 254.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн OSeo_G

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
OSeo_G, та инструкция от 12 года. Лучше использовать systemd, я уже писал пример - https://forum.ubuntu.ru/index.php?topic=315402.msg2453888#msg2453888

Значение АРМ 255 некоторые диски могут не понимать. Лучше уж наверняка - 254.

Благодарю Вас. Со значением ясно всё, не поленился даже поэксперементировать с разными значениями.
По факту у меня если 127 и мненее, винт вырубается раз в 10 сек, 128 и более - вообще не вырубается.

По вашей ссылке не смог разобраться. Там похоже десктопная ОС, и иксами. У меня сервер.
Неужели нет нормального пути просто добавить команду просто в автозагрузку ? Раз уж она не желает работать штатно.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
По вашей ссылке не смог разобраться. Там похоже десктопная ОС, и иксами. У меня сервер.
Systemd - это система инициализации. Используется и на desktop- и server- дистрибутивах.
Что конкретно вам непонятно?

Пользователь добавил сообщение 15 Января 2022, 19:54:59:
Неужели нет нормального пути просто добавить команду просто в автозагрузку ?
Systemd - самый простой и правильный вариант, тем более, что у вас server
« Последнее редактирование: 15 Января 2022, 19:54:59 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн OSeo_G

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
По вашей ссылке не смог разобраться. Там похоже десктопная ОС, и иксами. У меня сервер.
Systemd - это система инициализации. Используется и на desktop- и server- дистрибутивах.
Что конкретно вам непонятно?

Пользователь добавил сообщение 15 Января 2022, 19:54:59:
Неужели нет нормального пути просто добавить команду просто в автозагрузку ?
Systemd - самый простой и правильный вариант, тем более, что у вас server

создал /etc/systemd/system/apm.service
с содержимым
[Unit]
Description=APM level for hard disk
After=suspend.target hybrid-sleep.target hibernate.target

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -B 254 /dev/sda

[Install]
WantedBy=sleep.target multi-user.target

выполнил
Цитировать
systemctl daemon-reload
systemctl enable apm
systemctl start apm
после каждой команды ругался красным, просил пароль

отключил/включил питание
результат
Цитировать
sudo hdparm -B /dev/sda

/dev/sda:
 APM_level      = 1

никакой результат. или я делал не то

победа !

обратил внимание что команда
/usr/bin/hdparmвозвращает ошибку пути, стало быть hdparm у меня в ином месте

оставил без пути
[Service]
Type=oneshot
ExecStart=hdparm -B 254 /dev/sda

и всё получилось ! багодарю !
а товарищам разработчикам бы багрепорт, или как там это делается.
потому что официальное их решение этого бага правкой /usr/lib/hdparm/hdparm-functions тоже не работает
работает только костыль
« Последнее редактирование: 16 Января 2022, 09:29:54 от OSeo_G »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
отключил/включил питание
результат
Вспоминайте, что устанавливали дополнительно - какие-нибудь пакеты для энергосбережения, например laptop-mode-tools?
Что-то "перебивает" настройки.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28358
    • Просмотр профиля
Скорее всего он в /usr/sbin
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.039 секунд. Запросов: 22.