2011-08-23 18 views
6

मैं अपने उबंटू 10.04 एलटीएस x64 सर्वर पर यूएसबी ड्राइव कनेक्शन और डिस्कनेक्शन का पता लगाने के लिए udev का उपयोग कर रहा हूं। जब मशीन चल रही है, तो USB डिवाइस कनेक्ट होने पर सब कुछ ठीक काम करता है, लेकिन अगर कोई बूट समय पर पहले से मौजूद है, तो मेरी स्क्रिप्ट पूरी नहीं होती है, जाहिर है क्योंकि mkdir /tmp/blah काम नहीं करता है।udev: बूट समय पर कनेक्ट डिवाइस

यदि मैं बाद में टर्मिनल पर sudo udevadm trigger टाइप करता हूं, तो सबकुछ ठीक है।

मुझे लगता है कि इस बिंदु पर कि udev पहले अपने नियमों के खिलाफ जुड़े उपकरणों का मूल्यांकन करता है, रूट फाइल सिस्टम को आरोहित नहीं किया गया है।

मेरे सवालों का इसलिए कर रहे हैं:

  1. मैं सही ढंग से समस्या की पहचान है?
  2. क्या इसे हल करने का कोई मानक तरीका है - यानी /tmp/ में कोई बदलाव है कि मैं से पहले और बाद में दोनों का उपयोग कर सकता हूं?
+0

http://unix.stackexchange.com/ –

+0

के लिए उत्कृष्ट प्रश्न आप सही हो सकते हैं ... या सर्वरफॉल्ट। मैं एक बैश स्क्रिप्ट लिख रहा हूं हालांकि: मेरा सिर प्रोग्रामिंग मोड में है इसलिए मैं यहां आया था, शायद इसे पूरी तरह से सोचने के बिना! –

उत्तर

5

रूट फाइल सिस्टम आरोहित है, लेकिन उस समय केवल पढ़ने के लिए है। /dev/shm (एक इन-मेमोरी फाइल सिस्टम) उपलब्ध होना चाहिए; नए लिनक्स वितरण में /run रैमडिस्क भी हो सकता है। आप कहीं भी एक स्थायी निर्देशिका भी चुन सकते हैं, अपनी स्क्रिप्ट में एक tmpfs पर माउंट कर सकते हैं, और वहां अपना काम कर सकते हैं।

+0

'/ tmp /' से '/ dev/shm /' से प्रसंस्करण को हल करना समस्या हल करता है - आपकी सहायता के लिए बहुत बहुत धन्यवाद। संभवतः यह फ़ाइल सिस्टम लगातार है जबकि मशीन चालू है? –

+0

हां, लेकिन यह एक इन-मेमोरी फाइल सिस्टम है, इसलिए वहां बहुत अधिक जगह का उपयोग न करें। रूट फाइल सिस्टम में – bdonlan

1

1- मुझे नहीं पता, यहां तक ​​कि initramfs में, रूट फाइल सिस्टम को घुमाने से पहले, एक लिखने योग्य/tmp निर्देशिका है।

सच है, जब असली जड़ को घुमाया जाता है तो यह/tmp को त्याग दिया जाएगा और अंतिम/tmp खाली हो जाएगा। क्या आप वाकई mkdir /tmp/blah कमांड विफल कर रहे हैं? या आप मानते हैं कि जब आप इसकी तलाश करते हैं तो ऐसा नहीं होता है?

2- उबंटू में (मैं अन्य distros की पता नहीं है) आप की जरूरत है इस तरह के लिए /dev/.initramfs में एक छिपा निर्देशिका है। चूंकि /dev अंतिम रूट फाइल सिस्टम में संरक्षित एक tmpfs (या devtmpfs) माउंटपॉइंट है, तब भी आपके पास यह होगा।

+0

udev नियम रूट फाइल सिस्टम के '/ tmp' के साथ चलाए जाएंगे; यह रूट फाइल सिस्टम रीड-राइट को रीमाउंट करने से पहले हो सकता है। – bdonlan

+0

आप सही हैं - मैंने 'mkdir' कमांड विफल नहीं देखा है (वर्तमान में इसका आउटपुट लॉग नहीं है), लेकिन अगला कमांड (' माउंट') विफल रहता है, यह रिपोर्ट करते हुए कि निर्देशिका 'mkdir' को बनाना है, –

+0

@bdonlan मौजूद नहीं है, यह केवल पढ़ने के लिए हो सकता है। इस मामले में, tmpfs के रूप में/tmp को कॉन्फ़िगर करना चाल करना चाहिए। /dev/.initramfs चाल भी मान्य होना चाहिए। – rodrigo

2

इस समस्या का एक समाधान एक स्क्रिप्ट लिखना है जिसे आपके यूदेवी नियमों द्वारा तुरंत बुलाया जाता है जो तुरंत अलग हो जाता है, और यह सुनिश्चित करने के लिए कुछ घटना होने की प्रतीक्षा करता है कि सिस्टम माउंट पॉइंट बनाने के लिए "पर्याप्त बूट हो गया है" इत्यादि। उपकरण। जिस व्यक्ति ने निम्नलिखित पोस्ट का उत्तर दिया (http://superuser.com/questions/53978/ubuntu-automatically-mount-external-drives-to-media-label-on-boot-without-au) ने एक स्क्रिप्ट लिखी जो जांचता है कि क्या जारी रखने से पहले "httpd" चल रहा है। मुझे यकीन है कि ऐसा करने के लिए शायद अन्य "बेहतर" तरीके भी हैं।

संबंधित मुद्दे