espere pelo kernel depois de criar partição com sftdisk no linux

espere pelo kernel depois de criar partição com sftdisk no linux

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 /devdiretório.

informação relacionada