Перевести HDD в режим ожидания через X минут с помощью hdparm не работает

Я использую Ubuntu 12.04 на домашнем сервере. Существует 5 жестких дисков: один SSD с операционной системой и 4 жестких диска (Samsung HD204UI), настроенных как RAID5 с использованием mdadm.

Мне не нужен RAID очень часто (скажем, в среднем примерно раз в день); он содержит мультимедийные данные и некоторые резервные копии, поэтому я решил перевести диски в режим ожидания большую часть времени.

Я настроил диски на автоматическое замедление через 20 минут, используя hdparm, здесь /dev/sda В качестве примера:

hdparm -S 240 /dev/sda

Вывод команды подтвердил это:

/dev/sdb:
 setting standby to 240 (20 minutes)

Но проблема в том, что диск вращается примерно через 5 секунд (вместо 20 минут) после последнего доступа, и

hdparm -C /dev/sdb

дисплеи:

/dev/sdb:
 drive state is:  standby

Почему накопитель не ждет 20 минут в соответствии с настройками? Это как-то связано с настройкой RAID? (Я так не думаю...)

Это очень короткое время ожидания проблематично, поскольку это RAID5, и когда я обращаюсь к файлу, он распределяется по четырем дискам по блокам. Поскольку диск 1 не нужен, когда диск 2 читается, он засыпает, когда будет использоваться в следующий раз (после того, как диск 3 будет считан с). Таким образом, диски постоянно вращаются вверх и вниз, что приводит к пропускной способности, близкой к нулю.

Для людей, которые беспокоятся о сроке службы моих дисков: не будет проблем с тем, что диски будут вращаться вверх и вниз в среднем один раз в день, так как я предпочитаю экономить энергию и тепло по сравнению с работоспособностью дисков (я использую RAID5 и не очень важно)

3 ответа

Решение

Включен ли AHCI в вашем BIOS? Если нет, попробуйте включить и повторить попытку.

Если это все еще не работает, то вам, возможно, придется попробовать что-то более сложное, как hdparm не всегда хорошо играет с дисками SATA, что, как я полагаю, у вас есть.

Проверьте эту страницу для следующего относительно простого решения, которое использует crontab:

sudo apt-get install sg3-utils
crontab -e

Теперь добавьте это в конец вашего crontab (замените sdx на диск, который вы хотите перевести в режим ожидания):

0-59/15 * * * * ( if [ ! -f /dev/shm/1 ] ; then touch /dev/shm/1 /dev/shm/2; fi ; mv /dev/shm/1 /dev/shm/2; cat /proc/diskstats > /dev/shm/1 ) >/dev/null 2>&1
0-59/15 * * * * ( export HD="sdx "; if [ "$(diff /dev/shm/1 /dev/shm/2 | grep $HD )" =  "" ] ; then /usr/bin/sg_start --stop /dev/$HD; fi ) >/dev/null 2>&1

Конечно, прежде чем пытаться что-либо из этого, настоятельно рекомендуется выполнить полное резервное копирование содержимого ваших жестких дисков.

Может быть, лучший способ может быть:

hdparm -B 1 -Y / dev / device
hdparm -B 255 / dev / device

Первый hdparm немедленно перевел устройство в режим ожидания. Второй отключает APM, поэтому диск остается в режиме ожидания до следующего доступа к диску.

Я использовал файл модуля systemd, чтобы установить минимальное время ожидания вращения 21 м 15 с сразу после загрузки. Он запускается только один раз при каждой загрузке, поскольку это всего лишь временная настройка, и привод ее забывает. Кроме того, мой RAID1 настроен как устройства с файловой системой BTRFS и содержит твердотельный накопитель Samsung 870EVO емкостью 2 ТБ и Samsung HD204UI.

      /etc/systemd/system/hdparm.service

[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -S 255 /dev/sdb

[Install]
WantedBy=multi-user.target

https://wiki.archlinux.org/title/hdparm#Putting_a_drive_to_sleep_directly_after_boot

Другие вопросы по тегам