Перевести жесткий диск в спящий режим и будить его только при необходимости

Вопрос или проблема

Я хочу подключить еще один жесткий диск к своему компьютеру, но хочу, чтобы он спал 99% времени. Я буду использовать его только для нескольких вещей, но мне нужно, чтобы он был смонтирован в любое время.

Для этого я хотел бы знать:

  1. Как я могу вести журнал, какие процессы обращаются к устройству? Мне нужно, чтобы журнал мог показать, из-за чего жесткий диск просыпается, если это происходит, чтобы я мог принять меры.
  2. Есть ли особые настройки ядра, которые нужно сделать, чтобы устройство могло спать дольше?
  3. Как задать интервалы сна для жесткого диска?

Интервал сна называется “APM” (Автоматическое управление питанием) и spindown_time. Это контролируется с помощью hdparm следующим образом:

hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD

Это будут заставлять ваш HDD отключаться при ~3 минутах бездействия.

Опции объяснены:
-B 50 : активировать AMP с агрессивным управлением питанием
-S 36 : спать после 36 x 5 сек бездействия

См. man hdparm для получения дополнительных деталей

У меня похожая проблема. У меня SSD, /dev/sdb, с ОС (Linux Mint 18.1 на базе Ubuntu Xenial) и HDD, /dev/sda, с данными, которые я использую время от времени. Оба диска зашифрованы. Разделы HDD не смонтированы. И всё равно через несколько минут HDD просыпается, затем засыпает, затем снова просыпается. Путаница.

Вот дублирующий вопрос с полезным ответом, который предлагает auditd для поиска процесса-нарушителя.

apt-get install auditd
auditctl -w /dev/sda -p rwa

Затем я заставляю HDD заснуть с hdparm -Y /dev/sda. Потом жду, пока не услышу, что HDD снова начинает вращаться. Затем запускаю ausearch -f /dev/sda. В моем случае он показывает такие записи.

time->Sat Feb 25 12:38:17 2017
type=PROCTITLE msg=audit(1488022697.651:1744): proctitle=2F7573722F6C69622F756469736B73322F756469736B7364002D2D6E6F2D6465627567
type=PATH msg=audit(1488022697.651:1744): item=0 name="/dev/sda" inode=376 dev=00:06 mode=060660 ouid=0 ogid=6 rdev=08:00 nametype=NORMAL
type=CWD msg=audit(1488022697.651:1744):  cwd="https://serverfault.com/"
type=SYSCALL msg=audit(1488022697.651:1744): arch=c000003e syscall=2 success=yes exit=12 a0=f3fb90 a1=800 a2=7f4745221f64 a3=30 items=1 ppid=1 pid=18520 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pool" exe="/usr/lib/udisks2/udisksd" key=(null)

Релевантная часть exe=”/usr/lib/udisks2/udisksd”. Хотя у меня также был smartmontools, чей smartd также был проблемой. Я удалил smartmontools и остановил udisk2 сервис с service udisks2 stop. После этого HDD спит, как и ожидалось.

Обратите внимание, что udisks2 автоматически запустится, если я, например, открою приложение Disks, поэтому мне придется его снова остановить. Другим недостатком является то, что параметры SMART не мониторятся для обоих дисков, что не очень хорошо, но как временное решение это подходит.

Также одна вещь, которая не ясна, это то, что этот отчет о баге говорит, что udisks2 не делает опрос дисков, что теперь делает ядро. Но доказательства, похоже, указывают на обратное.

Так как вы находитесь на Linux, вы можете использовать новую утилиту fatrace, которая ведет журнал каждого доступа к файлу и сообщает, какой процесс за это отвечает:

https://launchpad.net/fatrace

Больше информации здесь:

http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/

Она использует API linux fanotify (подробнее), доступное начиная с ядра linux 2.6.37.

fatrace не упакована во всех дистрибутивах по состоянию на июль 2014 (она недавно вошла в тестирование debian, так что должна поставляться в ‘jessie’), но ее легко установить из исходников.

http://en.wikipedia.org/wiki/Fuser_%28Unix%29 – fuser это UNIX-команда, используемая для отображения, какие процессы используют указанный файл, файловую систему или сокет.

