शटडाउन पर सीडी निकालें


12

ठीक है, इसलिए मुझे एक साधारण समस्या है: मेरे पास एक लाइव सीडी है, और मैं चाहता हूं कि जब कंप्यूटर रिबूट या रुका हो तो सीडी को बाहर निकाल दें।

निष्पादन /usr/bin/eject -mसीडी को ठीक नहीं करता है ... मुसीबत है, जैसा कि आप उम्मीद कर सकते हैं, यह तब ओएस को क्रैश कर देता है क्योंकि यह अब किसी भी फाइल को नहीं पढ़ सकता है। तो रिबूट कभी नहीं होता है, क्योंकि /sbin/rebootदुर्गम है। (मैंने reboot --help > /dev/nullरिबूट से ठीक पहले निष्पादित करने की कोशिश की , लेकिन अभी भी अन्य फाइलें हैं जिन्हें अभी भी पढ़ा नहीं जा सकता है ...)

सारांश में, ऐसा प्रतीत होता है कि मुझे बेदखल करना बहुत ही अंतिम बात है। तो ऐसा लगता है कि systemdयह पिल्ला है जिसके साथ मुझे खेलने की ज़रूरत है ... लेकिन मैंने अपने जीवन के घंटों को व्यर्थ कर दिया है और इसे ठेस पहुंचा रहा है, और मैं जो भी करता हूं, वह कभी भी, किसी भी परिस्थिति में, वास्तव में सीडी को खारिज नहीं करता है। और मुझे पता नहीं क्यों। मैंने एक दर्जन अलग-अलग तरीकों से आह्वान करने की कोशिश की है eject, लेकिन कभी कुछ नहीं होता है।

क्या कोई मुझे चलाने का सबसे सरल तरीका बता सकता है eject? (मुझे लगता है कि बस umount.targetसमझदार होगा ...)


मुझे लगता है कि आपके पास कंप्यूटर पर एक और ओएस है या आप रिबूट पर सीडी को क्यों बाहर निकालना चाहेंगे? यदि यह कारण है, तो आप शायद बेहतर कर सकते हैं यदि आप एक बूट मेनू सेट करते हैं, जहां आप यह चुन सकते हैं कि सीडी से बूट करना है या डिस्क से।
इमानुएल बर्ग

आपके द्वारा सीडी के बाद, आप अभी भी अपने initramfs की सामग्री के साथ नहीं बचे हैं? अगर वहाँ है eject, तो आप ठीक हो जाएगा?
उलरिच श्वार्ज

रुको। अजीब है कि। लिनक्स टकसाल, और मुझे लगता है कि उबंटू डिफ़ॉल्ट रूप से ऐसा करता है।
23

जवाबों:


4

आखिरकार मेरे सहयोगी को निम्नलिखित लेख मिला:

http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html

सारांश में, मैंने एक फ़ाइल बनाई है /lib/systemd/system/eject.serviceजिसमें नाम शामिल है

[Unit]
Description=Eject the DVD
Before=final.target
After=shutdown.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/usr/bin/eject -m
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit

[Install]
WantedBy=shutdown.target

मैं भी चलाने के लिए किया था systemctl enable eject.serviceयह वास्तव में बनाने के लिए करते हैं कुछ भी। लेकिन अब systemdशटडाउन से ठीक पहले सीडी को खारिज कर दिया, जैसा मैं चाहता था।

... दुर्भाग्य से ओएस अभी भी segfaults है जब यह सीडी के साथ शेष फ़ाइलों को नहीं निकाल पाया। मैंने उपरोक्त फ़ाइल को समायोजित करने की कोशिश की है After=unmount.target, इसलिए हमारे पास है , जो आपको लगता है कि स्क्रिप्ट को चलाने के बाद फाइल सिस्टम अनमाउंट हो जाएगा। लेकिन नहीं, अभी भी यह segfaults है।

ऐसा लगता है कि मुझे पता लगाना है कि कैसे लाइव सीडी की छवि को रैम में कॉपी किया जाए - लेकिन यह एक संपूर्ण प्रश्न है ...


1

अनुवर्ती आपकी मदद कर सकता है:

  • /Etc/init.d/halt.local पर अपनी इजेक्ट कमांड जोड़ें

  • आप /etc/init.d/skeleton टेम्प्लेट को भी देख सकते हैं और इसे अनुकूलित कर सकते हैं कि शायद कुछ आउटपुट जोड़ें जैसे सिस्टम शट डाउन करना, किसी भी कुंजी को cdrom आदि को दबाने के लिए दबाएं।

  • /Etc/init.d में लिपियों की जाँच करें जो रनलेवल निर्देशिकाओं /etc/rc0.d (आधा) में जुड़ी हुई हैं।


0

उस स्क्रिप्ट की जाँच करें /etc/init.dजो रनलेवल निर्देशिका /etc/rc0.d(पड़ाव) और /etc/rc6.d(रिबूट) से जुड़ी हुई है । उदाहरण के लिए, मैंने इजेक्ट कमांड को अंदर डाल दिया /etc/init.d/rebootऔर यह ठीक काम कर गया।

लेकिन, मैं लाइव सीडी पर नहीं हूं इसलिए मैं यह नहीं परख सकता कि क्या काम करेगा।

यदि आप इसके बारे में सोचते हैं, तो कुछ ऐसा है, जिसकी कल्पना करना कठिन है, स्क्रिप्ट या यहां तक ​​कि संकलित बाइनरी। यहां तक ​​कि एक द्विआधारी को कुछ आवंटन / सौदे की ओवरहेड की आवश्यकता होती है, और जैसे ही आप सीडी को अस्वीकार करते हैं, आप कर रहे हैं। बल्कि, यह एक मशीन इंस्ट्रक्शन के लिए एक ध्वज और एक संकेतक की तरह होना चाहिए, कुछ सुपर-सस्टेनेबल मेमोरी में संग्रहीत ...

हो सकता है कि कमांड को चलाना और ओएस को जानबूझकर क्रैश करना आसान हो, लेकिन ऐसा तब किया जाए जब लगभग सभी चीजें ऑफलाइन हों, इसलिए यह मायने नहीं रखेगा कि आप अपने बचे सिस्टम को क्रैश कर दें।

(संपादित करें) एक और विचार: क्या आप किसी भी तरह अपने फाइल सिस्टम को विभाजित कर सकते हैं, सिर्फ इजेक्शन कमांड के लिए एक विभाजन बना सकते हैं और रिबूट कर सकते हैं, बाकी सभी को अनमाउंट कर सकते हैं, फिर कमांड चला सकते हैं? (लेकिन, शायद तब fsck को हर बार शिकायत न करने के लिए कहना होगा, कि बेदखल-विभाजन सही ढंग से नहीं किया गया था।) या, क्या आप इसे एक यूएसबी स्टिक पर रख सकते हैं? (यह एक बहुत ही दिलचस्प समस्या है; यदि आप इसे हल करते हैं, तो हमें बताएं!)

(संपादित करें 2) बेदखल करना और रिबूट विलय के बारे में क्या है , इसलिए आपको एक बाइनरी मिलती है , इसे मेमोरी में लोड किया जाता है, सीडी को बेदखल कर देता है, लेकिन किसी भी फाइल सिस्टम से रिबूट को लोड नहीं करना पड़ता है, यह पहले से ही मुख्य मेमोरी में है?


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.