Есть ли способ проверить, остановлен ли USB-накопитель? - PullRequest
1 голос
/ 23 декабря 2008

Я написал скрипт для резервного копирования HD моего сервера каждую ночь. В конце сценария я синхронизируюсь, подожду пару минут, синхронизируюсь, а затем выхожу sg_start --stop, чтобы остановить устройство. Идея состоит в том, чтобы продлить срок службы устройства, отключив HD после десяти минут инкрементного резервного копирования (настольные диски выдержат несколько тысяч циклов включения / выключения, но только несколько сотен часов непрерывной работы).

Это не всегда работает; Я часто нахожу двигатель, все еще вращающийся следующим утром. Есть ли команда оболочки, которую я могу использовать, чтобы проверить, остановился ли привод (чтобы я мог снова выполнить команду остановки [EDIT2] или написать скрипт для создания списка процессов, когда привод работает, чтобы я мог отладить этот [/ EDIT2 ])

[РЕДАКТИРОВАТЬ] Я пробовал sg_inq (как предложено на справочной странице sg_start), но эта команда всегда возвращает 0.

Я пытался hdparm , но он всегда возвращает «состояние диска: неизвестно» для USB-накопителей (подключенных через / dev / sdX), и при попытке развернуть диск я получаю «HDIO_DRIVE_CMD ( setidle1) fail: Ошибка ввода / вывода ".

sdparm , кажется, поддерживает установку таймера простоя на приводе (см. «Страница состояния режима питания»), но опция IDLE имеет значение «Сменный: n», и я не нашел опции, которая сообщает меня состояние питания привода.

[EDIT2] Примечание. Я могу остановить привод с помощью sg_start --stop с консоли. Это всегда работает; это просто не всегда остается до полуночи. Сервер находится в подвале (там, где приятно и круто), и я бы предпочел проверить, работает ли диск из теплой гостиной или нет. Если бы у меня была команда, которая сообщала мне состояние диска Я мог бы написать сценарий, чтобы предупредить меня, когда он вращается (проверять каждую минуту), а затем я мог попытаться выяснить, что может быть причиной этого.

Если это имеет значение: я использую openSUSE 11.1.

Ответы [ 5 ]

3 голосов
/ 24 декабря 2008

Когда вы говорите, что пробовали hdparm, вы не сказали , что вы пробовали. У меня есть несколько жестких дисков USB в корпусе, и некоторые команды работают для него, а другие нет, но я думаю, что все зависит от всех аспектов транспортного механизма.

  hdparm  -S 120  /dev/sda  

Должен сказать приводу самому спать после ~ 10 минут бездействия.

Полагаю, вы уже пробовали это, но это не очевидно, и запись в виде ответа может помочь будущему читателю.

Nothing accesses the drive but the backup script.

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

Распространенными виновниками являются такие инструменты, как updatedb, сканирующий все монтирования на наличие файлов, и fam или gamin, выполняющие прикольные вещи для отслеживания изменений на дисках.

Если сомневаетесь, добавьте слой уверенности, подключив устройство перед выполнением сценария и размонтировав его, когда закончите.

Видение вещей, которые могут вызвать пробуждение

 lsof +D /mountpoint

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

Вы, вероятно, также должны делать ленивую разгон ,

 umount -l /mountpoint 

так что если что-то получит доступ к нему между вами, сделавшим lsof| grep и вызовом umount, он все равно размонтирует диск и не сможет его прочитать.

HAL и друзья

Также возможно, что HAL и друзья делают пробуждения к диску, проверяющему состояние подключения / удаления. Я действительно надеюсь, что это не так, но это происходит на некоторых типах устройств. Это кажется маловероятной причиной, но я рассмотрю все возможное.

Попробуйте такие забавные вещи, как

lsof /dev/devicehere 

и

lsof /dev/devicehere1 

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

2 голосов
/ 10 сентября 2010

Вам также необходимо проверить параметры монтирования и использовать «noatime» в качестве опции монтирования, в противном случае ядро ​​все равно периодически обновляет время доступа. Так что это тоже может быть причиной вашей проблемы.

0 голосов
/ 15 января 2015

Если hdparm -C /dev/sda сказал drive state is: unknown, то это не поддерживается вашим диском, и нет способа узнать

Ваши дополнительные вопросы (уже отвеченные другими)

  • что использует диск?
    • Lsof
    • термоблок
    • триггеры
  • как заставить диск спать?
    • HDPARM
    • размонтировать
    • ваше устройство все еще можно разбудить, когда оно отключено, но, вероятно, только от того, что вы делаете (smartctl, blkid и т. Д.)

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

0 голосов
/ 04 января 2009

Вы пытались остановить привод с помощью следующей команды:

eject -t /dev/yourHD

Это хорошо работает для моих жестких дисков USB.

0 голосов
/ 23 декабря 2008

Я часто нахожу двигатель все еще вращающимся на следующее утро.

Не может ли это быть просто потому, что оно снова запускалось, например, на сервере. написал в лог файл или что то ночью? Вы можете попробовать sdparm, который может возвращать информацию о состоянии на диске. Но я думаю, что лучше установить опцию в BIOS, которая позволит вашему HD автоматически замедляться после некоторого простоя, это проще.

...