John R Bartow
jbartow at winhaven.net
Fri Nov 21 12:24:03 CST 2014
Hi Gustav, http://www.smartmontools.org may be what you're looking for. You should be able to find smartctl here, which is scriptable. Here's a script I use with my RMS but it should run once manually: 'Begin script 'Original script by Ivan Kelleher @ Etelligence, Mar 2013 'an argument should to be passed for the script to run 'to identify attached devices and parameters run the command: smartctl --scan 'Pass the relevent argument to the script, e.g. C: or /dev/sda 'Pass Disabled to bypass the check, pass 2nd argument as optional reason, e.g. Disabled Incompatible ' 'Changes from previous '1. Added "-t force" to test command line. Is -X depreciated? ' 'Notes: '1. Only ATA devices are supported. 'Parameters strFileURL = "http://www.winhaven.net/cloud/utilities/smartctl.exe" exefile = "smartctl.exe" extraparam = " " 'Download 'Set Objects Set objFSO = CreateObject("Scripting.FileSystemObject") 'Does application already Exist? If not objFSO.Fileexists(exefile) Then 'Download application Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.open "GET", strFileURL, false objXMLHTTP.send() If objXMLHTTP.Status = 200 Then Set objADOStream = CreateObject("ADODB.Stream") objADOStream.Open objADOStream.Type = 1 'adTypeBinary objADOStream.Write objXMLHTTP.ResponseBody objADOStream.Position = 0 Set objFSO = Createobject("Scripting.FileSystemObject") If objFSO.Fileexists(exefile) Then objFSO.DeleteFile exefile Set objFSO = Nothing objADOStream.SaveToFile exefile objADOStream.Close Set objADOStream = Nothing End if End if 'Check for empty argument if WScript.Arguments.Count = 0 then WScript.Echo "ERROR No parameters given. Output from device scan:" Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec(exefile & " --scan-open") 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop 'We scan and display the command output flow Do While oExec.StdOut.AtEndOfStream <> True Wscript.Echo oExec.StdOut.ReadLine Loop WScript.Quit 2 else inputarg = Wscript.Arguments.Item(0) end if If Wscript.Arguments.Item(0) = "Disabled" then if not Wscript.Arguments.Item(1) = "" then WScript.Echo "Disabled: " & Wscript.Arguments.Item(1) else WScript.Echo "Disabled" end if WScript.Quit End if 'Stop any test running Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec(exefile & " -X " & extraparam & inputarg) 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop 'Try alternative If not oExec.ExitCode = 0 then extraparam = " -d sat,16 " Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec(exefile & " -X " & extraparam & inputarg) 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop If not oExec.ExitCode = 0 then WScript.Echo exefile & " finished with errors. Exit code 1:" & oExec.ExitCode WScript.Quit oExec.ExitCode End If End If 'Turn on SMART and start short self-test Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec(exefile & " -s on -t short -t force " & extraparam & inputarg) 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop 'Try alternative If not oExec.ExitCode = 0 then extraparam = " -d sat,16 " Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec(exefile & " -s on -t short -t force " & extraparam & inputarg) 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop If not oExec.ExitCode = 0 then WScript.Echo exefile & " finished with errors. Exit code 2:" & oExec.ExitCode WScript.Quit oExec.ExitCode End If End If 'Test for failing attributes Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec(exefile & " -q errorsonly -A -f brief -l selftest " & extraparam & inputarg) 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop AttributeResult = 0 'We scan and display the command output flow Do While oExec.StdOut.AtEndOfStream <> True strTemp = oExec.StdOut.ReadLine If InStr(strtemp, " ") > 0 Then AttributeResult = AttributeResult + 1 If not InStr(strtemp, "ID#") > 0 Then Wscript.Echo strtemp End If 'Ignore Past errors in Airflow_Temperature_Cel If InStr(strtemp, "Airflow_Temperature_Cel") > 0 Then If InStr(strtemp, "Past") > 0 Then AttributeResult = AttributeResult - 2 End If End If End If Loop Wscript.Echo strtemp If not oExec.ExitCode = 0 then WScript.Echo exefile & " finished with errors. Exit code 3:" & oExec.ExitCode WScript.Quit oExec.ExitCode End If 'Test SMART Set WshShell = WScript.CreateObject("WScript.Shell") commandline = exefile & " -H " & extraparam & inputarg Set oExec = WshShell.Exec(commandline) 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop 'We scan and display the command output flow Do strTemp = oExec.StdOut.ReadLine If InStr(strtemp, "PASSED") > 0 Then Wscript.Echo "SMART test on device " & inputarg & " PASSED" WScript.Quit AttributeResult ElseIf InStr(strtemp, "FAILED") > 0 Then Wscript.Echo "SMART test on device " & inputarg & " FAILED" WScript.Quit 1 End If Loop While Not oExec.StdOut.AtEndOfStream If not oExec.ExitCode = 0 then WScript.Echo exefile & " finished with errors. Exit code 4:" & oExec.ExitCode WScript.Quit oExec.ExitCode End If WScript.Quit 1 'End of Script Regards, John B -----Original Message----- From: dba-tech-bounces at databaseadvisors.com [mailto:dba-tech-bounces at databaseadvisors.com] On Behalf Of Gustav Brock Sent: Tuesday, November 18, 2014 4:28 AM To: Discussion of Hardware and Software issues Subject: [dba-Tech] S.M.A.R.T. monitoring Hi all I'm looking for a utility that can run as a Windows service and monitor harddisks' S.M.A.R.T. log. Any recommendations? /gustav _______________________________________________ dba-Tech mailing list dba-Tech at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-tech Website: http://www.databaseadvisors.com