
Ich erstelle eine Partition mit sfdisk unter Linux. Nach der Partitionserstellung möchte ich ein Dateisystem erstellen.
Dies schlägt fehl, da mkfs.ext3 die Partition nicht findet:
echo ",,L" | sfdisk $DEVICE
mkfs.ext3 $PARTITION
Aber das funktioniert:
echo ",,L" | sfdisk $DEVICE
sleep 1
mkfs.ext3 $PARTITION
Ich vermute, entweder braucht der Kernel einige Zeit, um seine internen Datenstrukturen zu aktualisieren, oder mein Skript wird erneut geplant, bevor Udev die Möglichkeit hatte, den Geräteknoten zu erstellen.
Wie warte ich genau bis der Geräteknoten erstellt ist? Bei jeder konstanten Zeit kann es sein, dass ein System unter Last diese Zeit nicht ausreicht.
Antwort1
Es gibt immer noch eine Low-Tech-Lösung, wenn Sie den Gerätenamen im Voraus kennen:
while [ ! -e /dev/whatever ] ; do
sleep .1 # you can sleep for less than a second with coreutils sleep
# optionally add a counter & timeout
done
Antwort2
Später, aber besser als nie. Der Vollständigkeit halber.
udevadm settle --timeout=15 --exit-if-exists=$PARTITION
Antwort3
Versuchen Sie es mitinotifywait
(von inotify-tools) auf dem Geräteknoten. das /dev
Verzeichnis.