Arka montajdan sonra tekrarlanan miktar


13

Bir köke girerken bazen / sys ve / dev'i -bind yerine -rbind kullanarak bağlamak için, her şey birileri aradığında her şeyin doğru yerde olduğundan emin olmak için gereklidir.

Sorun ayrılırken ortaya çıkar.

Basit bir sayı her zaman başarısız olur; çocuklar da monte edilirken kullanımda olduğu görülüyor:

$ 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))

Başka bir olası çözüm, proc'tan bağları listelemek ve her birini takmaktır:

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

Ancak bu başarısız olur, çünkü özyinelemeli bağlar aslında mtab'da kayıtlı değildir:

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

Belki de çözüm tembel bir miktar yapmaktır, ancak bu benim için oldukça tehlikeli görünüyor.

Bunu yapmanın daha iyi bir yolu var mı?


1
/mnt/chroot/sys/kernel/securityBu noktaya monte edildiğinden emin misiniz ? Çıktısı nedir grep /sys/kernel/security /proc/mounts? umountlistelenmesi için argümanına ihtiyaç duymaz /etc/mtab. Eğer -niletirseniz, dosyayı hiç açmaz.
Gilles 'SO- kötü olmayı bırak

Eğer umount için xargs oluşturmak için benim grep komutu yakından bakarsanız, ben sadece / proc / bağlar listelenen bağlar yolluyorum
natecornell

Yanıtlar:


11

Bu benim için doğru çalıştı - /unix//a/264488/4319 :

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

İki ilk komutun iki ayrı komut olması önemlidir: birleştirmeyin --rbindve --make-rslavebir bağlanma çağrısında bulunun.

Olmadan --make-rslave, davranış istenmeyen (ve başarılı olmayan) değildi:

  • umount -l orijinal eski bağlama noktalarını da etkiler,
  • ve umount -Rözgün eski mountpoints altında meşgul (açık) dosyaları tarafından etkilenecektir. (Çok beklenmedik ...)

Bunun bağlantının son bir sürümünde düzeltilip düzeltilmediğini bilmiyorum, ancak birleştirmek --rbindve --make-rslaveaynı montaj çağrısında mükemmel bir sorun yok :mount --rbind --make-rslave /dev /mnt/test
Javi Merino

1
İki argümanı birleştirebilirsiniz, ancak bunun yerine özyinelemeli olmayan bir bağ yapar. Yani aslında amaçlandığı gibi çalışmıyor.
Miral

10

Kredi bu cevap için Gilles'e gidiyor ; Gilles, soru yorumlarında '-n' anahtarının mtab'ı yok saydığını ve / proc / mount'larda listelenen herhangi bir şeyin bağlantısını kestiğini belirtti.

Manpage'den:

-n     Unmount without writing in /etc/mtab.

Bu yüzden --rbind montajını nasıl çözeceğime dair sorumu cevaplamak için, benim için çalışan tam komut budur:

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

Merci, Gilles!


1
Deniyorum mount --rbind / /mnt && umount -n /mnt/dev/shm(ya da puan), anladım umount: /mnt/dev/shm: target is busy. umount -l /mntsistemi öldürür (sudo, stdin'in bir tty olmadığını söyleyerek başarısız olur). Bu, kurulu bir Fedora sisteminde. Sanırım eski bir sorunum: unix.stackexchange.com/questions/269695/…
sourcejedi

3

Yana util-linux v2.23 (25 Nisan-2013) umountkomutu destekler -R, --recursiveseçeneğini.

Man sayfası şöyle diyor:

Belirtilen her dizinin yinelenen bağlantısını kesin. Zincirdeki herhangi bir sökme işlemi herhangi bir nedenle başarısız olursa, her dizin için özyineleme durur. Bağlama noktaları arasındaki ilişki /proc/self/mountinfo girişlerle belirlenir . Dosya sistemi bağlama noktası yolu ile belirtilmelidir; cihaz adına (veya UUID) göre yinelenen bir bağlantı kesilmesi desteklenmez.


0

Bunun için teşekkürler. Komut dosyamda tüm ağaç ağacının bağlantısını kesmek için bunu kullanıyorum: ($ MNT'yi buna göre ayarladığınızdan emin olun)

for dir in $(grep "$MNT" /proc/mounts | cut -f2 -d" " | sort -r)
do
    umount $dir 2> /dev/null
    (( $? )) && umount -n $dir
done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.