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/sdX
- Данные действительно были записаны на носитель. Рекомендуется также подождать некоторое время, чтобы диск перёшел в режим ожидания.
- Устройство, в данном примере
/dev/sdX
, действительно является именно тем устройством, которое вы хотите отключить.
Советы и рекомендации
Запрос состояния диска без его пробуждения
Известно, что запрос состояния в 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/sdX
может меняться случайным образом, идентифицировать диск также можно по его серийному номеру, как описано в разделе 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-idleAUR, который предоставляет службу 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