我遵循了各种教程,最终从 cron 运行 smartctl 测试。
定时任务:
0 2 2 * * /usr/sbin/smartctl --test=long /dev/sda &> /dev/null
0 2 3 * * /usr/sbin/smartctl --test=long /dev/sdb &> /dev/null
我知道漫长的测试可能需要几个小时才能完成。
然后我就可以用手跑了;一旦它开始工作,我将围绕它编写一个脚本:
smartctl -a /dev/sda
我可以查看测试是否仍在运行,但在测试完成之前不断打电话检查结果肯定不是很好。
我可以看到开机时间
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 1216 -
# 2 Short offline Completed without error 00% 511 -
# 3 Short offline Completed without error 00% 487 -
# 4 Extended offline Completed without error 00% 487 -
# 5 Short offline Completed without error 00% 464 -
# 6 Short offline Completed without error 00% 440 -
# 7 Short offline Completed without error 00% 417 -
# 8 Extended offline Completed without error 00% 394 -
# 9 Short offline Completed without error 00% 393 -
但这并没有告诉我结果是什么时候创建的。我看不到开机,短时间/长时间离线会告诉我。我想过记录开机时间,但如果系统已经重新启动,那就没有意义了。
我不认为我想做任何太奇怪的事情。毕竟,我有一组结果,但不知道他们告诉我的信息是什么时候创建的。
相信很多人都知道答案。您能给我一些有帮助的指示或线索吗?
答案1
启动 cronjob 后,您可以定期检查smartctl -c
特定字符串的输出。如果该字符串存在,那么您就知道当前正在运行测试。如果找不到该字符串,请将日期和输出写入smartctl -a
日志文件并退出循环:
while true
do
sleep 1m
if smartctl -c /dev/sda | grep "Self-test routine in progress"
then
echo "test running"
else
echo "no test running"
#write to log
date=$(date)
echo -e "\n\n\nTest completed\n\n\n$date\n\n $(smartctl -a /dev/sda)" >> logfile
#break out of while loop
break
fi
done