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

10

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

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

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

Ответы:

13

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

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

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

kolypto
источник
4

Поскольку вы работаете в 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'), но прост в установке из исходного кода.

JosephH
источник
1
Я не знаю, что вы подразумеваете под «большинством» дистрибутивов. Как обычно, Debian - последний дистрибутив, который что-то получил. У меня это было доступно на Fedora в течение довольно долгого времени ...
Майкл Хэмптон
3

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)

Maciek Sawicki
источник
Спасибо за ваш информативный ответ! Похоже, fuser только сообщает мне, какие процессы используют файл, файловую систему och socket в момент выдачи команды. Хотя это очень полезно, если процесс делает что-то быстрое, например, выводит содержимое корневого каталога устройства, я могу пропустить его, даже если у меня в цикле работает fuser. Если бы было что-то, что могло бы подождать и зарегистрировать всю активность, пока я не скажу, чтобы это прекратилось, это было бы еще более полезно в этой ситуации. Вы знаете что-нибудь?
удалено
Я думаю, hdparam - это то, что я буду использовать для настройки времени ожидания перед сном? И sg3_utils - просто мощный инструмент, но я не буду использовать его в этом случае? (Как я полагаю, мне не придется указывать вручную, когда жесткий диск должен находиться в спящем режиме после настройки с помощью hdparam?)
Удалено
3

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

скоро
источник
2

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

Тедди
источник
0

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

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

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

Тогда я заставляю HDD спать 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он автоматически запустится, когда я, например, открою приложение Disks , поэтому мне придется снова его остановить. Другим недостатком является то, что параметры SMART не контролируются для обоих дисков, что не очень хорошо, но в качестве обходного пути подходит.

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

SAAJ
источник