
Estou criando uma partição com sfdisk no Linux. Após a criação da partição, quero criar um sistema de arquivos.
Isso falha porque mkfs.ext3 não encontra a partição:
echo ",,L" | sfdisk $DEVICE
mkfs.ext3 $PARTITION
Mas isso funciona:
echo ",,L" | sfdisk $DEVICE
sleep 1
mkfs.ext3 $PARTITION
Eu suspeito que o kernel leva algum tempo para atualizar suas estruturas de dados internas ou meu script é agendado novamente, antes que o udev tenha a chance de criar o nó do dispositivo.
Como espero exatamente até que o nó do dispositivo seja criado? A cada tempo constante, pode haver um sistema sob carga onde este tempo não é suficiente.
Responder1
Sempre existe a solução de baixa tecnologia, se você souber antecipadamente o nome do dispositivo:
while [ ! -e /dev/whatever ] ; do
sleep .1 # you can sleep for less than a second with coreutils sleep
# optionally add a counter & timeout
done
Responder2
Mais tarde, mas melhor do que nunca. Para completar.
udevadm settle --timeout=15 --exit-if-exists=$PARTITION
Responder3
Tente usarinotifywait
(de inotify-tools) no nó do dispositivo. o /dev
diretório.