A parte relevante de /proc/mdstat
é semelhante a abaixo, em que U
significa um dispositivo "up" e _
um dispositivo "down". Quando está se recuperando, os dispositivos são exibidos como "inativos", por isso podemos esperar até que todos os dispositivos estejam "ativos" novamente.
md0 : active raid5 sda1[0] sdd1[2] sdb1[1]
1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
Então, algo assim:
dev=md0
until grep -A1 "^$dev :" /proc/mdstat | grep -q '\[UU*\]' ; do
sleep 2
done
run some command here...
(O primeiro grep
procura o nome do dispositivo fornecido e grep -A1
imprime a linha correspondente mais um após. O segundo procura uma sequência de U
s entre os colchetes.)
É claro que isso nunca verifica se uma recuperação estava sendo executada. Precisamos de uma lógica mais inteligente para interpretar a saída completa, já que o número de linhas de saída varia.