Соответствующая часть /proc/mdstat
выглядит так, как показано ниже, где U
означает устройство, находящееся в состоянии «включено», а _
устройство, находящееся в состоянии «внизу». Когда он восстанавливается, устройства отображаются как «неработающие», поэтому мы можем подождать, пока все устройства снова не «включятся».
md0 : active raid5 sda1[0] sdd1[2] sdb1[1]
1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
Вот примерно так:
dev=md0
until grep -A1 "^$dev :" /proc/mdstat | grep -q '\[UU*\]' ; do
sleep 2
done
run some command here...
(Первый grep
ищет заданное имя устройства, а grep -A1
печатает соответствующую строку плюс еще одну после. Второй ищет строку U
между скобками.)
Конечно, это никогда не проверяет, выполнялось ли восстановление в первую очередь, нам потребуется более разумная логика для интерпретации полного вывода, поскольку количество строк вывода варьируется.
Использование awk:
awk '{sum+=$1}END{print sum/NR}' file.log
Чтобы сохранить его в переменной bash, используйте подстановку команд:
variable=$(awk '{sum+=$1}END{print sum/NR}' file.log)
Чтобы изменить точность, вы можете использоватьprintf
:
variable=$(awk '{sum+=$1}END{printf "%.1f", sum/NR}' file.log)