Jump to content
From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи 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/sdX

Важно: Обязательно убедитесь, что

1. Данные действительно были записаны на носитель. Рекомендуется также подождать некоторое время, чтобы диск перёшел в режим ожидания.
2. Устройство, в данном примере `/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:

1. Western Digital поставляет DOS-утилиту wdidle3.exe для настройки этого параметра. Она предназначена только для обновления прошивки следующих жёстких дисков: WD1000FYPS, WD7500AYPS, WD7501AYPS, но известно, что она может изменять таймер idle3 и на других моделях Green.
2. hdparm предоставляет реализацию, созданную с помощью реверс-инжиниринга, с флагом `-J`, которая не так полна, как оригинальная официальная программа, хотя, похоже, она работает по крайней мере на нескольких дисках. Для использования в Linux рекомендуется значение 30 секунд. Можно указать ноль (0), чтобы полностью отключить таймер WD idle3 (не рекомендуется):

       # hdparm -J 30 --please-destroy-my-drive /dev/sda

   Для автоматического применения этого параметра на поддерживаемых дисках смотрите раздел #Сохранение настроек с помощью правила udev.
3. Ещё одна неофициальная утилита предоставляется пакетом 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

Categories:

- File systems (Русский)
- Storage (Русский)