Перевести 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