umount - cihaz meşgul


14

Bazen bir cihazı takmak istediğimde, ör.

sudo umount /dev/loop0

Mesajı alacağım

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

Bu sorunu genellikle bir konsol penceresini (benim durumumda xfce4-terminali) kapatarak ve sonra çözerim umount.

Bu sorun ne anlama geliyor? Daha akıllı bir çözüm var mı?


2
Bu, örneğin, aygıtın bağlı olduğu dizinde hala bir kabuktaysanız gerçekleşir.
klapaucius

Orada olup olmadığımı hatırlamıyorum ama denedim ve haklısın, bu oldu.
xralf

Yanıtlar:


14

Bu, bazı işlemlerin bağlama noktasının altında bir çalışma dizini veya açık bir dosya tanıtıcısı olduğu anlamına gelir. Yapılacak en iyi şey, sorun çıkarmadan önce işlemi sonlandırmak, çalışma dizinini değiştirmek veya dosya tanıtıcısını kapatmaktır.

Ancak Linux'ta bir alternatif var. Kullanarak umount -l"tembel" çağrıyı çağırır. Dosya sistemi yine de bağlanır, ancak zaten kullanmakta olan işlemler dışında dosyayı göremez veya kullanamazsınız. Sorun teşkil eden programdan çıkıldığında (ne anlama gelirse gelsin), sistem dosya sisteminin bağlantısını keserek "bitirir".


2
Hangi işlemin açık dosya tanıtıcısına sahip olduğunu ve sonlandırılması gerektiğini bulmanın bir yolu var mı?
xralf

4
Kullanmak lsofmuhtemelen en iyi yoldur.
Bahama

1
örneğin lsof | grep loop0?
xralf

Hayır, montaj noktası için grep. Altındaki dosyaları listelemelidir. Sadece bağlanma noktasının altında çalışan bir dizini olan şeyleri göstereceğini sanmıyorum, bu yüzden mükemmel bir yöntem değil.
Bahama

7

fuserTakılı dosya sistemini kullanarak tüm işlemleri öldürmek için de kullanabilirsiniz .

fuser -cuk /mnt

Seçenekler:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

Kendiniz için kontrol edin explainshell .


3

"Her zamanki çözümünüz" göz önüne alındığında, konsol pencerenizde çalıştırdığınız kabuğun, o aygıttaki dosya sisteminde geçerli çalışma dizini olarak bir dizin olduğu anlamına gelir.

Linux ve genel olarak Unixes, bir işlemin o dosya sisteminde geçerli bir çalışma dizini varsa, bir dosya sistemini bağlı tutmak çok kötü bir şekilde istiyor.

Sadece kullanabilirsiniz cdveya altında bir dizin çıkmak için konsol penceresinde /mntziyade konsol penceresini öldürmekten daha, ve kabuk içine koşuyor.


0

Bu soru çok eski olmasına rağmen cevap olarak paylaşacağım bir cihazın bağlantısını kesmeye müdahale edebilecek bir durum keşfettim.

Makinede barındırılan NFS paylaşımlarınız varsa ve bu NFS paylaşımlarından herhangi biri bağlantısını kesmeye çalıştığınız aygıt tarafından destekleniyorsa, bunları paylaşmayı durdurmanız gerekir (en iyi NFS hizmetini, örneğin sudo service nfs-kernel-server stopUbuntu'nun son sürümlerinde) ). NFS sunucusu lsof veya kaynaştırıcıda görünmeyebilir, bu da sorunun tanımlanmasını zorlaştırabilir.

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.