Как я могу контролировать время остановки HDD?

У меня есть 2 жестких диска в моем компьютере. Ubuntu очень быстро выключает вторичный жесткий диск примерно через 15 минут, что для меня мало. Мне нужно контролировать это время. Как мне это сделать?

Я попробовал управление питанием GNOME, но не нашел его полезным.

14 ответов

Посмотри на hdparm,

Из руководства (man hdparm в командной строке):

-S Установить время ожидания (spindown) для накопителя. Это значение используется дисководом для определения того, как долго (без дисковой активности) ждать перед выключением двигателя шпинделя для экономии энергии. При таких обстоятельствах накопителю может потребоваться до 30 секунд для ответа на последующий доступ к диску, хотя большинство накопителей работают намного быстрее.

Кодирование значения тайм-аута несколько своеобразно. Нулевое значение означает "тайм-ауты отключены": устройство не будет автоматически переходить в режим ожидания. Значения от 1 до 240 определяют кратные 5 секундам, приводя к тайм-аутам от 5 секунд до 20 минут. Значения от 241 до 251 указывают от 1 до 11 единиц по 30 минут, что дает время ожидания от 30 минут до 5,5 часов. Значение 252 означает тайм-аут 21 минуты. Значение 253 устанавливает период ожидания, определенный поставщиком, от 8 до 12 часов, а значение 254 резервируется. 255 интерпретируется как 21 минута плюс 15 секунд. Обратите внимание, что некоторые старые диски могут иметь разные интерпретации этих значений.

Так sudo hdparm -I /dev/sdb | grep level покажет текущее значение spindown, например:

Advanced power management level: 254

Из руководства: 254 зарезервировано, поэтому я ожидаю, что это будет Ubuntu по умолчанию (может кто-нибудь подтвердить / расширить это, пожалуйста?)

Пример:

sudo hdparm -S 25 /dev/sdb = откат через 25*5 секунд.

sudo hdparm -S 245 /dev/sdb = откат после (245-240)*30 минут.

Дисковая утилита -> выберите жесткий диск -> щелкните значок "Дополнительные действия..." в правом верхнем углу -> Настройки диска...

Моя выглядит так: Скриншот

Если вы заинтересованы в том, чтобы настройка hdparm сохранялась между перезагрузками, вместо добавления ее в crontab, вы можете использовать /etc/hdparm.conf, У меня есть следующее, обратите внимание на использование заглавной буквы S, а не в нижнем регистре:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

Добавьте эту строку, заменив UUID на ваш, или вы также можете указать устройство, используя /dev/sdX формат. Вы можете узнать UUID вашего диска с помощью команды sudo blkid,

  1. Найдите UUID вашего диска.

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. редактировать /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. Ищу spindown-time или раздел настроек вашего диска.

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. Я предпочитаю ссылаться на диск по UUID, который остается неизменным в разных установках (если только вы не измените его в самом HW).

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. Если скрипт init вызывает проблемы с загрузкой, вы можете передать nohdparm в командной строке ядра, и скрипт не будет запущен.

