Назад | Перейти на главную страницу

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

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

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

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

Интервал сна называется «APM» (автоматическое управление питанием) и spindown_time. Это контролируется hdparm как это:

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

Это заставит ваш жесткий диск останавливаться на ~ 3 минуты бездействия.

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

https://launchpad.net/fatrace

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

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

Он использует linux fanotify API (подробнее) доступно начиная с ядра 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 /path/to/mount должен показать вам каждый процесс, у которого есть открытый файл по указанному пути.

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

Вот повторяющийся вопрос с полезный ответ, что предполагает auditd найти процесс плохого поведения.

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

Затем я заставляю жесткий диск спать с hdparm -Y /dev/sda. Затем подождите, пока я снова не услышу раскручивание жесткого диска. Тогда беги 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="/"
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 автоматически запустится, когда я, например, открою Диски приложение, поэтому я должен остановить его снова. Еще одним недостатком является то, что параметры SMART не отслеживаются для обоих дисков, что нехорошо, но в качестве временного решения подходит.

Также неясно, что это отчет об ошибке говорит udisks2 не выполняет опрос дисков, который теперь выполняется ядром. Но доказательства, кажется, говорят об обратном.