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


71

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

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

Ответы:


67

Посмотрите на 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 минут.


спасибо Rinzwind за советы, которые мне очень помогли, но я бы хотел увидеть графический интерфейс для этого в следующем выпуске Ubuntu, или он может быть интегрирован в gnome power manager
user16295

4
Что касается ответа lzap, вы, похоже, отвечаете grepза APM ( -Bparm), но поговорите о -Sпотраченном времени. Вы также знаете что-нибудь о APM?
турбо

3
Текущая -Bнастройка отображается, как указано выше. Как я могу увидеть текущие -Sнастройки?
SabreWolfy

5
sudo hdparm -y /dev/sdbубивает зверя немедленно
сиамия

1
@SabreWolfy Я задал это отдельным вопросом: как узнать текущее время замедления привода?
rndrük

46

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

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


6
Самым простым, спасибо! (КСТАТИ пакет необходимо установить , если у вас нет этого gnome-disk-utility.
Герхард Бергер

путь Linux! +1
neu-rah

Да, очень легко - рад, что это здесь.
Ззач ...

@Ray Вы, сэр, потрясающие! У меня практически не было надежды, что это сработает для внешнего жесткого диска, но это сработало!
UTF-8

1
Почему большинство советов включает редактирование файлов или консольные операции, склонные к ошибкам, в то время как удобные инструменты, подобные этому, уже выходят!
WooYek

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.


3
Это правильно использовать в command_lineнастоящее время? У меня есть разные примеры в моем /etc/hdparm?
Димс

1
Ответ Ондры Жижки кажется более актуальным.
Рафаэль

9
  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 командную строку ядра, и скрипт не запустится.


Какие единицы измерения для этого параметра?
detly

IIRC, это секунды. Или, может быть, у этого параметра есть дикие правила, такие как «если он меньше 10, то его десятки секунд, если меньше 100, то это минуты» и тому подобное. Мне нужно найти.
Ондра Жижка

2
Это не юниты, проверьте это: wiki.archlinux.org/index.php/Hdparm
Ондра Жижка

Приветствия, по некоторым причинам я не мог найти это в man hdparm.conf.
детально

man hdparm.confкосвенно читает, что значение передается, -Sследовательно, для значений <255 должно быть совместимо с правилом в верхнем ответе . Любая дополнительная информация приветствуется.
dma_k

8

Потратив часы и часы, я обнаружил, что мой привод 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:
 Состояние диска: в режиме ожидания



5

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


hdparm может установить, но не получить -Sопцию (см. Как определить время вращения диска ). Чтобы получить его, используйте программное обеспечение GUI «Диск». Смотрите другой ответ со скриншотом.
KrisWebDev

5

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

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

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


10
Почему бы не использовать hdparm.conf?
rndrük

3

В Ubuntu 14.04

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


Как вы делаете эту работу? Я установил это, и после перезагрузки, если я вернусь, он вспомнил, что диск должен отключиться, но это никогда не происходит. hdparm -C всегда показывает, что он активен, и только запуск hdparm -S xxx из командной строки заставляет его работать.
Дэн Картер

1
Где вы найдете "Диски"?
nealmcb

1

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

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


1

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

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

Наилучшие результаты достигаются при использовании 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, поэтому я хочу ограничить количество записей), но так как это всего лишь домашний сервер, я, вероятно, не сильно упущу. Определенно не рекомендовал бы эту стратегию для производственной машины.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.