Потратив часы и часы, я обнаружил, что мой привод WDC не поддерживает команду hdparm -S, независимо от значения атрибута idle3 (google: idle3ctl). И это общая проблема с накопителями WD. Но я рад сообщить, что hd-idle ( http://hd-idle.sourceforge.net/) работает без нареканий. При установке из пакета dpkg (см. Примечания по установке) он создает демон как в ubuntu, так и в debian (config находится в / etc / default / hd-idle). Хорошо работает и после выхода из спящего режима.

mc default # ps aux | grep hd-idle | grep -v grep | вырезать -c 66-; для f в [ad]; do hdparm -C /dev/sd$f | grep -v "^$"; сделанный
/usr/sbin/hd-idle -i 1800 -a sdc -i 600 -a sdd -i 60 -l /var/log/hd-idle.log
/ DEV / SDA:
 Состояние диска: активно / неактивно
/ DEV / SDB:
 Состояние диска: в режиме ожидания
/ DEV / SDC:
 Состояние диска: в режиме ожидания
/ DEV / SDD:
 Состояние диска: в режиме ожидания

Я добавляю что-то вроде:

@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e  > /dev/null 2> /dev/null

в корневой каталог. Использование uuid лучше, я думаю, потому что sda/sdb и т.д., похоже, меняется с каждой перезагрузкой

Я обнаружил, что поведение Samsung HD204UI зависит от уровня APM (hdparm -B). Если уровень APM равен 127, тайм-аут тайм-аута равен 10 с. Если уровень APM равен 150, то тайм-аут ожидания определяется -S вариант.

В Ubuntu 14.04

Диски> выделите диск> нажмите на шестерню в правом верхнем углу> Настройки диска> Теперь у вас есть настройки Standby, APM, AAM и Write Cache в удобном графическом интерфейсе!

Важное замечание: в отличие от основного ответа кажется, что

sudo hdparm -I /dev/sdb | grep level 
# Advanced power management level: 254

не показывает текущее значение spindown (которое мы можем установить с помощью hdparm -S, по желанию OP), а отображает значение, установленное с помощью hdparm -M:

hdparm -M 128   # Set acoustic management to 'quiet'
hdparm -M 254   # Set acoustic management to 'fast'

На убунту 18,04 до 20,04, вы можете изменить диск установки режима ожидания тайм - аут в:
поиск дисков в пусковую> выберите диск> нажмите на ⋮ в строке меню рядом с минимизируют кнопки окно> Настройки> Приводные использование ползунок для установки тайм - аута

Скриншот на ubuntu 20.04

Мне не повезло с hdparm на внешнем жестком диске, смонтированном в корпусе USB, который я использую для обслуживания носителей с минидлна.

Я наткнулся на идею отсюда: https://serverfault.com/questions/562738/keeping-usb-backup-drive-from-sleeping-while-mounted

Наилучшие результаты достигаются при использовании uuid диска, который вы можете найти с помощью:

sudo blkid

Следующий метод требует root-доступа, но так же требует hdparm. Он использует crontab для чтения случайного блока с диска каждые 5 минут и игнорирует все сообщения. Чтобы убедиться, что у вас правильный UUID, протестируйте его в командной строке следующим образом (убедитесь, что вы используете нужный UUID, а не этот):

sudo dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM

Вы должны увидеть результат примерно так:

1+0 records in
1+0 records out
512 bytes copied, 0.000738308 s, 693 kB/s`

Чтобы подавить это сообщение, которое может в конечном итоге быть записано где-то, возможно, в файловую систему / (которая в моем случае находится на SSD), ниже я использую в корневом crontab. Вы получаете там с

sudo crontab -e

Тогда под комментариями:

*/5 * * * * bash -c 'dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM' >/dev/null 2>&1

Надеюсь, что это помогает кому-то еще с похожими проблемами. К сожалению, это все еще записывается в системный журнал, но потенциально есть способы подавить это; см. этот пост ServerFault.

[править] 2017-01-07 09:02:

Мне удалось подавить эти сообщения, отредактировав /etc/rsyslog.d/50-default.conf, чтобы изменить эту строку:

*.*;auth,authpriv.none -/var/log/syslog

к этому:

*.*;cron,auth,authpriv.none -/var/log/syslog

К сожалению, это подавляет все сообщения cron; Я не смог заставить cron перенаправить выход из корневой файловой системы (которая в моем случае работает на устаревшем SSD, поэтому я хочу ограничить количество записей), но так как это всего лишь домашний сервер, я, вероятно, не пропущу много. Определенно не рекомендовал бы эту стратегию для производственной машины.

В Debian с дисками WD я обнаружил, что установка любого уровня с помощью hdparm -S приводит к тому, что диск возвращает уровень 254 на последующем hdparm -I. Так что я действительно не уверен, вращаются они или нет. Я думаю, что они все еще вращаются.

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

Я обнаружил, что

      sudo hdparam -S 0 /dev/sda1

на моем диске дает этот вывод:

      setting standby to 0 (off)

Используйте инструменты мониторинга SMART для изменения времени ожидания

Если у вас установлены инструменты SMART Monitoring Tools, ваш диск поддерживает SMART (обычно так и есть) и ваш диск SATA или ATA, вы можете использовать программу с-sФлаг опции для изменения настройки на диске. Вот отрывок изsmartctlСтраница руководства, описывающая поведение настройки привода таймера режима ожидания:

      A value of 0 or 'off' disables the standby timer.  Values
from 1 to 240 specify timeouts from 5 seconds to 20 minutes
in 5 second increments.  Values from 241 to 251 specify
timeouts from 30 minutes to 330 minutes in 30 minute
increments.  Value 252 specifies 21 minutes.  Value 253
specifies a vendor specific time between 8 and 12 hours.
Value 255 specifies 21 minutes and 15 seconds.  Some drives
may use a vendor specific interpretation for the values.

Примеры использования

Например, это устанавливает таймер режима ожидания на 20 минут:

smartctl /dev/sdx -s standby,240

... и эта команда отключает таймер режима ожидания для немедленного замедления вращения диска, что полезно для предотвращения повреждения диска, если вам нужно его физически переместить:

smartctl /dev/sdx -s standby,0


Примечания

  • Помните, что целевым устройством должно быть само устройство, а не раздел на этом устройстве, т.е./dev/sdaвместо/dev/sda1.
  • Имейте в виду, что поведение некоторых накопителей в режиме ожидания может зависеть от поставщика.
  • Чтобы последовательно изменить настройки конкретного диска, например, в сценарии, который запускается при загрузке, вы можете использовать сопоставленную ссылку UUID диска внутри/dev/disk/by-uuid.
Другие вопросы по тегам