it-swarm-tr.com

Hangi işlemlerin bir cihazın sökülmesini engellediğini nasıl öğrenebilirim?

Bazen, bir sb aygıtı ile umount /run/media/theDrive, ancak bir drive is busy hata.

Cihaza hangi işlemlerin veya programların eriştiğini nasıl öğrenirim?

70
Stefan

Bağlantının ne kullandığını öğrenmek için lsof | grep /media/whatever Kullanın.

Ayrıca, temizlerken yeni işlemlerin sürücüyü kullanmasını önlemek için umount -l (Tembel umount) öğesini düşünün.

70
Peter Eisentraut

Çoğu zaman, kullanılacak en iyi komut lsof (“ l i s t o kalem f ) “iles.

lsof +f -- /media/usb0

nerede /media/usb0, çıkarılacak USB sürücüsünün veya diğer dosya sisteminin bağlama noktasıdır. +f -- lsof'a sonraki bağımsız değişkeni bağlama noktası olarak ele almasını söyler; genellikle, ama her zaman değil, kendi başına yönetir, böylece lsof /media/usb0 da çalışıyor. Bu, açık dosyaları (bağlantısız olanları bile), bellek eşlemeli dosyaları, geçerli dizinleri ve bazı daha belirsiz kullanımları bulur. Diğer kullanıcıların işlemleri hakkında bilgi almak için komutu root olarak çalıştırmanız gerekir (ve bence lsof 'un root olarak çalıştırılması gereken birimler var).

Lsof'un bulamayacağı kullanımlar var; bunlar çıkarılabilir ortamlarda nadirdir. İçerirler:

  • bağlama noktaları: bağlantısını kesemezsiniz /foo Eğer /foo/bar bir bağlama noktasıdır.
  • cihazları bağla: bağlantıyı kaldıramazsın /foo Eğer /foo/bar, bağlı bir blok aygıt veya döngüye monte edilmiş normal bir dosya veya bir Linux bağlama bağının kaynağıysa.
  • NFS dışa aktarma: lsof, bir ağacın çekirdek NFS sunucusu tarafından dışa aktarıldığını algılamaz.

Bir çimdik içinde hizmet verebilen başka bir komut, yalnızca aygıtta açık dosyaları olan işlemlerin PID'lerini listeleyen kaynaştırıcıdır:

fuser -m /media/usb0

Dosyaları aç

Açık dosyaları olan işlemler olağan suçlulardır. Göster:

lsof +f -- <mountpoint or device>

/dev/<device> Yerine /mountpoint Kullanmanın bir avantajı vardır: umount -l Sonrasında bir bağlama noktası kaybolacak veya üst üste binen bir bağlama parçası tarafından gizlenebilir.

fuser da kullanılabilir, ancak bence lsof daha kullanışlı bir çıktıya sahiptir. Ancak fuser, dramalarınıza neden olan süreçleri öldürmek konusunda faydalıdır, böylece hayatınıza devam edebilirsiniz.

<mountpoint> Üzerindeki dosyaları listeleyin (yukarıdaki uyarıya bakın):

fuser -vmM <mountpoint>

Yalnızca yazma için açık dosyaları olan işlemleri etkileşimli olarak öldürün:

fuser -vmMkiw <mountpoint>

Salt okunur yeniden takıldıktan sonra (mount -o remount,ro <mountpoint>), Kalan tüm işlemleri öldürmek güvenlidir (r):

fuser -vmMk <mountpoint>

Mountpoints

Suçlu, çekirdeğin kendisi olabilir. umount yapmaya çalıştığınız dosya sistemine monte edilmiş başka bir dosya sistemi keder yaratacak. Şununla kontrol et:

mount | grep <mountpoint>/

Geridöngü bağlar için ( teşekkürler Stephen Kitt ), ayrıca çıkışını da kontrol edin:

losetup -la

Anonim inode'lar (Linux)

Anonim inode tarafından oluşturulabilir:

  • Geçici dosyalar (O_TMPFILE İle open)
  • inotify saatler
  • [Eventfd]
  • [Eventpoll]
  • [Timerfd]

Bunlar en zor pokemon türüdür ve lsof 's TYPE sütununda a_inode ( lsof man sayfasında belirtilmemiş) olarak görünür ).

lsof +f -- /dev/<device> 'Da görünmezler, bu nedenle şunları yapmanız gerekir:

lsof | grep a_inode

Anonim inode tutan süreçleri öldürmek için bakınız: Geçerli inotify saatlerini listeleme (yol adı, PID) .

inotify saatler (Linux)

Bu yoruminotify 'nin bağlantıyı kesmeyi neden engellememesi gerektiğini açıklar, ancak bu not 'nin olacağı durumları tanımlar:

bir bağlantıyı kesme vx_softcnt_flush() çağrısında asılı kalabilir. Askıda kalma, inotify saatlerinin i_count Değişkenini artırması ve inotify izleyicisi bekletmeyi serbest bırakana kadar v_os_hold value Öğesinin yükseltilmiş kalmasına neden olduğundan oluşur.

9
Tom Hale

Peter'ın söylediği gibi lsof kullanabilirsiniz ya da tüm bunları öldürüp bağlantısını kesmek istediğinizden eminseniz, muhtemelen şöyle bir şey yapabilirsiniz:

fuser -Mk /mnt/path
umount /mnt/path
8
pioto

GNOME kullanıyorsanız, Nautilus üzerinden bağlantıyı kesmek, hangi işlemin hala sürücüyü kullandığını ve kullandığı dosyayı belirten bir mesaj görüntüler.

alt text

5
tshepang

(En azından) OpenBSD için:

$ fstat /mnt/mountpoint

Örneğin (aksi takdirde yalnızca kendi süreçlerimizi göreceğimiz gibi doas 'ı root olarak çalıştırmak için fstat kullanılması):

$ doas fstat /usr/ports
USER     CMD          PID   FD MOUNT        INUM MODE         R/W    SZ|DV NAME
_pbuild  make       15172   wd /usr/ports  3923598  drwxrwxr-x     r     1536 /usr/ports/
_pbuild  make       40034   wd /usr/ports  3923598  drwxrwxr-x     r     1536 /usr/ports/

Bu durumda, /usr/ports Kullanıcısı bu iki make işlemini çalıştırmayı bitirinceye kadar _pbuild Bağlantısını kesemeyeceğim.

1
Kusalananda