hdparm (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
hdparm
. Дата последней синхронизации: 27 марта 2023. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Securely wipe disk#hdparm
hdparm
и
sdparm
— инструменты командной строки для просмотра и изменения аппаратных параметров
жёстких дисков
.
hdparm
также можно использовать как простой инструмент для
тестирования производительности
.
Первоначально
hdparm
создавался для
IDE-дисков
, а
sdparm
— для
SCSI-дисков
. Начиная примерно с 2010 года, интерфейсы устройств хранения данных представляют собой улучшенную смесь IDE и SCSI,
hdparm
и
sdparm
дополняют друг друга.
Важно
Изменение параметров диска по умолчанию может привести к зависанию системы или даже необратимому повреждению диска.
Установка
Установите
пакет
hdparm
. Для работы со SCSI-устройствами установите пакет
sdparm
.
Использование
Информация о диске
Для получения информации о жёстком диске выполните:
# hdparm -I /dev/sda
Тестирование производительности
Смотрите
Benchmarking (Русский)#hdparm
.
Настройка управления питанием
Современные жёсткие диски поддерживают множество функций управления питанием. Наиболее распространённые из них приведены в следующей таблице. Полный список доступен в
hdparm(8)
.
Важно
Слишком агрессивное управление питанием может сократить срок службы жёстких дисков из-за частых парковок и остановок вращения.
Параметр
Описание
-B
Устанавливает
Advanced Power Management
. Возможные значения от 1 до 255, низкие значения означают более агрессивное управление питанием, а более высокие — лучшую производительность. Значения от 1 до 127 разрешают остановку вращения, а значения от 128 до 254 — нет. Значение 255 полностью отключает эту функцию.
-S
Устанавливает таймаут ожидания (spindown) для диска. Задаёт время, которое бездействующий диск подождёт перед выключением двигателя для экономии энергии. Значение 0 отключает таймаут, значения от 1 до 240 задают значения кратные 5 секундам, а значения от 241 до 251 — кратные 30 минутам.
-M
Устанавливает
Automatic Acoustic Management
. Большинство современных жёстких дисков имеют возможность замедлить движение головок для снижения уровня шума. Возможное значение зависит от диска, некоторые диски могут не поддерживать эту функцию.
Примечание
При передаче обоих параметров
-B
и
-S
значения APM менее 128 могут привести к тому, что диск выключится до истечения таймаута
-S
. See
[1]
.
Узнать текущие значения
-S
и
-M
нельзя.
Чтобы узнать текущее значение параметра
-B
, укажите его без значения:
# hdparm -B /dev/sda
Для изменения параметра, например, чтобы изменить APM на 127:
# hdparm -B 127 /dev/sda
Кэш записи
Кэширование записи — это процесс временного кэширования файлов во
внутренней памяти диска
перед их записью на сам диск, что повышает производительность. Эта функция предоставляется большинством жёстких дисков и в большинстве случаев включена по умолчанию. Чтобы проверить, так ли это, выполните:
$ hdparm -W /dev/
sdX
Важно
Хотя кэш записи повышает производительность, есть и обратная сторона: его использование повышает риск потери данных при внезапном отключении питания.
Если он отключен, его можно включить такой командой:
$ hdparm -W 1 /dev/
sdX
А отключить — такой:
$ hdparm -W 0 /dev/
sdX
Отключение питания жёсткого диска
Типичная ситуация, когда это может понадобиться, — при использовании дисков, подключенных к дешёвому внешнему USB/SATA/FireWire корпусу или мосту. Если он не отправляет диску команду остановки должным образом при отключении питания, диск вынужден выполнять аварийную парковку головок. Регулярное выполнение аварийных парковок рано или поздно приведёт к поломке накопителя. Одно из решений заключается в том, чтобы, убедившись, что данные записаны на носитель, отправить диску команду выключения питания:
# hdparm -Y /dev/sd
X
Важно
Обязательно убедитесь, что
Данные действительно были записаны на носитель. Рекомендуется также подождать некоторое время, чтобы диск перёшел в режим ожидания.
Устройство, в данном примере
/dev/sd
X
, действительно является именно тем устройством, которое вы хотите отключить.
Советы и рекомендации
Запрос состояния диска без его пробуждения
Известно, что запрос состояния в hdparm будит некоторые диски. В этом случае попробуйте использовать команду
smartctl
из пакета
smartmontools
для выполнения запроса состояния, который не разбудит спящий диск. Например:
# smartctl -i -n standby /dev/sda
smartctl 6.5 2016-05-07 r4318 [x86_64-linux-4.10.13-1-ARCH] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

Device is in STANDBY mode, exit(2)
Сохранение настроек с помощью правила udev
Чтобы настройки сохранялись при перезагрузках, можно использовать правило
udev
:
/etc/udev/rules.d/69-hdparm.rules
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 254 -S 0 /dev/sda"
Поскольку название диска
/dev/sd
X
может меняться случайным образом, идентифицировать диск также можно по его серийному номеру, как описано в разделе
udev (Русский)#Определение диска по серийному номеру
.
Системы с несколькими жёсткими дисками могут гибко применять это правило в соответствии с некоторыми критериями. Например, чтобы применить настройки питания ко всем вращающимся дискам (жёсткий диск с вращающейся головкой, исключая, в частности,
твердотельные накопители
), используйте следующее правило:
/etc/udev/rules.d/69-hdparm.rules
ACTION=="add|change", KERNEL=="sd[a-z]", ATTRS{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 /dev/%k"
Применение настроек после пробуждения из сна
Если после возвращения системы из ждущего или спящего режима настройки теряются, их можно применить повторно с помощью
system-sleep
.
Создайте скрипт в каталоге
/usr/lib/systemd/system-sleep/
и сделайте его
исполняемым
:
/usr/lib/systemd/system-sleep/hdparm
#!/bin/sh

case $1 in post)
        /usr/bin/hdparm -B 254 -S 0 /dev/sda
        ;;
esac
Перевод диска в спящий режим сразу после загрузки
Устройство, к которому редко обращаются, можно перевести в спящий режим сразу после загрузки системы. Это не работает с приведённым выше правилом udev, потому что оно срабатывает слишком рано. Чтобы отправить диску команду после завершения загрузки, можно создать службу
systemd
и
включить
её:
/etc/systemd/system/hdparm.service
[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb

[Install]
WantedBy=multi-user.target
Работа с неподдерживаемыми устройствами
Некоторые диски не поддерживают остановку вращения через hdparm. Диагностическое сообщение об ошибке, подобное следующему, является хорошим признаком того, что дело обстоит именно так:
# hdparm -S 240 /dev/sda
/dev/sda:
setting standby to 240 (20 minutes)
HDIO_DRIVE_CMD(setidle) failed: Invalid argument
На некоторых дисках команда hdparm успешно выполняется, но диск не следует заданным параметрам (APM или таймаут spindown). Это наблюдалось с жёстким диском Toshiba P300 (model HDWD120).
Некоторые диски можно остановить с помощью
hd-idle
AUR
, который предоставляет службу
systemd
. Отредактируйте значение
HD_IDLE_OPTS
в файле
/etc/conf.d/hd-idle
, затем
запустите
и
включите
службу
hd-idle.service
.
Пример, использующий время бездействия 10 минут для
/dev/sda
и 1 минуту для
/dev/disk/by-uuid/01CF0AC9AA5EAF70
:
HD_IDLE_OPTS="-i 0 -a /dev/sda -i 600 -a /dev/disk/by-uuid/01CF0AC9AA5EAF70 -i 60"
Параметр
-i 0
в начале означает, что для остальных дисков hd-idle отключен.
Управление питанием Western Digital Green
Жёсткие диски
Western Digital Green
имеют специальный таймер
idle3
, который контролирует время бездействия диска перед парковкой головок и переходом в состояние низкого энергопотребления. По умолчанию установлено очень маленькое значение 8 секунд, что может привести к тысячам парковок головок за короткий промежуток времени и в конечном итоге к преждевременному выходу из строя, не говоря уже о влиянии на производительность диска, которому часто приходится просыпаться перед выполнением обычного ввода/вывода. Компания Western Digital выступила с
заявлением
, в котором утверждается, что Linux не оптимизирован для устройств хранения данных с низким энергопотреблением, и советует уменьшить частоту логирования. Есть несколько способов изменения
idle3
:
Western Digital
поставляет
DOS-утилиту
wdidle3.exe
для настройки этого параметра. Она предназначена только для обновления прошивки следующих жёстких дисков: WD1000FYPS, WD7500AYPS, WD7501AYPS, но известно, что она может изменять таймер
idle3
и на других моделях Green.
hdparm предоставляет реализацию, созданную с помощью реверс-инжиниринга, с флагом
-J
, которая не так полна, как оригинальная официальная программа, хотя, похоже, она работает по крайней мере на нескольких дисках. Для использования в Linux рекомендуется значение 30 секунд. Можно указать ноль (0), чтобы полностью отключить таймер WD idle3 (
не рекомендуется
):
# hdparm -J 30 --please-destroy-my-drive /dev/sda
Для автоматического применения этого параметра на поддерживаемых дисках смотрите раздел
#Сохранение настроек с помощью правила udev
.
Ещё одна неофициальная утилита предоставляется пакетом
idle3-tools
. Сырое значение
idle3
передаётся в качестве параметра команде
idle3ctl
. Соответствие между этим значением и таймаутом в секундах указано в таблице в
idle3ctl(8)
. Следующая команда устанавливает таймер на 30 секунд:
# idle3ctl -s 129 /dev/sdc
Следующая команда полностью отключает таймер (
не рекомендуется
):
# idle3ctl -d /dev/sdc
Примечание
Для применения изменения требуется полное отключение питания диска, независимо от используемой программы из списка выше. Это означает, что диск необходимо полностью выключить, а затем включить; простой перезагрузки системы недостаточно.
Также известно, что некоторые диски Western Digital Green по-другому интерпретируют параметр таймаута ожидания hdparm
-S 1
, в результате чего таймер работает 10 минут, а не 5 секунд.
Энергопотребление диска Green обычно составляет около 5,3 Вт во время чтения/записи, 4,7 Вт при бездействии и 0,7 Вт в режиме ожидания.
Решение проблем
Значение APM сбрасывается после сна
Значение APM может сбрасываться после ждущего режима и требовать повторного изменения параметра после каждого пробуждения. Это можно автоматизировать с помощью следующего юнита
systemd
(адаптировано из
темы на форуме
):
/etc/systemd/system/apm.service
[Unit]
Description=Local system resume actions
After=suspend.target hybrid-sleep.target hibernate.target

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

[Install]
WantedBy=sleep.target
Примечание
Цель
sleep.target
подтягивается всеми целями
suspend
,
hybrid-sleep
и
hibernate
, но она завершает свой запуск
перед
фактическим уходом системы в сон, поэтому эти три цели должны быть указаны явно. Смотрите
[2]
.
В качестве альтернативы можно создать
хук в /usr/lib/systemd/system-sleep
.
Смотрите также
https://sourceforge.net/projects/hdparm/
- hdparm на SourceForge