Как предотвратить случайное вращение Windows (зеленого) жесткого диска USB?

1706
willy

Даже если функция энергосбережения в Windows настроена так, чтобы никогда не выключать мой жесткий диск, мои внешние жесткие диски USB будут автоматически отключаться после некоторого периода бездействия. Проблема в том, что они будут вращаться в случайном порядке во время простоя компьютера или во время просмотра фильма / прослушивания музыки; это действительно очень раздражает (не только из-за шума, который он издает, но и потому, что он без нужды напрягает диск каждый раз, когда делает это, что более десятка раз в день, и это меня беспокоит). Я натолкнулся на старую бесплатную утилиту, которую можно использовать для очень эффективного решения этой проблемы с дисками SATA / eSATA. Это называется revoSleep . В документации этой утилиты рассказывается, как перевести диск в автономный режим, раскрутить его, а затем отключить драйвер устройства.

Это вдохновило меня на поиск аналогичного решения для USB-накопителей, но до сих пор я не смог найти программную утилиту, которая бы работала без проблем. Используя diskpart, я могу отключить USB-диск. Затем, используя бесплатную утилиту HDDScan для Windows (похожую на «hdparm»), я могу раскрутить диск и даже сделать это из пакетного файла. Ницца.

Последний шаг - отключение драйвера устройства на диске из одного пакетного файла вместо использования диспетчера устройств. Используя другую бесплатную утилиту под названием DevCon, я быстро смог определить правильный драйвер устройства. Оказывается, старая версия DevCon (с 2003 года) не может отключить драйверы устройств в Windows 7 или 8. Поэтому я в итоге скачал комплект разработки драйверов (DDK) 7.1.0 из центра загрузки Microsoft, чтобы получить работающую версию. Как только это было решено, наконец, я смог отключить драйвер устройства моего жесткого диска USB. Теперь вот мой вопрос. Ват лучший, самый надежный способ автоматизировать эти шаги в пакетном файле (или в сценарии WSH или в любом другом месте), чтобы пакетный файл / сценарий случайно не выбрал неправильный диск для какой-либо из команд, которые он будет выполнять?

Кстати, я наткнулся на этот пост, но в примере кода используются только первые 11 символов метки тома, чтобы найти номер раздела. Вместо этого я хочу, чтобы он использовал (если это возможно) уникальный серийный номер жесткого диска, чтобы найти номер диска, чтобы иметь возможность перевести правильный диск в автономный режим.

1
Разве вы не должны пытаться выяснить, * почему * диск вращается случайным образом? Что-то (служба и т. Д.) Должно вызывать это - может быть, вы можете заняться этим у источника вместо того, чтобы прыгать через обручи. Karan 11 лет назад 2
Используя Process Monitor Sysintenal, я вижу, что процесс, который его вызывает, обычно это Svchost или что-то в этом роде; это никогда не процесс, который я могу легко связать с чем-то другим, кроме самой ОС. willy 11 лет назад 0

2 ответа на вопрос

0
David Ruhmann

This may help.

If you know the serial number of the HDD you can use the batch script below to get the drive letter. From there you could use the drive letter to discover the volume or disk number using diskpart.

@echo off setlocal EnableDelayedExpansion set "xDrive=" rem Loop through all of the drives to find the external HDD for %%D in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( for /f "tokens=5" %%S in ('vol %%~D:') do set "xSerial=%%S" if "%xSerial%"=="ABCD-1234" ( set "xDrive=%%~D:" ) ) echo Drive Found = %xDrive% endlocal pause 
Спасибо, но я обнаружил, что серийный номер жесткого диска не обязательно уникален и что, хотя коллизии, вероятно, случаются редко, есть лучший способ найти правильный номер диска. willy 11 лет назад 0
Предполагая, что $ diid является строкой, которая содержит идентификатор экземпляра устройства жесткого диска, $ Диски = gwmi win32_diskdrive | ? pnpdeviceid -eq $ diid $ c = @ ($ дисков) .count if ($ c -eq 1) {$ diskid = $ disks.index $ dpscript = @ "sel disk $ diskid офлайн-выход с диска" @ $ dpscript | diskpart} else willy 11 лет назад 0
0
willy

I was able to write a PowerShell 3.0 script to bring my external USB HDD offline using Diskpart, then spin it down using HDDScan for Windows, and then finally disable its device driver using DevCon. However, the HDD spins back up after some minutes and immediately spins down again after that. I verified that this symptom occurs only once after my script was run. I will post a new question re this problem.