रीड-ओनली मोड में एक व्यस्त डिस्क को रिमूव करें


19

मैं एक डिस्क विभाजन को केवल मोड पढ़ने के लिए बाध्य करना चाहता हूं और इसे केवल 30 मिनट से अधिक समय तक पढ़ना चाहता हूं।

मैंने क्या कोशिश की है:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    समस्या : इसने डिवाइस को त्रुटि दी क्योंकि कुछ प्रक्रियाएं विभाजन का उपयोग कर रही थीं। मैं डिस्क का उपयोग करके प्रक्रियाओं को मारना नहीं चाहता। मैं डिस्क को अचानक से केवल पढ़ने के लिए अनुकरण करना चाहता हूं, जब प्रक्रियाएं अभी भी इसका उपयोग कर रही हैं।

  2. नीचे की तरह जादू sysrq कुंजी का इस्तेमाल किया

    echo u > /proc/sysrq-trigger
    

    समस्या : यह सभी डिस्क विभाजन को केवल पढ़ने के लिए बनाएगा (हालाँकि डिवाइस व्यस्त है)। लेकिन 20-30 मिनट के बाद मशीन खुद को रिबूट कर रही है। यह आदेश निष्पादित होते ही कुछ मशीनें तुरंत रिबूट हो रही हैं। निश्चित नहीं है कि इस रिबूट के कारण क्या हैं। मैं नहीं चाहता कि मशीन खुद को रिबूट करे और डिस्क को रीड-ओनली मोड में 30+ मिनट तक रखने की आवश्यकता है।

प्रश्न : क्या कोई बेहतर तरीका है कि मैं किसी एकल डिस्क विभाजन को केवल पढ़ने के लिए मजबूर कर सकता हूं और इसे आधे घंटे तक उस स्थिति में बनाए रख सकता हूं और इस प्रक्रिया में कोई रिबूट किए बिना रीड-राइट मोड में वापस ला सकता हूं?


3
क्या आपने विचार किया fsfreeze -f? यह केवल पढ़ने के लिए फाइल सिस्टम को ठीक नहीं करता है। इसके बजाय, यह तब तक सभी लेखकों को ब्लॉक करता है fsfreeze -u। लेकिन यह समान है ...
Celada

धन्यवाद Celada! यह एक अच्छा विचार है! .. अभी मेरे पास मेरे मशीन में काम करने वाली fsfreeze नहीं है, लेकिन मैं यह कोशिश करूँगा।
AdithyaCS

मैंने कोशिश की fsfreeze -fऔर यह मेरा मामला अधिक "ओएस फ्रीज" था। शायद इसलिए कि लिखने को अस्वीकार किए जाने के बजाय अवरुद्ध किया गया था?
पायोत्र फाइंडसेन

fsfreezeमेरी प्रणाली को दुर्गम कर दिया और मैं एक टर्मिनल पर वापस स्विच करने में सक्षम नहीं होने वाले अप्रभावी कमांड में प्रवेश नहीं कर सका और मुझे अपनी मशीन को हार्ड-रिबूट करना पड़ा। इसलिए चेतावनी दी जाए ! :)
एलेक्स

जवाबों:


16

आप सामान्य रूप से किसी फ़ाइल सिस्टम को केवल पढ़ने के लिए रिमूव नहीं कर सकते हैं, अगर उस पर प्रक्रियाएँ हैं जो उस पर लिखने के लिए खुली हैं, या यदि उसमें ऐसी फ़ाइल है जो हटा दी गई है, लेकिन फिर भी खुली है। इसी तरह, आप एक फाइलसिस्टम को अनमाउंट नहीं कर सकते हैं जिसमें कोई भी फाइल खुली हो (या फाइलों के समान उपयोग जैसे कि इसकी वर्तमान निर्देशिका होने की प्रक्रिया, एक रन करने योग्य निष्पादन आदि)।

आप umount -lमाउंट पॉइंट जारी करने और आगे की फ़ाइलों को खोलने से रोकने के लिए उपयोग कर सकते हैं , लेकिन फाइलसिस्टम को माउंट रखें और ऐसी प्रक्रियाएं रखें जिनमें पहले से फाइलें सामान्य रूप से चलती हैं।

मैं एक जेनेरिक तरीके के बारे में नहीं सोच सकता कि किसी फाइलसिस्टम को केवल पढ़ने के लिए रिमूव करने के लिए मजबूर किया जाए जब यह नहीं होना चाहिए। हालाँकि, यदि फ़ाइल सिस्टम ब्लॉक डिवाइस द्वारा समर्थित है, तो आप ब्लॉक डिवाइस को केवल पढ़ने के लिए बना सकते हैं , जैसे

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggerकेवल पढ़ने-लिखने के लिए मजबूर करने के बजाय एक चरम तरीका है, क्योंकि यह सभी फाइल सिस्टम को प्रभावित करता है। यह रिबूट करने से ठीक पहले एक साफ स्थिति में फाइल सिस्टम को छोड़ने के लिए एक अंतिम-खाई विधि के रूप में है।

