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


Yanıtlar:


57

Bağlantının lsof | grep /media/whateverne olduğunu bulmak için kullanın .

Ayrıca, umount -lyeni işlemlerin temizlerken sürücüyü kullanmasını önlemek için (tembel umount) değerlendirebilirsiniz .


24
fuser -mv /path/to/mountpointbir nokta noktasını kullanarak işlemleri bulmak için daha okunabilir bir alternatif olabilir.
Riccardo Murri

@RiccardoMurri lsof | grepbenim için daha iyi çalışıyor. fuser -mvSadece ilgisiz süreçleri 80'den fazla atmış gibi görünüyor. Bağlanmış dizinleri kullanıyorum.
Ricky Boyce

1
umount -ltehlikelidir . yerine mount -o bind bir mod 000boş dizin yerine, ve üzerinden temizlemek lsof +f -- /dev/device.
Tom Hale

35

Çoğu zaman, kullanıcı için en iyi komut lsof ( “ L ı s T O kalem f iles”).

lsof +f -- /media/usb0

/media/usb0USB sürücüsünün ya da diğer dosya sisteminin bağlantı noktasının bağlantısını kesmek nerede . +f --lsof'a sonraki argümanı bir bağlama noktası olarak görmesini söyler; genellikle, ancak her zaman değil, kendi kendine yönetir, böylece lsof /media/usb0çalışır. Bu açık dosyaları (hatta bağlantısız olanlar bile), hafızaya eşlenmiş dosyaları, güncel dizinleri ve bazı gizli kullanımları bulur. Diğer kullanıcıların işlemleri hakkında bilgi almak için komutu root olarak çalıştırmanız gerekecek (ve sanırım lsofroot olarak çalıştırılması gereken sendikalar var ).

Lsof'un bulamayacağı kullanımlar var; bunlar çıkarılabilir medyada nadir görülür. Onlar içerir:

  • bağlantı noktaları: bir bağlantı noktası /fooolup olmadığını gösteremezsiniz /foo/bar.
  • bağlama cihazlar: unmount olamaz /fooeğer /foo/barbir monte blok aygıt veya döngü monte düzenli dosya mı yoksa Linux bağlama kaynağı ise montaj.
  • NFS verme: lsof, bir ağacın çekirdek NFS sunucusu tarafından verildiğini algılamayacaktır.

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

fuser -m /media/usb0

8

lsofPeter'ın dediği gibi kullanabilirsiniz , ya da tüm bu şeyleri öldürmek ve sökmek istediğinizden eminseniz, muhtemelen şöyle bir şey yapabilirsiniz:

fuser -Mk /mnt/path
umount /mnt/path

1
Bunu yapacaksanız, -Mgüvenlik için kullanmaya bakın.
Tom Hale

@TomHale Hangi komuta -Muygulanacağını netleştirmek isteyebilirsiniz .
HSchmale

1
fuser:-M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Tom Hale

6

Dosyaları aç

Açık dosyalar içeren işlemler olağan suçlulardır. Onları göster:

lsof +f -- <mountpoint or device>

Kullanmanın bir avantajı vardır /dev/<device>ziyade /mountpointbir mountpoint bir sonra kaybolacaktır: umount -lya da kalıbı oluşturulmuş bir mount tarafından gizlenmiş olabilir.

fuserayrıca kullanılabilir, ama aklıma lsofdaha yararlı bir çıktı var. Ancak fuser, dramalarınıza neden olan süreçleri öldürmek konusunda faydalıdır, böylece hayatınıza devam edebilirsiniz.

Dosyaları listele <mountpoint>(yukarıdaki uyarıya bakın):

fuser -vmM <mountpoint>

Yalnızca yazma için açık dosyalar ile etkileşimli olarak öldürme işlemleri:

fuser -vmMkiw <mountpoint>

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

fuser -vmMk <mountpoint>

Mountpoints

Suçlu, çekirdeğin kendisi olabilir. Çalıştırmaya çalıştığınız dosya sistemine bağlı başka bir dosya sistemi, umountüzüntüye neden olacaktır. Şununla kontrol et:

mount | grep <mountpoint>/

Geri döngü montajları için ( teşekkürler Stephen Kitt ), ayrıca çıktısını kontrol edin:

losetup -la

Anonim düğümler (Linux)

Anonim inode'lar şu şekilde oluşturulabilir:

  • Geçici dosyalar ( openile O_TMPFILE)
  • saatler inotify
  • [Eventfd]
  • [Eventpoll]
  • [Timerfd]

Bunlar pokemon en zor türüdür ve görünen lsof'ın TYPEolarak sütun a_inode(belgelenmemiş lsofadam sayfası ).

İçeri girmeyecekler lsof +f -- /dev/<device>, bu yüzden yapmanız gerekenler:

lsof | grep a_inode

İsimsiz inode'ları tutan öldürme işlemleri için, bakınız: Geçerli inotify saatlerini listele (yol adı, PID) .

inotify saatler (Linux)

Bu yorum neden bir unmount'u engellememesi inotify gerektiğini açıklar , ancak bu not , hangi durumlarda olacağını açıklamaktadır :

bir unmount vx_softcnt_flush()çağrıya asılabilir . Askıda kalma , inotify saatlerin i_countdeğişkeni v_os_hold valueartırması ve inotify watcher bekletmeyi bırakana kadar yüksek kalmasına neden olması nedeniyle oluşur .


Başka bir tane var, geridöngü bağlar: bir dosya sistemi bağlarsanız, o zaman bir dosya bağcığı kullanarak bu dosya sistemine bağlarsanız, ilk dosya sisteminin bağlantısını kaldıramazsınız, ancak hiçbir şey görünmez lsof.
Stephen Kitt

Şerefe. Bölüme eklendi Mountpoints.
Tom Hale

5

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

alt metin


1

(En azından) OpenBSD için:

$ fstat /mnt/mountpoint

Örneğin ( aksi takdirde yalnızca kendi işlemlerimizi göreceğimiz gibi root olarak doasçalıştırmak için kullanılır fstat):

$ 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/portskullanıcı _pbuildbu iki makeişlemi çalıştırmayı bitirene kadar bağlantıyı kesemem .


-2

Bu yaygın bir tuzaktır: Farklı bir kullanıcıya (ya kök ya da başka bir kullanıcı) dava açarsanız, monte edilmiş bir cihazın dizinine geçersiniz ve ardından o kullanıcı olarak çıkış yaparsınız. Bu dizinde bıraktığınızı unuttuğunuzda, kör olana kadar deneyebilir ve bulabilirsiniz. lsofmevcut dizinin o aygıtı kullandığı kabuğu gösterir. Dizini değiştirmek için bu kullanıcı olarak tekrar dava açmak isteyebilirsin.


2
Bu cevap ya eksik ya da yanlış. Hangisi olduğundan emin değilim çünkü net değil.
hildred
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.