लिनक्स पर sftdisk के साथ विभाजन बनाने के बाद कर्नेल की प्रतीक्षा करें


0

मैं लिनक्स के तहत sfdisk के साथ एक विभाजन बना रहा हूं। विभाजन निर्माण के बाद मैं एक फाइल सिस्टम बनाना चाहता हूं।

यह विभाजन खोजने में mkfs.ext3 के साथ विफल रहता है:

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

लेकिन यह काम करता है:

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

मुझे संदेह है, या तो कर्नेल को आंतरिक डेटा संरचनाओं को अपडेट करने में कुछ समय लगता है, या मेरी स्क्रिप्ट फिर से शेड्यूल हो जाती है, इससे पहले कि udv को डिवाइस नोड बनाने का मौका मिला था।

जब तक डिवाइस नोड नहीं बनाया जाता है, तब तक मैं वास्तव में इंतजार कैसे करूं? प्रत्येक निरंतर समय के साथ, लोड के तहत एक प्रणाली हो सकती है जहां यह समय पर्याप्त नहीं है।

जवाबों:


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

मतदान सबसे अच्छी अवधारणा नहीं है, लेकिन अभी तक किसी ने कुछ बेहतर नहीं किया है
जोहान्स

3

बाद में, लेकिन कभी नहीं से बेहतर। संपूर्णता के लिए।

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

1

डिवाइस नोडinotifywait पर (inotify-tools) का उपयोग करने का प्रयास करें /devनिर्देशिका।


inotifywait faìls जब गैर मौजूदा फ़ाइल के लिए कहा जाता है
जोहान्स

1
@johannes: जब बुलाया जाएगा तो यह काम करेगा /dev
grawity

1
क्या होगा अगर फ़ाइल inotywait शुरू होने से पहले बनाई जाए?
जोहान्स

जाँच करें कि क्या फ़ाइल if [[ -e /dev/whatever ]]; then ...; fiinotifywait को लागू करने से पहले मौजूद है ।
LawrenceC

1
क्या होगा अगर फ़ाइल inbetwen -e और inotifywait के इनवोकेशन के लिए बनाई जाती है?
जोहान्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.