बचें umount -l
लेखन के समय, शीर्ष मत वाले उत्तर का उपयोग करने की सलाह देते हैं umount -l
।
umount -l
खतरनाक है या सबसे अच्छा असुरक्षित है । संक्षेप में:
- यह वास्तव में डिवाइस को अनमाउंट नहीं करता है, यह सिर्फ नेमस्पेस से फाइल सिस्टम को हटा देता है। फ़ाइलें खोलने के लिए लेखन जारी रह सकता है।
- यह btrfs फाइल सिस्टम भ्रष्टाचार का कारण बन सकता है
चारों ओर काम / विकल्प
का उपयोगी व्यवहार निरपेक्ष पाथनेम्स umount -l
द्वारा एक्सेस से फाइल सिस्टम को छिपा रहा है , जिससे आगे के मॉउटपॉइंट का उपयोग कम से कम हो।
यह वही व्यवहार एक खाली निर्देशिका बढ़ते द्वारा हासिल किया जा सकता है जिसमें निर्देशिका की अनुमति के बिना अनुमति नहीं है 000
।
फिर माउंटपॉइंट के नीचे स्थित फ़ाइल नाम पर कोई भी नई पहुंच नए ओवरलेड डायरेक्टरी को शून्य अनुमतियों से टकराएगी - नए अवरोधकों को अनमाउंट करने से रोका जाता है।
पहले प्रयास करें remount,ro
अनलॉक किए जाने के लिए सबसे बड़ी उपलब्धि केवल पढ़ने वाला रिमाउंट है। जब आप remount,ro
बैज हासिल करते हैं , तो आप जानते हैं कि:
- सभी लंबित डेटा को डिस्क पर लिखा गया है
- भविष्य के सभी लिखित प्रयास विफल हो जाएंगे
- डेटा एक सुसंगत स्थिति में है, क्या आपको डिवाइस को शारीरिक रूप से डिस्कनेक्ट करने की आवश्यकता है।
mount -o remount,ro /dev/device
लिखने के लिए फ़ाइलें खुली हैं , तो विफल होने की गारंटी है , इसलिए कोशिश करें कि सीधे ऊपर जाएं। आप भाग्यशाली महसूस कर रहे होंगे, पंक!
यदि आप अशुभ हैं, तो लेखन के लिए खुली फाइलों वाली प्रक्रियाओं पर ध्यान दें :
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
आपको तब केवल पढ़ने योग्य डिवाइस को रिमूव करने और एक सुसंगत स्थिति सुनिश्चित करने में सक्षम होना चाहिए।
यदि आप इस बिंदु पर केवल रीड-रिमाउंट नहीं कर सकते हैं, तो यहां सूचीबद्ध कुछ अन्य संभावित कारणों की जांच करें ।
पढ़ें-केवल पुन: माउंट उपलब्धि अनलॉक mount
बधाई हो, माउंटपॉइंट पर आपका डेटा अब सुसंगत और भविष्य के लेखन से सुरक्षित है।
क्यों fuser
हीन हैlsof
fuser
पहले इस्तेमाल क्यों नहीं हुआ ? ठीक है, आप कर सकते हैं, लेकिन fuser
एक निर्देशिका पर संचालित होता है , एक उपकरण नहीं , इसलिए यदि आप फ़ाइल नाम स्थान से माउंटपॉइंट निकालना चाहते हैं और अभी भी उपयोग करते हैं fuser
, तो आपको निम्न की आवश्यकता होगी:
mount -o bind /media/hdd /mnt
अन्य स्थान के साथ माउंटपॉइंट को अस्थायी रूप से डुप्लिकेट करें
- मूल माउंट बिंदु छिपाएं और नाम स्थान को अवरुद्ध करें:
ऐसे:
null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"
# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked. https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"
# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"
# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"
फिर आपके पास होगा:
- मूल नाम स्थान छिपा हुआ है (कोई और फ़ाइल नहीं खोली जा सकती है, समस्या बदतर नहीं हो सकती है)
- डुप्लिकेट बाइंड माउंटेड डायरेक्टरी (एक डिवाइस के विपरीत) जिस पर चलना है
fuser
।
यह अधिक जटिल है [1] , लेकिन आपको उपयोग करने की अनुमति देता है:
fuser -vmMkiw <mountpoint>
जो अंतःक्रियात्मक रूप से लिखने के लिए खुली फाइलों के साथ प्रक्रियाओं को मारने के लिए कहेगा। बेशक, आप माउंट पॉइंट को छिपाए बिना ऐसा कर सकते हैं, लेकिन ऊपर की मिमिक्रीumount -l
, बिना किसी खतरे के।
-w
प्रक्रियाओं लिखने के लिए स्विच प्रतिबंधित करता है, और -i
केवल पढ़ने के लिए रिमाउंट इंटरैक्टिव है, तो एक के बाद, यदि आप इसे जल्दी आप तो इस्तेमाल कर सकते हैं कर रहे हैं:
fuser -vmMk <mountpoint>
माउंटपॉइंट के तहत खुली फाइलों के साथ सभी शेष प्रक्रियाओं को मारने के लिए।
उम्मीद है कि इस बिंदु पर, आप डिवाइस को अनमाउंट कर सकते हैं। ( umount
यदि आपने किसी मोड को बांध दिया है तो आपको दो बार माउंटपॉइंट पर चलने की आवश्यकता होगी000
शीर्ष पर निर्देशिका ।)
या उपयोग करें:
fuser -vmMki <mountpoint>
अंतःक्रियात्मक रूप से शेष पढ़ने के लिए केवल उन्मुक्त प्रक्रियाओं को मारना।
दमयन्ती, मुझे अभी भी मिलता है target is busy
!
खुली फाइलें केवल अवरोधक नहीं हैं। यहाँ और यहाँ देखेंअन्य कारणों और उनके उपचार के लिए ।
यहां तक कि अगर आपको कुछ लचरिंग ग्रेमलिन मिला है, जो आपको डिवाइस को पूरी तरह से अनमाउंट करने से रोक रहा है, तो आपको कम से कम एक सुसंगत स्थिति में अपना फाइल सिस्टम मिल गया है।
फिर आप lsof +f -- /dev/device
फ़ाइल सिस्टम युक्त फ़ाइल पर खुली फ़ाइलों के साथ सभी प्रक्रियाओं को सूचीबद्ध करने के लिए उपयोग कर सकते हैं , और फिर उन्हें मार सकते हैं।
[१] यह उपयोग करने के लिए कम जटिल है mount --move
, लेकिन इसके लिए mount --make-private /parent-mount-point
इसके निहितार्थ हैं । मूल रूप से, यदि माउंट पॉइंट /
फाइल सिस्टम के तहत माउंट किया गया है , तो आप इससे बचना चाहेंगे।