Sonhospa Ответов: 1

Привод готов: как подготовить "спящие" диски?


Всем Привет,

В качестве части инструмента я перечисляю диски, доступные на нескольких рабочих станциях, включая ряд свойств. Поскольку в моем конкретном случае это доступ к удаленным рабочим станциям по сети, я использую WMI (ManagementObjectCollection), но мой вопрос также возник бы, если бы я использовал свойство "IsReady" объекта DriveInfo.

Чтобы избежать ошибок во время выполнения, я проверяю состояние "IsReady" каждого диска перед получением его свойств. Некоторые из жестких дисков SATA, однако, похоже, входят в своего рода "спящий" статус после некоторого времени бездействия – таким образом, возвращают "ложь" функции, несмотря на то, что они доступны и доступны. В результате свойства накопителя не отображаются в списке.

Как я могу вызвать что-то вроде "пробуждения" в своем коде? Моя единственная идея состояла бы в том, чтобы поймать ошибку, подождать несколько секунд и снова попробовать "IsReady" ... мне это просто кажется очень неуклюжим. Любой совет очень ценится!

С уважением
Мик

Что я уже пробовал:

После ручного "пробуждения" соответствующих дисков (например, путем открытия окна Проводника) "IsReady" возвращает TRUE, и – после повторного запуска инструмента-код может получить свойства диска.

Richard MacCutchan

Инструмент настройки питания в Панели управления позволяет отключить (т. е. перевести жесткий диск в спящий режим) после некоторого периода бездействия. Пользователи могут установить это значение на все, что пожелают.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

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

Попробуйте проверить технику в Выведите компьютер из режима ожидания или гибернации[^].


Sonhospa

Спасибо, Дэйв. Однако это должно быть что-то специфичное для диска, так как на одной и той же машине, например, 4 диска сообщаются истинными (IsReady), а 2 других - нет-по крайней мере, до того, как они проснутся вручную.

Dave Kreskowiak

и как вы "будите их вручную"?

Sonhospa

Например, открыв окно Проводника (список сетей -> имя сервера -> буква диска)

Dave Kreskowiak

Итак, у вас есть диски, которые переходят в спящий режим, даже когда пользователь работает в Windows? Это странно.

Sonhospa

Привет, Дэйв, извини за задержку ответа. Это может показаться странным, но все же верно - только для некоторых дисков SATA. Если пользователь обращается к конкретному жесткому диску, ему требуется несколько секунд, чтобы "проснуться" из какого-то режима ожидания, который я подозреваю. Как уже упоминалось, после пробуждения я получаю "IsReady = TRUE".

Dave Kreskowiak

Я понятия не имею, как разбудить их с помощью кода.

Sonhospa

Но все равно спасибо!

Ralf Meier

Привет,
при чтении всех ответов моя идея заключается в том, что вы сначала пытаетесь прочитать каталог (например) этого диска. Я полагаю, что Windows-проводник делает что-то вроде этого. Но, конечно, вы должны проверить на наличие exeptions, потому что вполне возможно, что вы не можете получить диск готов. Кроме того, при попытке доступа к сетевым дискам возможно, что вы получите очень длинный тайм-аут для каждого ответа (если диск не готов).
Я знаю, что это не похоже на решение проблемы ... но, возможно, идея сделать шаг вперед ...

Sonhospa

Спасибо, Ральф. Как написано в моем первом посте, у меня была та же идея, но я нашел ее немного неуклюжей ("...von hinten durch die Brust ins Auge" ;-) sozusagen). Я надеялся, что у кого-нибудь найдется более элегантное решение. Приятного вам вечера!

Dave Kreskowiak

Проблема с чтением каталога для пробуждения диска заключается в том, что если вы получаете каталог из кэша либо в NTFS, либо на диске вместо того, чтобы диск вращался для чтения его непосредственно с диска?

Ralf Meier

Привет Дэйв,
Я не понимаю, что вы имеете в виду своим комментарием - не могли бы вы объяснить это еще раз? ..

Dave Kreskowiak

Windows хранит некоторые структуры файловой системы в памяти, в кэше.

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

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

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

Ralf Meier

Я сделал это предложение, потому что несколько лет назад у меня была проблема с хранением данных из HMI-системы, которая была подключена к ПЛК (оба Siemens), к сетевому диску. Иногда сетевой диск был недоступен, но Windows этого не понимала (возможно, из-за кэшированной информации). С программированием у меня были только возможности VBA. Обычный доступ на запись к сетевому диску вызывает очень длительный тайм-аут, который не был заметен, но чтение каталога в этой среде вызывает ошибку, которая была для меня рулем внутри скрипта. Но дополнительно : я попытался прочитать каталог из определенного подкаталога, а не из корня ...

Ralf Meier

"von hinten durch die Brust ins Auge" - это фраза, которую я обычно использую - возможно ли, чтобы мы знали друг друга лично ?