Rbind माउंट के बाद पुनरावर्ती umount


13

जब एक चुरोट में प्रवेश करना कभी-कभी आवश्यक होने के कारण -इसके बजाय -Bind के बजाय / sys और / dev का उपयोग करके माउंट करना आवश्यक होता है, तो यह सही जगह पर है जब कोई व्यक्ति देखता है।

समस्या तब आती है जब कोई बात नहीं।

एक साधारण ऑमाउंट हमेशा विफल रहता है; बच्चों के घुड़सवार होने के साथ ही यह उपयोग में आता है:

$ umount /mnt/chroot/sys
umount: /mnt/chroot/sys: device is busy.
    (In some cases useful info about processes that use
     the device is found by lsof(8) or fuser(1))

एक और संभावित समाधान है, खरीद से mounts की सूची बनाना, और उनमें से प्रत्येक को पसंद करना:

$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount

हालांकि यह भी विफल रहता है क्योंकि पुनरावर्ती माउंट वास्तव में mtab में पंजीकृत नहीं हैं:

/mnt/chroot/sys/kernel/security is not mounted (according to mtab)

शायद इसका समाधान एक आलसी व्यक्ति को करना है, लेकिन यह मुझे बहुत खतरनाक लगता है।

क्या ऐसा करने का एक बेहतर तरीका है जो मैंने याद किया है?


1
क्या आप वाकई /mnt/chroot/sys/kernel/securityउस बिंदु पर आरूढ़ हैं? का आउटपुट क्या है grep /sys/kernel/security /proc/mounts? umountमें सूचीबद्ध होने के लिए इसके तर्क की आवश्यकता नहीं है /etc/mtab। यदि आप इसे पास करते हैं -n, तो यह फ़ाइल को बिल्कुल भी नहीं खोलेगा।
गाइल्स का SO- दुष्ट होना बंद करें '

यदि आप umount के लिए xargs बनाने के लिए मेरे grep कमांड को करीब से देखते हैं, तो मैं केवल इसे / proc / mounts में सूचीबद्ध mounts भेज रहा हूं
natecornell

जवाबों:


11

इसने मेरे लिए सही ढंग से काम किया - /unix//a/264488/4319 :

mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test

दो पहले कमांड को दो अलग-अलग कमांड के रूप में रखना महत्वपूर्ण था: माउंट के एक आह्वान में गठबंधन न करें --rbindऔर न करें --make-rslave

बिना --make-rslave, व्यवहार अवांछित था (और सफल नहीं):

  • umount -l मूल पुराने माउंटपॉइंट को भी प्रभावित करेगा,
  • और umount -Rमूल पुराने माउंटपॉइंट्स के तहत व्यस्त (खुली) फाइलों से प्रभावित होगा। (बहुत अप्रत्याशित ...)

पता नहीं है कि यह माउंट के एक हाल के संस्करण में तय किया गया है, लेकिन यह पूरी तरह से ठीक है --rbindऔर --make-rslaveएक ही माउंट आह्वान में संयोजन करने के लिए ठीक है :mount --rbind --make-rslave /dev /mnt/test
जेवी मेरिनो

1
जब आप दो तर्कों को जोड़ सकते हैं, तो यह इसके बजाय गैर-पुनरावर्ती माउंट करता है। तो यह वास्तव में इरादा के रूप में काम नहीं करता है।
मिरल

10

इस उत्तर का श्रेय गिल्स को जाता है ; गिल्स ने प्रश्न टिप्पणियों में कहा कि 'एन-स्विच' mtab को अनदेखा करता है और / proc / mounts में सूचीबद्ध किसी भी चीज़ को अनमाउंट करता है।

मैनपेज से:

-n     Unmount without writing in /etc/mtab.

तो मेरे सवाल का जवाब देने के लिए कि कैसे - arbind माउंट को खोलना है, यह पूरी कमांड है जो मेरे लिए काम करती है:

grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount -n

मर्सी, गाइल्स!


1
कोशिश करना mount --rbind / /mnt && umount -n /mnt/dev/shm(या पीटीएस), मुझे मिलता है umount: /mnt/dev/shm: target is busyumount -l /mntसिस्टम को मारता है (उदाहरण के लिए सूडो यह कहते हुए विफल हो जाता है कि स्टड टेंट नहीं है)। यह एक स्थापित फेडोरा प्रणाली पर है। मुझे लगता है कि यह मेरी एक पुरानी समस्या है: unix.stackexchange.com/questions/269695/…
sourcejedi

3

चूंकि उपयोग -लिनक्स v2.23 (25-Apr-2013) umountकमांड -R, --recursiveविकल्प का समर्थन करता है।

यहाँ मैन पेज क्या कहता है:

प्रत्येक निर्दिष्ट निर्देशिका को पुनर्मुद्रित करें। यदि किसी कारण से श्रृंखला में कोई भी अनमाउंट ऑपरेशन विफल हो जाता है, तो प्रत्येक निर्देशिका के लिए पुनरावृत्ति रुक ​​जाएगी। माउंटपॉइंट के बीच संबंध /proc/self/mountinfo प्रविष्टियों द्वारा निर्धारित किया जाता है । फाइलसिस्टम को माउंटपॉइंट पथ द्वारा निर्दिष्ट किया जाना चाहिए; डिवाइस नाम (या UUID) द्वारा एक पुनरावर्ती अनमाउंट असमर्थित है।


0

उसके लिए धन्यवाद। मैं इसका उपयोग अपनी लिपियों में पूरे चिरोट-वृक्ष को हटाने के लिए करता हूं: (तदनुसार $ MNT सेट करना सुनिश्चित करें)

for dir in $(grep "$MNT" /proc/mounts | cut -f2 -d" " | sort -r)
do
    umount $dir 2> /dev/null
    (( $? )) && umount -n $dir
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.