我正在 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
。