2013-04-03 22:42:15 +00:00
|
|
|
#!/mod/bin/jimsh
|
|
|
|
|
|
|
|
source /mod/webif/lib/setup
|
|
|
|
require system.class settings.class
|
|
|
|
|
|
|
|
if {[system model] eq "HD"} exit
|
|
|
|
|
|
|
|
set disk [system disk]
|
|
|
|
set settings [settings]
|
|
|
|
|
|
|
|
# Extract overall SMART status.
|
|
|
|
set smart ""
|
|
|
|
set line ""
|
|
|
|
# smartctl uses non-zero exit status to indicate health hence catch.
|
|
|
|
catch { set line [exec /mod/bin/smartctl -H $disk | sed -n 5p] } msg
|
|
|
|
if {$msg ne "" && $line eq ""} { set line $msg }
|
|
|
|
if {$line ne ""} {
|
|
|
|
set smart [string range [lindex [split $line :] 1] 1 end]
|
|
|
|
$settings _tval_setting "SMART_status" $smart
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach line [split [exec /mod/bin/smartctl -A -f brief $disk] "\n"] {
|
|
|
|
regsub -all -- {[[:space:]]+} $line " " line
|
|
|
|
regsub -all -- {^[[:space:]]+} $line "" line
|
|
|
|
lassign [split $line] id name flags val worst thresh when rval
|
|
|
|
if {![string is integer $id]} continue
|
|
|
|
set attrs($id) $rval
|
|
|
|
}
|
|
|
|
|
|
|
|
#puts "Attrs: ($attrs)"
|
|
|
|
puts "SMART: ($smart)"
|
|
|
|
|
2013-04-10 21:49:11 +00:00
|
|
|
foreach a {
|
|
|
|
{5 "realloc"}
|
|
|
|
{10 "spinretry"}
|
|
|
|
{197 "pending"}
|
|
|
|
{198 "offline"}
|
|
|
|
} {
|
|
|
|
lassign $a id attr
|
|
|
|
if {![dict exists $attrs $id]} continue
|
|
|
|
puts "$attr: $attrs($id)"
|
|
|
|
$settings _nval_setting "SMART_$attr" $attrs($id)
|
|
|
|
if {$attrs($id) < [$settings _nval_setting "SMART_ack_$attr"]} {
|
|
|
|
$settings _nval_setting "SMART_ack_$attr" $attrs($id)
|
2013-04-03 23:50:25 +00:00
|
|
|
}
|
2013-04-03 22:42:15 +00:00
|
|
|
}
|
|
|
|
|