
Estoy creando una partición con sfdisk en Linux. Después de la creación de la partición, quiero crear un sistema de archivos.
Esto falla porque mkfs.ext3 no encuentra la partición:
echo ",,L" | sfdisk $DEVICE
mkfs.ext3 $PARTITION
Pero esto funciona:
echo ",,L" | sfdisk $DEVICE
sleep 1
mkfs.ext3 $PARTITION
Sospecho que el kernel tarda algún tiempo en actualizar sus estructuras de datos internas o que mi script se programa nuevamente antes de que udev tuviera la oportunidad de crear el nodo del dispositivo.
¿Cómo espero exactamente hasta que se cree el nodo del dispositivo? Con cada tiempo constante, puede haber un sistema bajo carga donde este tiempo no sea suficiente.
Respuesta1
Siempre existe la solución de baja tecnología, si conoce de antemano el nombre del 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
Respuesta2
Más tarde, pero mejor que nunca. Por completitud.
udevadm settle --timeout=15 --exit-if-exists=$PARTITION
Respuesta3
Intenta usarinotifywait
(de inotify-tools) en el nodo del dispositivo. El /dev
directorio.