2009-05-13 9 views
6

Ho molte unità disco rigido nel mio computer (7).In base al codice, come è possibile inviare un'unità disco fisso per sospendere

Quando non vengono utilizzati, l'opzione di alimentazione li manda a dormire dopo un po '. Ma perché tutto fa molto rumore vorrei mandarli a dormire quando voglio, non solo dopo il timeout di sistema predefinito.

Su Windows (XP e su), preferibilmente in C#,

Come posso inviare un disco a dormire per codice?

Grazie mille in anticipo per il vostro aiuto ...

+0

Si potrebbe semplicemente ottenere alcuni SSD. :) – BobbyShaftoe

+0

WD Caviar Green è un'alternativa valida e molto più economica all'SSD. Molto bello e silenzioso. – Michael

+0

Sono sicuro che c'è un modo per farlo, potrebbero essere necessari anni per ottenere una risposta da qualcuno che lo conosce abbastanza bene. – thomasrutter

risposta

0

Onestamente non credo sia possibile farlo usando solo C# (vale a dire il framework .NET).

In ogni caso, vorrei iniziare imparando a conoscere WMI e ACPI.

Questo tende ad essere il tipo di cosa che richiede di approfondire un linguaggio di livello inferiore (almeno per capire le chiamate API da utilizzare con P \ Invoke) perché di solito implica l'interazione da vicino con il sistema operativo o possibilmente direttamente con un autista.

Forse si potrebbe iniziare indagando sul Windows Power Management Functions anche se non penso che consenta il controllo dei singoli dischi rigidi.

+2

Anche se potrebbe non esserci un modo nativo C# per farlo, c'è un'alta probabilità che possa essere controllato da C# tramite PInvoke o COM Interop. –

+0

Sì, ho apportato una correzione. Quello che volevo dire è che è probabile che dovrai cercare una soluzione in C++ nativo e quindi portare l'implementazione in C# usando P \ Invoke. –

+0

l'ultima volta che ho controllato setpowerstate con wmi ha detto che non è implementato. inoltre, hai ragione, sembra che non possa controllare i singoli azionamenti con le funzioni di gestione della potenza. o almeno non so come farlo. Infine, sto prendendo una soluzione in qualsiasi lingua se non ho la scelta ... – Jonx

1

Non conosco l'API per farlo direttamente ma ci sono strumenti che possono farlo. Uno che ho visto è Hard Disk Sleeper. Non l'ho usato sulle mie macchine, quindi non posso parlare della sua qualità o efficacia.

+0

lo strumento risale agli anni 99 e sembra che sia uno shareware (leggi, non può essere più utilizzato) ma grazie I preferisce il codice ... – Jonx

+0

Sembra anche limitato alle unità IDE/EIDE. –

+0

Forse ho un suggerimento qui: http://smartmontools.sourceforge.net/ http://hdparm-win32.dyndns.org/hdparm/ sfortunatamente, sono bloccato come sembra che i miei dischi possano ' t utilizzare quella roba come se fossero RAID e necessita di dischi smart/ata/sata o di un trattamento RAID specifico. – Jonx

1

È possibile eseguire questa operazione se si inviano comandi ATA direttamente a un'unità utilizzando IOCTL_ATA_PASS_THROUGH. Dovrai passare il comando SLEEP.

Non penso che questo sia un progetto per C#.

+0

qualche esempio su come utilizzare questo? in qualsiasi lingua;) la pagina msdn non aiuta molto ... deve essere usata nei driver o può essere usata nei programmi in modalità utente? – Jonx

1

AFAIK, questo è un comando ATA che imposta il tempo di rotazione in giù8, il che significa che è l'unità stessa che si spegne. Potresti usare IOCTL_ATA_PASS_THROUGH per inviare comandi direttamente sull'unità - ma temo che non potresti fare di meglio che impostarlo su un valore minimo (che non so cosa sia, ma dovrebbe essere nelle specifiche ATA).

Edit: Sembra che il venerabile hdparm supports it, quindi deve essere nelle specifiche ATA:

-y forzare un disco IDE per entrare immediatamente in modalità standby a basso consumo energetico, di solito inducendolo a girare verso il basso .

-Y Forza un'unità IDE per immettere immediatamente la modalità di risparmio energetico più bassa, provocando l'arresto completo. È necessario eseguire un reset hard o soft prima di poter accedere nuovamente al drive (il driver IDE di Linux gestirà automaticamente il reset se e quando necessario).

Dal hdparm (e il kernel Linux sottostante che utilizza per comunicare con l'unità) è GPL - si dovrebbe essere in grado di presepe le specifiche da lì se non si dispone di una specifica ATA a portata di mano.

Oppure utilizzare solo il win32 port.

+0

Ciò significa anche che funzionerà solo con dischi ata/sata e simili? Grazie per l'avviso che il disco si spegne da solo e che è possibile solo impostare il tempo di inattività ... – Jonx

+0

Sì, è solo per le unità ATA. Se hai SCSI, penso che avresti bisogno di inviare un comando di arresto unità SCSI. Linux ha scsi-tools e scsi-idle per questo. –

Problemi correlati