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