Este é um caso de uso bastante específico que você tem com o DRBD na linha após a rede. Como não tenho muita experiência em DRBD, não tenho certeza de quão rápido ele tentará estabelecer. Talvez você consiga simplesmente detectar quando o IP está vinculado à interface, em vez de esperar até que um ping responda (o que adiciona essa latência ao mix).
Talvez algo como:
#!/bin/bash
# Fetch Interface
BONDED_INTERFACE=$(cat /proc/net/dev | grep 'bon' | awk -F: '{print $1}')
# Determine Network Status
if [ "$BONDED_INTERFACE" ]; then
BONDED_IP=$(/sbin/ifconfig ${BONDED_INTERFACE} | sed -n -e '/Bcast/p' | cut -d : -f 2 | awk '{print $1}')
while [ "${#BONDED_IP}" -le "0" ]; do
echo "No IP Present on The Interface";
BONDED_IP=$(/sbin/ifconfig ${BONDED_INTERFACE} | sed -n -e '/Bcast/p' | cut -d : -f 2 | awk '{print $1}')
done
echo "The Interface IP is: $BONDED_IP";
else
echo "No Bonded Interface Found";
fi
Suponho que, fora da depuração do script acima, faria mais sentido chamar um sono por um período de tempo, em vez de ecoá-lo.
Se isso ainda não é bem o que você quer, talvez haja algo a ser feito no NetworkManager ou talvez tentar detectar o estado do link (sentido da operadora). Espero que eu tenha ajudado.