Warten Sie auf den Kernel, nachdem Sie eine Partition mit SFTDisk unter Linux erstellt haben

Warten Sie auf den Kernel, nachdem Sie eine Partition mit SFTDisk unter Linux erstellt haben

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 /devVerzeichnis.

verwandte Informationen