Linux で sftdisk を使用してパーティションを作成した後、カーネルを待機する

Linux で sftdisk を使用してパーティションを作成した後、カーネルを待機する

Linux で sfdisk を使用してパーティションを作成しています。パーティションを作成した後、ファイルシステムを作成したいと思います。

mkfs.ext3 がパーティションを見つけられないため、これは失敗します。

echo ",,L" | sfdisk $DEVICE
mkfs.ext3 $PARTITION

しかし、これは機能します:

echo ",,L" | sfdisk $DEVICE
sleep 1
mkfs.ext3 $PARTITION

カーネルが内部データ構造を更新するのには時間がかかるか、udev がデバイス ノードを作成する前にスクリプトが再度スケジュールされるのではないかと思います。

デバイス ノードが作成されるまで正確に待機するにはどうすればよいでしょうか? 一定の時間ごとに、この時間が十分でない負荷がかかっているシステムが存在する可能性があります。

答え1

デバイス名を事前に知っていれば、ローテクな解決策が常に存在します。

while [ ! -e /dev/whatever ] ; do 
  sleep .1 # you can sleep for less than a second with coreutils sleep
  # optionally add a counter & timeout
done

答え2

後になっても、やらないよりはましです。完全を期すためです。

udevadm settle --timeout=15 --exit-if-exists=$PARTITION

答え3

使ってみるinotifywait(inotify-tools から)デバイス ノード上のディレクトリ/dev

関連情報