在 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

相关内容