http://sourceforge.net/projects/hdparm/ – получить/установить параметры ATA/SATA под Linux (смотрите опцию -S)

http://sg.danny.cz/sg/sg3_utils.html – Пакет sg3_utils содержит утилиты, которые отправляют SCSI команды устройствам. Как и устройства на транспорте, традиционно ассоциируемом с SCSI (ищите sg_start)

btrace или blktrace (оболочка для btrace) отслеживает блочные операции ввода-вывода в ядре и может помочь вам.

lsof +D /путь/к/монтажу должен показать вам каждый процесс, который открыл файл в указанном пути.

.

Ответ или решение

Организация режима сна жесткого диска и его пробуждение только при необходимости — задача, которую можно корректно решить с использованием нескольких технологий и утилит в Linux. В этом ответе я рассмотрю теоретические аспекты этой задачи, предложу простые примеры и поясню, как применить эти знания для достижения вашей цели.

Теория

Современные операционные системы и аппаратное обеспечение предлагают возможности управления энергопотреблением для жестких дисков, чтобы продлить срок их службы и снизить энергопотребление. В Linux такие возможности реализованы с помощью APM (Automatic Power Management) и других утилит.

  1. Логирование доступа к устройству: Чтобы узнать, какие процессы обращаются к вашему жесткому диску, можно использовать такие утилиты как auditd и fatrace. Эти инструменты позволяют отслеживать системные вызовы и доступ к файлам, предоставляя информацию о конкретных процессах, которые обращаются к диску, и причинах его пробуждения.

  2. Настройки ядра: Специальные настройки ядра могут быть необходимы для оптимального управления энергопотреблением. Часто корректировка параметров APM и создание правил с использованием udev и systemd оказывает значительное влияние на время сна устройства.

  3. Установка интервалов сна: Утилита hdparm является основным инструментом для управления энергопотреблением жесткого диска. Она позволяет установить тайминги автоматического перехода в режим сна, а также настроить агрессивность энергосбережения.

Пример

  1. Логирование с помощью auditd:

    Установите auditd и настройте его для отслеживания операций чтения, записи и доступа на устройстве:

    apt-get install auditd
    auditctl -w /dev/sda -p rwa

    После этого можно дать команду на перевод диска в режим сна:

    hdparm -Y /dev/sda

    Когда диск пробудится, используйте ausearch для анализа логов:

    ausearch -f /dev/sda

    Это позволит выявить процессы, которые активизируют диск.

  2. Использование fatrace:

    Утилита fatrace отслеживает все операции файлового доступа:

    fatrace

    Она предоставляет детальную информацию о файлах, к которым осуществляется обращение.

  3. Настройка энергосбережения через hdparm:

    Вы можете использовать hdparm для установки политики энергосбережения:

    hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD
    • -B 50 — активирует APM с агрессивными настроениями энергосбережения.
    • -S 36 — переводит устройство в режим сна после 3 минут бездействия.

Применение

Чтобы ваш жесткий диск спал 99% времени, необходимо тщательно настроить используемые механизмы и убедиться, что никакие фоновые процессы, такие как udisks2 или smartmontools, не мешают его переходу в режим сна.

Шаги по настройке можно обобщить следующим образом:

  1. Мониторинг и идентификация: Используйте auditd и fatrace для мониторинга активности на диске и выявления процессов, которые пробуждают диск без необходимости. Это поможет принять решение о том, какие службы нужно остановить или конфигурировать.

  2. Остановка ненужных служб: При необходимости остановите службы, которые нерегулярно пробуждают диск, такие как udisks2:

    service udisks2 stop
  3. Настройка времени сна: С помощью hdparm задайте оптимальные параметры энергосбережения.

  4. Проверка и оптимизация: После настройки патрулируйте систему на периодичность пробуждений, использовав указанные выше инструменты для получения обратной связи и дальнейшей оптимизации.

Эти меры в комплексе позволят вам достичь цели — минимизировать активное время простоя жесткого диска, сохраняя при этом его готовность к использованию при необходимости.

Оцените материал
Добавить комментарий

Капча загружается...