
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
。