Can we do something like this in a script (preferably zsh):
smartctl -t long /dev/sda
smartctl -t long /dev/sdb
smartctl -t long /dev/sdc
[Wait however long smartctl needs]
smartctl -H /dev/sda
smartctl -H /dev/sdb
smartctl -H /dev/sdc
분명히 나는 이것을 자동화하고 싶습니다.
답변1
두 가지 가능성이 있습니다. smartctl -c
다음을 포함하여 장치의 기능이 나열됩니다.
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 48) minutes.
그러니 이 글을 읽고 필요한 만큼 짧게 또는 길게 잠을 자면 됩니다.
둘째, 테스트가 진행되는 동안 동일한 -c
옵션을 사용하면 모든 테스트의 현재 상태가 나열됩니다. 예를 들면 다음과 같습니다.
Offline data collection status: (0x03) Offline data collection activity
is in progress.
Self-test execution status: ( 247) Self-test routine in progress...
70% of test remaining.
Total time to complete Offline
data collection: ( 44) seconds.
따라서 몇 분마다 폴링하고 남은 시간이 0으로 돌아가고 다른 필드에 최종 값이 있을 때까지 기다릴 수 있습니다.
Offline data collection status: (0x02) Offline data collection activity
was completed without error.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
답변2
예쁘지는 않지만 작동하는 것 같습니다. 원하는 수의 디스크를 처리하도록 쉽게 수정할 수 있습니다. 개조를 환영합니다.
#!/usr/bin/zsh
#set -x
outputmsg () { echo -e "\e[35;1m$@\e[0m"; }
infomsg () { echo -e "\e[36;1m$@\e[0m"; }
smartctl -X /dev/sda &> /dev/null
wait_time_greatest=$( smartctl -t short /dev/sda | grep 'Please wait' | sed 's,^\(Please wait \)\([[:digit:]]*\)\(.*\),\2,' )
smartctl -X /dev/sdb &> /dev/null
wait_time_new=$( smartctl -t short /dev/sdb | grep 'Please wait' | sed 's,^\(Please wait \)\([[:digit:]]*\)\(.*\),\2,' )
[ "$wait_time_new" -gt "$wait_time_greatest" ] && wait_time_greatest="$wait_time_new"
wait_time_greatest=$((wait_time_greatest + 1)) #To be safe?
infomsg "\nWe'll be done in $wait_time_greatest minutes ...\n"
sleep "$[wait_time_greatest]m"
outputmsg "Disk sda:" # Strange that the report doesn't contain the disk ID.
echo -e \e[0m # Must reset the color!
smartctl -H /dev/sda
outputmsg "Disk sdb:"
echo -e \e[0m # Must reset the color!
smartctl -H /dev/sdb
# Because smartctl seems to screw this up and it needs to be redone:
hdparm -S60y /dev/sda
hdparm -S60y /dev/sdb