Hallo zusammen,
habe derzeit mehrere Platten im Rechner. Jetzt hätte ich gerne gewusst, welche Platten gerade im Standby sind oder sich drehen. Bei der (Status-)Abfrage sollen die Platten natürlich nicht aus dem Schlaf geweckt werden
Habe im Netz noch nichts gefunden. Hat jemand einen Tipp, wie ich das möglicherweise per PHP abfragen kann?
hab’s grad ausprobiert auf meinem Server WHS 2011.
Funktioniert
mit hdparm -y /dev/hda lässt sich die Festplatte in den Standby schicken.
mit hdparm -C /dev/hda kann man den status abfragen.
Also für Dich:
HDParm installieren
mit Exec aus php aufrufen und ergebnis entsprechend auswerten.
Hier mal kurz ein Script, kann man per Timer alle paar Minuten laufen lassen, oder man führt es manuell aus.
Festplattenstatus kann man optional in eine Variable schreiben.
<?
/* Script Info:
Dieses script prüft mittels hdparm für Windows den Zustand der Festplatten
Anpassungen zb. um diese in den Standby zu schicken sind natürlcih auch
möglich.
*/
/* ++++++++++ CONFIG ++++++++++++++++++++++++*/
$disks[] ="/dev/hda";
$disks[] ="/dev/hdb";
$disks[] ="/dev/hdc";
$disks[] ="/dev/hdd";
$command = "hdparm -C <disk>";
// Please install hdparm for windows first!
// http://hdparm-win32.dyndns.org/hdparm/
// Create variables for diks status
$c_diskvar = true; // false if not
/* ++++++++++ END CONFIG ++++++++++++++++++++++++*/
echo "Prüfe Laufwerksstatus:
";
foreach ($disks as $disk){
$e_cmd = str_replace("<disk>",$disk,$command);
unset($output);
exec($e_cmd,$output);
if(strpos(implode($output, " "),"standby")>0){
$status = "Standby";
$status_b = false;
} else {
$status = "Aktiv";
$status_b = true;
}
echo "Laufwerk $disk Status: $status
";
if ($c_diskvar){
setValue(CreateVariableByName($_IPS['SELF'],$disk,0,"~Switch"),$status_b);
}
}
function CreateVariableByName($id, $name, $type, $profile = "")
{
# type: 0=boolean, 1 = integer, 2 = float, 3 = string;
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>
probier mal eine Platte direkt in den Standby -y zu schicken.
oder auch einen Timeout zu setzen -S 241 (30min)
Ein Problem von windows bzw. derm Server ist, dass fast immer irgenwelche Disk-Activitiies laufen.
Vom Indexer, über die Rückmeldung and Microsoft über Benutzerzufriedenheit etc.
Einiges kann man deaktivieren - manuell.
Aber erstmal muss man rausfinden was so läuft: hier hilft das ProcMON Tool von Mircosoft.
Man kann hier filter setzen zb. D:\ E:\ etc.
Hi,
nachdem ich nun die Daten gesichert und die neue Firmware der Samsung aufgespielt habe, habe ich getestet…
Leider sind bei mir die „schlafenden“ Platten nach der Abfrage des Status wieder angelaufen. Das wollte ich natürlich nicht.
Ist das ein Fehler meinerseits, eine Einstellungssache oder ist das so?
Ich weiss nicht, ob das eine Windows-Eigenart ist, aber normal sollten die nicht anlaufen, da ja die Abfrage an den Plattenkontroller geht und nicht an die „Mechanik“.
Unter Linux geht das problemlos:
root@SERVER:~# hdparm -C /dev/sdb
/dev/sdb:
drive state is: standby
Ändert man allerdings z.b. den Timer, so läuft die Platte auch an.