किसी फ़ाइल-सिस्टम को केवल-पढ़ने के लिए रीबूट करने के कारण नहीं है। रिबूट के कारण जो कुछ भी होता है वह सीधे विभाजन को केवल पढ़ने के लिए याद करने से संबंधित नहीं है। हो सकता है कि यह पूरी तरह से असंबंधित हो, या हो सकता है कि यह एप्लिकेशन में एक बग को ट्रिगर करता है जो इसे स्पिन करने का कारण बनता है और प्रोसेसर को गर्म करता है और आपका प्रोसेसर दोषपूर्ण या ओवरक्लॉक होता है और अंततः रिबूट होता है। आपको रीबूट के कारण को ट्रैक करने की आवश्यकता है।


2
दुर्भाग्य से, यह पोर्टेबल समाधान नहीं है। रास्पबेरी पर मुझे मिलता है: "अनुमति से इनकार" जब मैं दौड़ता हूंecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen

.. और echo u > /proc/sysrq-triggerन केवल अतिवादी है, बल्कि यदि आप आरडब्ल्यू को वापस लेना चाहते हैं तो आपको रिबूट करने के लिए मजबूर कर सकते हैं। जब मैंने यह कोशिश की और फिर रिमाउंट (के साथ mount..) dmesgने कहा "अप्रमाणित अनाथ इनोड सूची के कारण RDWR को रिमाउंट नहीं किया जा सकता। कृपया umount / remount बजाय"
Piotr Findeisen

@PiotrFindeisen क्या आपने इसे रूट के रूप में चलाया?
हैंश्रिक

@hanshenrik मुझे ऐसा लगता है
पिओट्र फाइंडसेन

4

mountबल के विकल्प का उपयोग करें (मान लें कि आपके माउंट में एक है; GNU mountनहीं करता है, लेकिन उदाहरण के लिए BSD और macOS):

mount -f -o remount,ro /mount/point

बेशक, आपका माइलेज वास्तविक फाइल सिस्टम, कर्नेल संस्करण और स्थिति के आधार पर अलग-अलग हो सकता है , इसलिए यह अन्य उच्च-स्तरीय विकल्प की कोशिश कर रहा है, जैसा कि @Gilles द्वारा उल्लेखित है।


1
@ अपुसी नं। इसने मुझे मेरे ext4 /विभाजन को हटाने की अनुमति दी ।
पिओत्र फाइंडसेन

2
मुझे लगता है कि मैं सोच रहा था umount -f, लेकिन मैंने अभी-अभी आरओ के लिए रिमाउंटिंग की कोशिश की, और -फिर कमांड को एक त्रुटि वापस नहीं करता है, फाइलसिस्टम वास्तव में है, केवल पढ़ा नहीं जाता है।
Psusi

1
@ अपुस्सी, कोई आश्चर्य नहीं। मैं सभी मामलों में काम करने के लिए किसी एकल दृष्टिकोण की उम्मीद नहीं करूंगा। यह मेरे लिए काम किया repeatably (बात के लिए रास्पबेरी पर ext4 जड़ विभाजन) - और मेरा मतलब है remounting आरओ के लिए, नहीं अनदेखी त्रुटियों - तो मैं कुछ के लिए काम करेंगे लगता है, लेकिन सभी नहीं, अन्य मामलों। क्षमा करें, इसमें आपका नाम शामिल नहीं था।
पायोटर फाइंडसेन

13
आदमी पर्वत कहते -fहै --fake। उद्धरण: "वास्तविक सिस्टम कॉल को छोड़कर सब कुछ किया जा सकता है; अगर यह स्पष्ट नहीं है, तो यह '' फेक 'फाइलिंग सिस्टम को बढ़ाना है। यह विकल्प -v ध्वज के साथ संयोजन के रूप में उपयोगी है यह निर्धारित करने के लिए कि माउंट कमांड क्या कोशिश कर रहा है। do। इसका उपयोग उन उपकरणों के लिए प्रविष्टियाँ जोड़ने के लिए भी किया जा सकता है, जो पहले -n विकल्प के साथ माउंट किए गए थे। -f विकल्प मौजूदा रिकॉर्ड / etc / mtab के लिए जाँच करता है और विफल रहता है जब रिकॉर्ड पहले से मौजूद है (नियमित रूप से गैर-नकली माउंट के साथ,) यह जाँच कर्नेल द्वारा की जाती है)। "
विल मनाली

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