先安装smartmontools,以管理员运行,不然不能正常开启smart,可使用smtp发送邮件。
package main
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"strings"
"time"
)
func gethd() []string {
cmd := exec.Command("smartctl", "--scan")
//out, err := cmd.CombinedOutput()
out, err := cmd.Output()
//fmt.Println(string(out))
if err != nil {
fmt.Println("exec error", err)
}
stringSlice := strings.Split(string(out), "\n")
devices := []string{}
for _, v := range stringSlice {
if v != "" {
s := strings.Fields(v)
devices = append(devices, s[0])
}
}
return devices
}
func enable_smart(id string) bool {
fmt.Println(id, "enable smart")
cmd := exec.Command("smartctl", "-s", "on", id)
_, err := cmd.Output()
//fmt.Println(string(out))
if err != nil {
fmt.Println("exec smartctl -s on "+id, err)
return false
}
return true
}
func check_smart(id string) bool {
fmt.Println(id, "check smart")
cmd := exec.Command("smartctl", "-i", id)
out, err := cmd.Output()
if err != nil {
fmt.Println("exec smartctl -i "+id, err)
}
if strings.Contains(string(out), "SMART support is: Available") {
fmt.Println(id, "SMART support is: Available")
if strings.Contains(string(out), "SMART support is: Disabled") {
fmt.Println(id, "SMART support is: Disabled")
if !enable_smart(id) {
return false
}
}
return true
} else {
fmt.Println(id, "SMART support is: Unavailable")
}
return false
}
func main() {
err := ioutil.WriteFile("C:/Windows/check_smart.txt", []byte("TESTING!"), 0644)
if err != nil {
fmt.Println("请以管理员身份运行")
time.Sleep(time.Second * 3)
os.Exit(1)
}
devices := gethd()
//fmt.Println(devices)
for _, v := range devices {
if check_smart(v) {
fmt.Println(v, "check health")
cmd := exec.Command("smartctl", "-H", v)
out, err := cmd.Output()
//fmt.Println(string(out))
if err != nil {
fmt.Println("exec smartctl -H "+v, err)
}
if strings.Contains(string(out), "test result: PASSED") {
fmt.Println(v, "test result: PASSED")
} else if strings.Contains(string(out), "SMART Disabled") {
fmt.Println(v, "SMART Disabled")
} else {
fmt.Println(v, "test result: FAILED!")
}
}
fmt.Println("********************************************")
}
}
标签:none