Bazen, bir kaldırmak istiyorum usb cihazı ile umount /run/media/theDrive, ama olsun drive is busyhatası.
Hangi işlemlerin veya programların aygıta eriştiğini nasıl bulabilirim?
Bazen, bir kaldırmak istiyorum usb cihazı ile umount /run/media/theDrive, ama olsun drive is busyhatası.
Hangi işlemlerin veya programların aygıta eriştiğini nasıl bulabilirim?
Yanıtlar:
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 .
fuser -mv /path/to/mountpointbir nokta noktasını kullanarak işlemleri bulmak için daha okunabilir bir alternatif olabilir.
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.
umount -ltehlikelidir . yerine mount -o bind bir mod 000boş dizin yerine, ve üzerinden temizlemek lsof +f -- /dev/device.
Ç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:
/fooolup olmadığını gösteremezsiniz /foo/bar./fooeğer /foo/barbir monte blok aygıt veya döngü monte düzenli dosya mı yoksa Linux bağlama kaynağı ise montaj.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
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
-Mgüvenlik için kullanmaya bakın.
-Muygulanacağını netleştirmek isteyebilirsiniz .
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.
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>
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 inode'lar şu şekilde oluşturulabilir:
openile O_TMPFILE)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 saatlerini_countdeğişkeniv_os_hold valueartırması ve inotify watcher bekletmeyi bırakana kadar yüksek kalmasına neden olması nedeniyle oluşur .
lsof.
Mountpoints.
(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 .
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.